[Vm-dev] [commit][3037] CogVM source as per VMMaker.oscog-eem.810

commits at squeakvm.org commits at squeakvm.org
Wed Jul 9 01:16:19 UTC 2014


Revision: 3037
Author:   eliot
Date:     2014-07-08 18:16:16 -0700 (Tue, 08 Jul 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.810

Spur: Fix bug in nilUnmarkedWeaklingSlotsIn: which was not guarding the
isForwarded: check with an isFreeObject: not check.  Premature optimizations...

Modified Paths:
--------------
    branches/Cog/nsspursrc/vm/cogit.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cogmethod.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/interp.h
    branches/Cog/nsspursrc/vm/vmCallback.h
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/interp.h
    branches/Cog/nsspurstacksrc/vm/vmCallback.h
    branches/Cog/spursistasrc/vm/cogit.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogmethod.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/interp.h
    branches/Cog/spursistasrc/vm/vmCallback.h
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogmethod.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/interp.h
    branches/Cog/spursrc/vm/vmCallback.h
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/spurstacksrc/vm/interp.h
    branches/Cog/spurstacksrc/vm/vmCallback.h

Property Changed:
----------------
    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h

Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c	2014-07-08 22:56:23 UTC (rev 3036)
+++ branches/Cog/nsspursrc/vm/cogit.c	2014-07-09 01:16:16 UTC (rev 3037)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	CCodeGenerator VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	StackToRegisterMappingCogit VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -10141,7 +10141,8 @@
 	machinery can distinguish normal and super sends (super sends bind to the
 	noCheckEntry). In Newspeak we also need to distinguish dynSuperSends from
 	normal and super
-	and so bind a the preceeding nop (on x86 there happens to be one anyway). */
+	and so on Nespeak, bind the dynSuperEntry to the preceeding nop (on x86
+	there happens to be one anyway). */
 
 static void
 compileEntry(void)
@@ -11343,10 +11344,12 @@
 static void
 generateNewspeakRuntime(void)
 {
+    sqInt destReg;
     AbstractInstruction *jumpItsTheReceiverStupid;
     AbstractInstruction *jumpMiss;
     sqInt offset;
     sqInt offset1;
+    sqInt retpcReg;
 
 
 	/* Generate the non-send runtime support for Newspeak, explicit outer and implicit receiver.
@@ -11371,17 +11374,21 @@
 	genoperandoperandoperand(MoveMwrR, FoxMFReceiver, FPReg, ReceiverResultReg);
 	genGetInlineCacheClassTagFromintoforEntry(ReceiverResultReg, ClassReg, 0);
 	/* begin MoveMw:r:R: */
-	genoperandoperandoperand(MoveMwrR, 0, SPReg, TempReg);
+	destReg = (retpcReg = TempReg);
+	genoperandoperandoperand(MoveMwrR, 0, SPReg, destReg);
+
 	/* begin MoveMw:r:R: */
+	genoperandoperandoperand(MoveMwrR, 0, SPReg, retpcReg);
+	/* begin MoveMw:r:R: */
 	offset = jumpShortByteSize(backEnd);
-	genoperandoperandoperand(MoveMwrR, offset, TempReg, Arg1Reg);
+	genoperandoperandoperand(MoveMwrR, offset, retpcReg, Arg1Reg);
 	/* begin CmpR:R: */
 	genoperandoperand(CmpRR, ClassReg, Arg1Reg);
 	/* begin JumpNonZero: */
 	jumpMiss = genoperand(JumpNonZero, ((sqInt)0));
 	/* begin MoveMw:r:R: */
 	offset1 = (jumpShortByteSize(backEnd)) + BytesPerOop;
-	genoperandoperandoperand(MoveMwrR, offset1, TempReg, ClassReg);
+	genoperandoperandoperand(MoveMwrR, offset1, retpcReg, ClassReg);
 	/* begin CmpCq:R: */
 	genoperandoperand(CmpCqR, 0, ClassReg);
 	/* begin JumpZero: */

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2014-07-08 22:56:23 UTC (rev 3036)
+++ branches/Cog/nsspursrc/vm/cogit.h	2014-07-09 01:16:16 UTC (rev 3037)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	CCodeGenerator VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogmethod.h	2014-07-08 22:56:23 UTC (rev 3036)
+++ branches/Cog/nsspursrc/vm/cogmethod.h	2014-07-09 01:16:16 UTC (rev 3037)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	CCodeGenerator VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
  */
 
 typedef struct {

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-07-08 22:56:23 UTC (rev 3036)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-07-09 01:16:16 UTC (rev 3037)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
    from
-	CoInterpreter VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636
+	CoInterpreter VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.808 uuid: 84bdf081-a2e8-4c84-b249-b140228e6636 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.810 uuid: a10a6172-0f6e-47a1-be39-cffd498c9661 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1010,6 +1010,7 @@
 sqInt isOopMutable(sqInt oop);
 sqInt isPinned(sqInt objOop);
 sqInt isPointers(sqInt oop);
+sqInt isReallyForwarded(sqInt objOop);
 sqInt isReallyYoung(sqInt oop);
 static sqInt isRemembered(sqInt objOop) NoDbgRegParms;
 static sqInt isSegmentBridge(sqInt objOop) NoDbgRegParms;
@@ -2284,7 +2285,7 @@
 /*540*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.808";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.810";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -3520,7 +3521,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 4 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3559,7 +3560,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 8 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3598,7 +3599,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 12 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3637,7 +3638,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 16 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3676,7 +3677,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 20 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3715,7 +3716,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 24 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3754,7 +3755,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 28 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3793,7 +3794,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 32 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3832,7 +3833,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 36 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3871,7 +3872,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 40 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3910,7 +3911,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 44 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3949,7 +3950,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 48 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -3988,7 +3989,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 52 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4027,7 +4028,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 56 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4066,7 +4067,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 60 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4105,7 +4106,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 64 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4143,7 +4144,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 68 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4181,7 +4182,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 72 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4219,7 +4220,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 76 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4257,7 +4258,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 80 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4295,7 +4296,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 84 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4333,7 +4334,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 88 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4371,7 +4372,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 92 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4409,7 +4410,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 96 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4447,7 +4448,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 100 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4485,7 +4486,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 104 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4523,7 +4524,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 108 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4561,7 +4562,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 112 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4599,7 +4600,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 116 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4637,7 +4638,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 120 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4675,7 +4676,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 0x7C /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -4713,7 +4714,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + 128 /* ((currentBytecode bitAnd: 31) + LiteralStart) << 2 */);
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -5577,7 +5578,6 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
-							null;
 							goto l292;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5595,7 +5595,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					null;
+					/* return self */
 				l292:	/* end baseFrameReturn */;
 					goto l289;
 				}
@@ -5757,7 +5757,7 @@
 					litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((variableIndex + LiteralStart) << 2));
 					if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(litVar));
+						assert(isReallyForwarded(litVar));
 						referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 						while (((referent & 3) == 0)
 						 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -5830,7 +5830,7 @@
 					litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((variableIndex + LiteralStart) << 2));
 					if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(litVar));
+						assert(isReallyForwarded(litVar));
 						referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 						while (((referent & 3) == 0)
 						 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -5921,7 +5921,7 @@
 					litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((variableIndex + LiteralStart) << 2));
 					if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(litVar));
+						assert(isReallyForwarded(litVar));
 						referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 						while (((referent & 3) == 0)
 						 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -6676,7 +6676,7 @@
 					litVar1 = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					if (((longAt(litVar1)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(litVar1));
+						assert(isReallyForwarded(litVar1));
 						referent1 = longAt((litVar1 + (BaseHeaderSize)) + (0 << 2));
 						while (((referent1 & 3) == 0)
 						 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -6698,7 +6698,7 @@
 					litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(litVar));
+						assert(isReallyForwarded(litVar));
 						referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 						while (((referent & 3) == 0)
 						 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -13983,7 +13983,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((index + LiteralStart) << 2));
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -14296,7 +14296,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((variableIndex + LiteralStart) << 2));
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -14518,7 +14518,7 @@
 				litVar = longAt((GIV(method) + (BaseHeaderSize)) + ((variableIndex + LiteralStart) << 2));
 				if (((longAt(litVar)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(litVar));
+					assert(isReallyForwarded(litVar));
 					referent = longAt((litVar + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -18663,7 +18663,7 @@
 		if (((longAt(GIV(method))) & (0x3FFFFF - 8)) == 0) {
 			theIPPtr = GIV(instructionPointer) - GIV(method);
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(method)));
+			assert(isReallyForwarded(GIV(method)));
 			referent = longAt((GIV(method) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent & 3) == 0)
 			 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -18674,7 +18674,7 @@
 		}
 		if (((longAt(GIV(newMethod))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(newMethod)));
+			assert(isReallyForwarded(GIV(newMethod)));
 			referent1 = longAt((GIV(newMethod) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent1 & 3) == 0)
 			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -18738,7 +18738,7 @@
 					oop = longAt(theFP + FoxMethod);
 					if (((longAt(oop)) & (0x3FFFFF - 8)) == 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(oop));
+						assert(isReallyForwarded(oop));
 						referent2 = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 						while (((referent2 & 3) == 0)
 						 && (((longAt(referent2)) & 0x3FFFFF) == 8)) {
@@ -18997,7 +18997,7 @@
 	rcvrStackIndex = GIV(argumentCount) + stackDelta;
 	assert((stackValue(rcvrStackIndex)) == forwardedReceiver);
 	/* begin followForwarded: */
-	assert(isForwarded(forwardedReceiver));
+	assert(isReallyForwarded(forwardedReceiver));
 	referent = longAt((forwardedReceiver + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -20167,7 +20167,7 @@
 			if (((oop & 3) == 0)
 			 && (((longAt(oop)) & 0x3FFFFF) == 8)) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -20212,7 +20212,7 @@
 		if (((oop & 3) == 0)
 		 && (((longAt(oop)) & 0x3FFFFF) == 8)) {
 			/* begin followForwarded: */
-			assert(isForwarded(oop));
+			assert(isReallyForwarded(oop));
 			referent1 = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 			while (((referent1 & 3) == 0)
 			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -21632,7 +21632,7 @@
 			if (((intOrSelector & 3) == 0)
 			 && (((longAt(intOrSelector)) & 0x3FFFFF) == 8)) {
 				/* begin followForwarded: */
-				assert(isForwarded(intOrSelector));
+				assert(isReallyForwarded(intOrSelector));
 				referent = longAt((intOrSelector + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -24751,7 +24751,7 @@
 	}
 	if (((longAt(myList)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(myList));
+		assert(isReallyForwarded(myList));
 		referent = longAt((myList + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -31992,7 +31992,7 @@
 	 && (((longAt(otherObject)) & 0x3FFFFF) == 8)) {
 		assert(GIV(argumentCount) > 1);
 		/* begin followForwarded: */
-		assert(isForwarded(thisObject));
+		assert(isReallyForwarded(thisObject));
 		referent = longAt((thisObject + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -32004,7 +32004,7 @@
 	if (((thisObject & 3) == 0)
 	 && (((longAt(thisObject)) & 0x3FFFFF) == 8)) {
 		/* begin followForwarded: */
-		assert(isForwarded(thisObject));
+		assert(isReallyForwarded(thisObject));
 		referent1 = longAt((thisObject + (BaseHeaderSize)) + (0 << 2));
 		while (((referent1 & 3) == 0)
 		 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -34236,7 +34236,7 @@
 	 && (((longAt(otherObject)) & 0x3FFFFF) == 8)) {
 		assert(GIV(argumentCount) > 1);
 		/* begin followForwarded: */
-		assert(isForwarded(thisObject));
+		assert(isReallyForwarded(thisObject));
 		referent = longAt((thisObject + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -34247,7 +34247,7 @@
 	if (((thisObject & 3) == 0)
 	 && (((longAt(thisObject)) & 0x3FFFFF) == 8)) {
 		/* begin followForwarded: */
-		assert(isForwarded(thisObject));
+		assert(isReallyForwarded(thisObject));
 		referent1 = longAt((thisObject + (BaseHeaderSize)) + (0 << 2));
 		while (((referent1 & 3) == 0)
 		 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -34770,7 +34770,7 @@
 				if (((oop & 3) == 0)
 				 && (((longAt(oop)) & (0x3FFFFF - 8)) == 0)) {
 					/* begin followForwarded: */
-					assert(isForwarded(oop));
+					assert(isReallyForwarded(oop));
 					referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -38759,7 +38759,7 @@
     sqInt targetB;
 
 	/* begin followForwarded: */
-	assert(isForwarded(obj1));
+	assert(isReallyForwarded(obj1));
 	referent = longAt((obj1 + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -38767,7 +38767,7 @@
 	}
 	targetA = referent;
 	/* begin followForwarded: */
-	assert(isForwarded(obj2));
+	assert(isReallyForwarded(obj2));
 	referent1 = longAt((obj2 + (BaseHeaderSize)) + (0 << 2));
 	while (((referent1 & 3) == 0)
 	 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -38790,7 +38790,7 @@
     sqInt targetB;
 
 	/* begin followForwarded: */
-	assert(isForwarded(obj1));
+	assert(isReallyForwarded(obj1));
 	referent = longAt((obj1 + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -38798,7 +38798,7 @@
 	}
 	targetA = referent;
 	/* begin followForwarded: */
-	assert(isForwarded(obj2));
+	assert(isReallyForwarded(obj2));
 	referent1 = longAt((obj2 + (BaseHeaderSize)) + (0 << 2));
 	while (((referent1 & 3) == 0)
 	 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -39971,7 +39971,7 @@
 	}
 	if (((longAt(oop)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(oop));
+		assert(isReallyForwarded(oop));
 		referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -40155,7 +40155,7 @@
 		while (ephemeronCorpse != null) {
 			assert(isForwarded(ephemeronCorpse));
 			/* begin followForwarded: */
-			assert(isForwarded(ephemeronCorpse));
+			assert(isReallyForwarded(ephemeronCorpse));
 			referent = longAt((ephemeronCorpse + (BaseHeaderSize)) + (0 << 2));
 			while (((referent & 3) == 0)
 			 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -40225,7 +40225,7 @@
 		while (weakCorpse != null) {
 			assert(isForwarded(weakCorpse));
 			/* begin followForwarded: */
-			assert(isForwarded(weakCorpse));
+			assert(isReallyForwarded(weakCorpse));
 			referent = longAt((weakCorpse + (BaseHeaderSize)) + (0 << 2));
 			while (((referent & 3) == 0)
 			 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -40267,7 +40267,7 @@
 		if (((referent & 3) == 0)
 		 && (((longAt(referent)) & (0x3FFFFF - 8)) == 0)) {
 			/* begin followForwarded: */
-			assert(isForwarded(referent));
+			assert(isReallyForwarded(referent));
 			referent1 = longAt((referent + (BaseHeaderSize)) + (0 << 2));
 			while (((referent1 & 3) == 0)
 			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -40608,7 +40608,7 @@
 
 			if (((longAt(referent)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(referent));
+				assert(isReallyForwarded(referent));
 				referent1 = longAt((referent + (BaseHeaderSize)) + (0 << 2));
 				while (((referent1 & 3) == 0)
 				 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -40729,7 +40729,7 @@
 		ephemeronCorpse = ((corpseOffset - 1) << 3) + GIV(newSpaceStart);
 		assert(isForwarded(ephemeronCorpse));
 		/* begin followForwarded: */
-		assert(isForwarded(ephemeronCorpse));
+		assert(isReallyForwarded(ephemeronCorpse));
 		referent = longAt((ephemeronCorpse + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -42097,7 +42097,7 @@
 			}
 			if (((longAt(oop)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent12 = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent12 & 3) == 0)
 				 && (((longAt(referent12)) & 0x3FFFFF) == 8)) {
@@ -42118,7 +42118,7 @@
 			}
 			if (((longAt(oop)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent11 = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent11 & 3) == 0)
 				 && (((longAt(referent11)) & 0x3FFFFF) == 8)) {
@@ -42193,7 +42193,7 @@
 			}
 			if (((longAt(oop1)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop1));
+				assert(isReallyForwarded(oop1));
 				referent13 = longAt((oop1 + (BaseHeaderSize)) + (0 << 2));
 				while (((referent13 & 3) == 0)
 				 && (((longAt(referent13)) & 0x3FFFFF) == 8)) {
@@ -42467,7 +42467,7 @@
 						/* o2 wasn't in the table; put it there */
 
 						/* begin followForwarded: */
-						assert(isForwarded(obj1));
+						assert(isReallyForwarded(obj1));
 						referent15 = longAt((obj1 + (BaseHeaderSize)) + (0 << 2));
 						while (((referent15 & 3) == 0)
 						 && (((longAt(referent15)) & 0x3FFFFF) == 8)) {
@@ -42485,7 +42485,7 @@
 				else {
 					if (o2ClassIndex != 0) {
 						/* begin followForwarded: */
-						assert(isForwarded(obj2));
+						assert(isReallyForwarded(obj2));
 						referent14 = longAt((obj2 + (BaseHeaderSize)) + (0 << 2));
 						while (((referent14 & 3) == 0)
 						 && (((longAt(referent14)) & 0x3FFFFF) == 8)) {
@@ -42608,7 +42608,7 @@
 	/* begin followSpecialObjectsOop */
 	if (((longAt(GIV(specialObjectsOop))) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(GIV(specialObjectsOop)));
+		assert(isReallyForwarded(GIV(specialObjectsOop)));
 		referent5 = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (0 << 2));
 		while (((referent5 & 3) == 0)
 		 && (((longAt(referent5)) & 0x3FFFFF) == 8)) {
@@ -42632,7 +42632,7 @@
 				 && (((m & 3) == 0)
 				 && (((longAt(m)) & 0x3FFFFF) == 8))))) {
 					/* begin followForwarded: */
-					assert(isForwarded(m));
+					assert(isReallyForwarded(m));
 					referent = longAt((m + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -42703,7 +42703,7 @@
 		obj3 = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (TheLowSpaceSemaphore << 2));
 		if (((longAt(obj3)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(obj3));
+			assert(isReallyForwarded(obj3));
 			referent7 = longAt((obj3 + (BaseHeaderSize)) + (0 << 2));
 			while (((referent7 & 3) == 0)
 			 && (((longAt(referent7)) & 0x3FFFFF) == 8)) {
@@ -42733,7 +42733,7 @@
 		obj4 = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (TheInterruptSemaphore << 2));
 		if (((longAt(obj4)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(obj4));
+			assert(isReallyForwarded(obj4));
 			referent8 = longAt((obj4 + (BaseHeaderSize)) + (0 << 2));
 			while (((referent8 & 3) == 0)
 			 && (((longAt(referent8)) & 0x3FFFFF) == 8)) {
@@ -42763,7 +42763,7 @@
 		obj5 = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (TheTimerSemaphore << 2));
 		if (((longAt(obj5)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(obj5));
+			assert(isReallyForwarded(obj5));
 			referent9 = longAt((obj5 + (BaseHeaderSize)) + (0 << 2));
 			while (((referent9 & 3) == 0)
 			 && (((longAt(referent9)) & 0x3FFFFF) == 8)) {
@@ -42793,7 +42793,7 @@
 		obj6 = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (TheFinalizationSemaphore << 2));
 		if (((longAt(obj6)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(obj6));
+			assert(isReallyForwarded(obj6));
 			referent10 = longAt((obj6 + (BaseHeaderSize)) + (0 << 2));
 			while (((referent10 & 3) == 0)
 			 && (((longAt(referent10)) & 0x3FFFFF) == 8)) {
@@ -42822,7 +42822,7 @@
 		xArray = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ExternalObjectsArray << 2));
 		if (((longAt(xArray)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(xArray));
+			assert(isReallyForwarded(xArray));
 			referent4 = longAt((xArray + (BaseHeaderSize)) + (0 << 2));
 			while (((referent4 & 3) == 0)
 			 && (((longAt(referent4)) & 0x3FFFFF) == 8)) {
@@ -42854,7 +42854,7 @@
 			obj = longAt((xArray + (BaseHeaderSize)) + (i3 << 2));
 			if (((longAt(obj)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(obj));
+				assert(isReallyForwarded(obj));
 				referent6 = longAt((obj + (BaseHeaderSize)) + (0 << 2));
 				while (((referent6 & 3) == 0)
 				 && (((longAt(referent6)) & 0x3FFFFF) == 8)) {
@@ -42884,7 +42884,7 @@
 		/* begin followForwardingPointersInProfileState */
 		if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(profileProcess)));
+			assert(isReallyForwarded(GIV(profileProcess)));
 			referent1 = longAt((GIV(profileProcess) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent1 & 3) == 0)
 			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -42894,7 +42894,7 @@
 		}
 		if (((longAt(GIV(profileMethod))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(profileMethod)));
+			assert(isReallyForwarded(GIV(profileMethod)));
 			referent2 = longAt((GIV(profileMethod) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent2 & 3) == 0)
 			 && (((longAt(referent2)) & 0x3FFFFF) == 8)) {
@@ -42904,7 +42904,7 @@
 		}
 		if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(profileSemaphore)));
+			assert(isReallyForwarded(GIV(profileSemaphore)));
 			referent3 = longAt((GIV(profileSemaphore) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent3 & 3) == 0)
 			 && (((longAt(referent3)) & 0x3FFFFF) == 8)) {
@@ -44114,7 +44114,7 @@
 			if (((oop & 3) == 0)
 			 && (((longAt(oop)) & (0x3FFFFF - 8)) == 0)) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -44636,7 +44636,7 @@
 	/* begin followSpecialObjectsOop */
 	if (((longAt(GIV(specialObjectsOop))) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(GIV(specialObjectsOop)));
+		assert(isReallyForwarded(GIV(specialObjectsOop)));
 		referent = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -44667,7 +44667,7 @@
 				flag("endianness");
 				longAtput(obj, (longAt(obj)) & (~(1 << 29)));
 				/* begin followForwarded: */
-				assert(isForwarded(obj));
+				assert(isReallyForwarded(obj));
 				referent1 = longAt((obj + (BaseHeaderSize)) + (0 << 2));
 				while (((referent1 & 3) == 0)
 				 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -44723,7 +44723,7 @@
 				if (((f & 3) == 0)
 				 && (((longAt(f)) & 0x3FFFFF) == 8)) {
 					/* begin followForwarded: */
-					assert(isForwarded(f));
+					assert(isReallyForwarded(f));
 					referent2 = longAt((f + (BaseHeaderSize)) + (0 << 2));
 					while (((referent2 & 3) == 0)
 					 && (((longAt(referent2)) & 0x3FFFFF) == 8)) {
@@ -44766,7 +44766,7 @@
 					if (((f & 3) == 0)
 					 && (((longAt(f)) & 0x3FFFFF) == 8)) {
 						/* begin followForwarded: */
-						assert(isForwarded(f));
+						assert(isReallyForwarded(f));
 						referent11 = longAt((f + (BaseHeaderSize)) + (0 << 2));
 						while (((referent11 & 3) == 0)
 						 && (((longAt(referent11)) & 0x3FFFFF) == 8)) {
@@ -45946,7 +45946,7 @@
 
 	assert(isOopForwarded(initialValue));
 	/* begin followForwarded: */
-	assert(isForwarded(initialValue));
+	assert(isReallyForwarded(initialValue));
 	referent = longAt((initialValue + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -46012,7 +46012,7 @@
 	stackOrNil = objStack;
 	if (((longAt(stackOrNil)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(stackOrNil));
+		assert(isReallyForwarded(stackOrNil));
 		referent = longAt((stackOrNil + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -46068,7 +46068,7 @@
 			 && (((field & 3) == 0)
 			 && (((longAt(field)) & (0x3FFFFF - 8)) == 0))) {
 				/* begin followForwarded: */
-				assert(isForwarded(field));
+				assert(isReallyForwarded(field));
 				referent1 = longAt((field + (BaseHeaderSize)) + (0 << 2));
 				while (((referent1 & 3) == 0)
 				 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -46088,7 +46088,7 @@
 		if (!(stackOrNil != 0)) break;
 		if (((longAt(stackOrNil)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(stackOrNil));
+			assert(isReallyForwarded(stackOrNil));
 			referent2 = longAt((stackOrNil + (BaseHeaderSize)) + (0 << 2));
 			while (((referent2 & 3) == 0)
 			 && (((longAt(referent2)) & 0x3FFFFF) == 8)) {
@@ -46128,7 +46128,7 @@
 			if (((longAt(oop)) & (0x3FFFFF - 8)) == 0) {
 				found = 1;
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -46188,7 +46188,7 @@
 {
     sqInt referent;
 
-	assert(isForwarded(objOop));
+	assert(isReallyForwarded(objOop));
 	referent = longAt((objOop + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -47537,6 +47537,17 @@
 }
 
 
+/*	This version is for asserts. It does not take advantage of the
+	power-of0two optimization
+	in isForwarded:. */
+
+sqInt
+isReallyForwarded(sqInt objOop)
+{
+	return ((longAt(objOop)) & 0x3FFFFF) == 8;
+}
+
+
 /*	Answer if oop is young. */
 
 sqInt
@@ -48529,7 +48540,7 @@
 				if (((field & 3) == 0)
 				 && (((longAt(field)) & 0x3FFFFF) == 8)) {
 					/* begin followForwarded: */
-					assert(isForwarded(field));
+					assert(isReallyForwarded(field));
 					referent = longAt((field + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -48588,7 +48599,7 @@
 				if (((field & 3) == 0)
 				 && (((longAt(field)) & 0x3FFFFF) == 8)) {
 					/* begin followForwarded: */
-					assert(isForwarded(field));
+					assert(isReallyForwarded(field));
 					referent1 = longAt((field + (BaseHeaderSize)) + (0 << 2));
 					while (((referent1 & 3) == 0)
 					 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -48875,7 +48886,7 @@
 	/* begin followForwardingPointersInProfileState */
 	if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(GIV(profileProcess)));
+		assert(isReallyForwarded(GIV(profileProcess)));
 		referent = longAt((GIV(profileProcess) + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -48885,7 +48896,7 @@
 	}
 	if (((longAt(GIV(profileMethod))) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(GIV(profileMethod)));
+		assert(isReallyForwarded(GIV(profileMethod)));
 		referent1 = longAt((GIV(profileMethod) + (BaseHeaderSize)) + (0 << 2));
 		while (((referent1 & 3) == 0)
 		 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -48895,7 +48906,7 @@
 	}
 	if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(GIV(profileSemaphore)));
+		assert(isReallyForwarded(GIV(profileSemaphore)));
 		referent2 = longAt((GIV(profileSemaphore) + (BaseHeaderSize)) + (0 << 2));
 		while (((referent2 & 3) == 0)
 		 && (((longAt(referent2)) & 0x3FFFFF) == 8)) {
@@ -48912,7 +48923,7 @@
 	 && (GIV(longRunningPrimitiveCheckSequenceNumber) != GIV(statCheckForEvents))) {
 		if (((longAt(GIV(longRunningPrimitiveCheckMethod))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(longRunningPrimitiveCheckMethod)));
+			assert(isReallyForwarded(GIV(longRunningPrimitiveCheckMethod)));
 			referent3 = longAt((GIV(longRunningPrimitiveCheckMethod) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent3 & 3) == 0)
 			 && (((longAt(referent3)) & 0x3FFFFF) == 8)) {
@@ -48925,7 +48936,7 @@
 	if (GIV(longRunningPrimitiveCheckSemaphore) != null) {
 		if (((longAt(GIV(longRunningPrimitiveCheckSemaphore))) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(GIV(longRunningPrimitiveCheckSemaphore)));
+			assert(isReallyForwarded(GIV(longRunningPrimitiveCheckSemaphore)));
 			referent4 = longAt((GIV(longRunningPrimitiveCheckSemaphore) + (BaseHeaderSize)) + (0 << 2));
 			while (((referent4 & 3) == 0)
 			 && (((longAt(referent4)) & 0x3FFFFF) == 8)) {
@@ -49558,7 +49569,8 @@
 	for (i = (numStrongSlotsOfWeakling(aWeakling)), iLimiT = ((numSlotsOf(aWeakling)) - 1); i <= iLimiT; i += 1) {
 		referent = longAt((aWeakling + (BaseHeaderSize)) + (i << 2));
 		if (((referent & 3) == 0)
-		 && (((longAt(referent)) & (0x3FFFFF - 8)) == 0)) {
+		 && ((!(((longAt(referent)) & 0x3FFFFF) == 0))
+		 && (((longAt(referent)) & (0x3FFFFF - 8)) == 0))) {
 			referent = fixFollowedFieldofObjectwithInitialValue(i, aWeakling, referent);
 		}
 		if (!(((referent & 3) != 0)
@@ -50198,7 +50210,7 @@
 			if (((oop & 3) == 0)
 			 && (((longAt(oop)) & (0x3FFFFF - 8)) == 0)) {
 				/* begin followForwarded: */
-				assert(isForwarded(oop));
+				assert(isReallyForwarded(oop));
 				referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -50412,7 +50424,7 @@
 			if (classOrNil != GIV(nilObj)) {
 				if (((longAt(classOrNil)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(classOrNil));
+					assert(isReallyForwarded(classOrNil));
 					referent = longAt((classOrNil + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -51514,7 +51526,7 @@
 	assert(shouldRemapOop(objOop));
 	if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(objOop));
+		assert(isReallyForwarded(objOop));
 		referent = longAt((objOop + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -53504,7 +53516,7 @@
 					assert(index < GIV(argumentCount));
 					found = 1;
 					/* begin followForwarded: */
-					assert(isForwarded(oop));
+					assert(isReallyForwarded(oop));
 					referent = longAt((oop + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -53813,7 +53825,7 @@
 	frameCtxt = longAt(theFP + FoxThisContext);
 	if (((longAt(frameCtxt)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(frameCtxt));
+		assert(isReallyForwarded(frameCtxt));
 		referent = longAt((frameCtxt + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -55924,7 +55936,7 @@
 	}
 	if (((longAt(methArg)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(methArg));
+		assert(isReallyForwarded(methArg));
 		referent = longAt((methArg + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -56208,7 +56220,7 @@
 	assoc = longAt((methodObj + (BaseHeaderSize)) + (((litCount - 1) + LiteralStart) << 2));
 	if (((longAt(assoc)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(assoc));
+		assert(isReallyForwarded(assoc));
 		referent = longAt((assoc + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -56238,7 +56250,7 @@
 		classObj = longAt((assoc + (BaseHeaderSize)) + (ValueIndex << 2));
 		if (((longAt(classObj)) & (0x3FFFFF - 8)) == 0) {
 			/* begin followForwarded: */
-			assert(isForwarded(classObj));
+			assert(isReallyForwarded(classObj));
 			referent1 = longAt((classObj + (BaseHeaderSize)) + (0 << 2));
 			while (((referent1 & 3) == 0)
 			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
@@ -56533,7 +56545,7 @@
 	followForwardedFieldsInCurrentMethod();
 	followForwardedObjectFieldstoDepth(longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SpecialSelectors << 2)), 0);
 	/* begin followForwarded: */
-	assert(isForwarded(selectorOop));
+	assert(isReallyForwarded(selectorOop));
 	referent = longAt((selectorOop + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -56560,7 +56572,7 @@
 	rcvr = longAt(GIV(stackPointer) + (GIV(argumentCount) * BytesPerWord));
 	assert(isOopForwarded(rcvr));
 	/* begin followForwarded: */
-	assert(isForwarded(rcvr));
+	assert(isReallyForwarded(rcvr));
 	referent = longAt((rcvr + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -56605,7 +56617,7 @@
 			: longAt(theFP + FoxIFReceiver)), 0);
 	}
 	/* begin followForwarded: */
-	assert(isForwarded(obj));
+	assert(isReallyForwarded(obj));
 	referent = longAt((obj + (BaseHeaderSize)) + (0 << 2));
 	while (((referent & 3) == 0)
 	 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -57073,7 +57085,7 @@
 			frameCtxt = longAt(theFrame + FoxThisContext);
 			if (((longAt(frameCtxt)) & (0x3FFFFF - 8)) == 0) {
 				/* begin followForwarded: */
-				assert(isForwarded(frameCtxt));
+				assert(isReallyForwarded(frameCtxt));
 				referent = longAt((frameCtxt + (BaseHeaderSize)) + (0 << 2));
 				while (((referent & 3) == 0)
 				 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -59620,7 +59632,7 @@
 				ctxt = callerContextOrNil;
 				if (((longAt(ctxt)) & (0x3FFFFF - 8)) == 0) {
 					/* begin followForwarded: */
-					assert(isForwarded(ctxt));
+					assert(isReallyForwarded(ctxt));
 					referent = longAt((ctxt + (BaseHeaderSize)) + (0 << 2));
 					while (((referent & 3) == 0)
 					 && (((longAt(referent)) & 0x3FFFFF) == 8)) {
@@ -62303,7 +62315,7 @@
 	caller = callerContextOrNil;
 	if (((longAt(caller)) & (0x3FFFFF - 8)) == 0) {
 		/* begin followForwarded: */
-		assert(isForwarded(caller));
+		assert(isReallyForwarded(caller));
 		referent = longAt((caller + (BaseHeaderSize)) + (0 << 2));
 		while (((referent & 3) == 0)
 		 && (((longAt(referent)) & 0x3FFFFF) == 8)) {

Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list