[Vm-dev] [commit][3533] CogVM source as per VMMaker.oscog-eem.1597

commits at squeakvm.org commits at squeakvm.org
Tue Dec 15 19:48:53 UTC 2015


Revision: 3533
Author:   eliot
Date:     2015-12-15 11:48:51 -0800 (Tue, 15 Dec 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1597

Cogit:
Fix regression in x86's register save/restore.

Eliminate some warnings in cogitX64.c.  Use the right conversions for
computing 32-bit offsets in jumps and calls.

Nuke genJump[Not]SmallInteger:scratch: in favour of
genJump[Not]SmallInteger:scratchReg:

Plugins:
Fix the Alien plugins for 64-bits in the simulator which alas changes the
C code to no effect.  

Modified Paths:
--------------
    branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cogitIA32.c
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstack64src/vm/gcc3x-interp.c
    branches/Cog/nsspurstack64src/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/scripts/lastCheckin
    branches/Cog/spur64src/vm/cogit.h
    branches/Cog/spur64src/vm/cogitX64.c
    branches/Cog/spur64src/vm/cointerp.c
    branches/Cog/spur64src/vm/cointerp.h
    branches/Cog/spur64src/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogitIA32.c
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogitIA32.c
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstack64src/vm/gcc3x-interp.c
    branches/Cog/spurstack64src/vm/interp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/plugins/IA32ABI/IA32ABI.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogitIA32.c
    branches/Cog/src/vm/cointerp.c
    branches/Cog/src/vm/cointerp.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerp.c
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

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

Modified: branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c
===================================================================
--- branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c	2015-12-14 19:30:06 UTC (rev 3532)
+++ branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c	2015-12-15 19:48:51 UTC (rev 3533)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
+	VMPluginCodeGenerator * VMMaker.oscog-eem.1596 uuid: b5172901-ebc3-4132-b421-446d4a1d080f
    from
-	NewsqueakIA32ABIPlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
+	NewsqueakIA32ABIPlugin * VMMaker.oscog-eem.1596 uuid: b5172901-ebc3-4132-b421-446d4a1d080f
  */
-static char __buildInfo[] = "NewsqueakIA32ABIPlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262 " __DATE__ ;
+static char __buildInfo[] = "NewsqueakIA32ABIPlugin * VMMaker.oscog-eem.1596 uuid: b5172901-ebc3-4132-b421-446d4a1d080f " __DATE__ ;
 
 
 
@@ -227,9 +227,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"IA32ABI VMMaker.oscog-rmacnak.1532 (i)"
+	"IA32ABI VMMaker.oscog-eem.1596 (i)"
 #else
-	"IA32ABI VMMaker.oscog-rmacnak.1532 (e)"
+	"IA32ABI VMMaker.oscog-eem.1596 (e)"
 #endif
 ;
 
@@ -1507,7 +1507,13 @@
     sqInt valueOop;
 
 	rcvr = stackValue(0);
-	value = ((sqInt) (longAt(rcvr + BaseHeaderSize)));
+	value = 
+#  if BytesPerOop == 8
+		((sqLong) (longAt(rcvr + BaseHeaderSize)))
+#  else /* BytesPerOop == 8 */
+		((int) (longAt(rcvr + BaseHeaderSize)))
+#  endif /* BytesPerOop == 8 */
+		;
 	valueOop = (BytesPerWord == 8
 		? signed64BitIntegerFor(value)
 		: signed32BitIntegerFor(value));
@@ -1535,10 +1541,15 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (isOopImmutable(rcvr)) {
-		return primitiveFailFor(PrimErrNoModification);
-	}
+	
+#  if BytesPerOop == 8
 	longAtput(rcvr + BaseHeaderSize, ((usqInt) value));
+
+#  else /* BytesPerOop == 8 */
+	longAtput(rcvr + BaseHeaderSize, ((usqInt) value));
+
+#  endif /* BytesPerOop == 8 */
+
 	return methodReturnValue(valueOop);
 }
 

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2015-12-14 19:30:06 UTC (rev 3532)
+++ branches/Cog/nsspursrc/vm/cogit.h	2015-12-15 19:48:51 UTC (rev 3533)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a
+	CCodeGenerator VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitIA32.c	2015-12-14 19:30:06 UTC (rev 3532)
+++ branches/Cog/nsspursrc/vm/cogitIA32.c	2015-12-15 19:48:51 UTC (rev 3533)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a
+	CCodeGenerator VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -929,7 +929,7 @@
 static sqInt genLongUnconditionalForwardJump(void);
 static sqInt NoDbgRegParms genLookupForPerformNumArgs(sqInt numArgs);
 static AbstractInstruction * NoDbgRegParms genMoveConstantR(sqInt constant, sqInt reg);
-static AbstractInstruction * NoDbgRegParms genMoveTrueR(sqInt reg);
+static sqInt NoDbgRegParms genMoveTrueR(sqInt reg);
 static sqInt NoDbgRegParms genMustBeBooleanTrampolineForcalled(sqInt boolean, char *trampolineName);
 static sqInt genPrimitiveEqual(void);
 static sqInt genPrimitiveFloatAdd(void);
@@ -2372,7 +2372,7 @@
     sqInt callDistance;
 
 	callDistance = literalBeforeFollowingAddress(self_in_callTargetFromReturnAddress, callSiteReturnAddress);
-	return callSiteReturnAddress + (((sqInt) callDistance));
+	return callSiteReturnAddress + (((int) callDistance));
 }
 
 	/* CogIA32Compiler>>#cmpC32RTempByteSize */
@@ -3296,7 +3296,7 @@
 	case CallFull:
 		/* begin concretizeCall */
 		assert((((self_in_dispatchConcretize->operands))[0]) != 0);
-		offset2 = (((sqInt) (((self_in_dispatchConcretize->operands))[0]))) - (((sqInt) (((self_in_dispatchConcretize->address)) + 5)));
+		offset2 = (((int) (((self_in_dispatchConcretize->operands))[0]))) - (((int) (((self_in_dispatchConcretize->address)) + 5)));
 		((self_in_dispatchConcretize->machineCode))[0] = 232;
 		((self_in_dispatchConcretize->machineCode))[1] = (offset2 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[2] = ((((usqInt) offset2) >> 8) & 0xFF);
@@ -3322,7 +3322,7 @@
 			jumpTarget = ((AbstractInstruction *) ((jumpTarget->address)));
 		}
 		assert(jumpTarget != 0);
-		offset12 = (((sqInt) jumpTarget)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 5)));
+		offset12 = (((int) jumpTarget)) - (((int) (((self_in_dispatchConcretize->address)) + 5)));
 		((self_in_dispatchConcretize->machineCode))[0] = 233;
 		((self_in_dispatchConcretize->machineCode))[1] = (offset12 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[2] = ((((usqInt) offset12) >> 8) & 0xFF);
@@ -3345,7 +3345,7 @@
 		}
 		assert(jumpTarget12 != 0);
 		jumpTarget3 = jumpTarget12;
-		offset14 = (((sqInt) jumpTarget3)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset14 = (((int) jumpTarget3)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset14)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3365,14 +3365,14 @@
 		}
 		assert(jumpTarget11 != 0);
 		jumpTarget2 = jumpTarget11;
-		offset15 = (((sqInt) jumpTarget2)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset15 = (((int) jumpTarget2)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 4);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset15 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset15) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset15) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset15) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpLongNonZero:
@@ -3389,7 +3389,7 @@
 		}
 		assert(jumpTarget13 != 0);
 		jumpTarget4 = jumpTarget13;
-		offset16 = (((sqInt) jumpTarget4)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset16 = (((int) jumpTarget4)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset16)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3409,14 +3409,14 @@
 		}
 		assert(jumpTarget111 != 0);
 		jumpTarget21 = jumpTarget111;
-		offset17 = (((sqInt) jumpTarget21)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset17 = (((int) jumpTarget21)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 5);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset17 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset17) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset17) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset17) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case Jump:
@@ -3428,7 +3428,7 @@
 			jumpTarget1 = ((AbstractInstruction *) ((jumpTarget1->address)));
 		}
 		assert(jumpTarget1 != 0);
-		offset13 = (((sqInt) jumpTarget1)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset13 = (((int) jumpTarget1)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset13)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3437,7 +3437,7 @@
 			((self_in_dispatchConcretize->machineCodeSize) = 2);
 			return;
 		}
-		offset13 = (((sqInt) jumpTarget1)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 5)));
+		offset13 = (((int) jumpTarget1)) - (((int) (((self_in_dispatchConcretize->address)) + 5)));
 		((self_in_dispatchConcretize->machineCode))[0] = 233;
 		((self_in_dispatchConcretize->machineCode))[1] = (offset13 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[2] = ((((usqInt) offset13) >> 8) & 0xFF);
@@ -3458,7 +3458,7 @@
 		}
 		assert(jumpTarget14 != 0);
 		jumpTarget5 = jumpTarget14;
-		offset18 = (((sqInt) jumpTarget5)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset18 = (((int) jumpTarget5)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset18)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3478,14 +3478,14 @@
 		}
 		assert(jumpTarget112 != 0);
 		jumpTarget22 = jumpTarget112;
-		offset19 = (((sqInt) jumpTarget22)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset19 = (((int) jumpTarget22)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 8);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset19 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset19) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset19) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset19) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpNonNegative:
@@ -3500,7 +3500,7 @@
 		}
 		assert(jumpTarget15 != 0);
 		jumpTarget6 = jumpTarget15;
-		offset20 = (((sqInt) jumpTarget6)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset20 = (((int) jumpTarget6)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset20)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3520,14 +3520,14 @@
 		}
 		assert(jumpTarget113 != 0);
 		jumpTarget23 = jumpTarget113;
-		offset110 = (((sqInt) jumpTarget23)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset110 = (((int) jumpTarget23)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 9);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset110 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset110) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset110) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset110) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpOverflow:
@@ -3542,7 +3542,7 @@
 		}
 		assert(jumpTarget16 != 0);
 		jumpTarget7 = jumpTarget16;
-		offset21 = (((sqInt) jumpTarget7)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset21 = (((int) jumpTarget7)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset21)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3562,14 +3562,14 @@
 		}
 		assert(jumpTarget114 != 0);
 		jumpTarget24 = jumpTarget114;
-		offset111 = (((sqInt) jumpTarget24)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset111 = (((int) jumpTarget24)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset111 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset111) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset111) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset111) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpNoOverflow:
@@ -3584,7 +3584,7 @@
 		}
 		assert(jumpTarget17 != 0);
 		jumpTarget8 = jumpTarget17;
-		offset22 = (((sqInt) jumpTarget8)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset22 = (((int) jumpTarget8)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset22)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3604,14 +3604,14 @@
 		}
 		assert(jumpTarget115 != 0);
 		jumpTarget25 = jumpTarget115;
-		offset112 = (((sqInt) jumpTarget25)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset112 = (((int) jumpTarget25)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 1);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset112 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset112) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset112) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset112) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpCarry:
@@ -3628,7 +3628,7 @@
 		}
 		assert(jumpTarget18 != 0);
 		jumpTarget9 = jumpTarget18;
-		offset23 = (((sqInt) jumpTarget9)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset23 = (((int) jumpTarget9)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset23)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3648,14 +3648,14 @@
 		}
 		assert(jumpTarget116 != 0);
 		jumpTarget26 = jumpTarget116;
-		offset113 = (((sqInt) jumpTarget26)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset113 = (((int) jumpTarget26)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 2);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset113 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset113) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset113) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset113) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpNoCarry:
@@ -3672,7 +3672,7 @@
 		}
 		assert(jumpTarget19 != 0);
 		jumpTarget10 = jumpTarget19;
-		offset24 = (((sqInt) jumpTarget10)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset24 = (((int) jumpTarget10)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset24)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3692,14 +3692,14 @@
 		}
 		assert(jumpTarget117 != 0);
 		jumpTarget27 = jumpTarget117;
-		offset114 = (((sqInt) jumpTarget27)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset114 = (((int) jumpTarget27)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 3);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset114 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset114) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset114) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset114) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpLess:
@@ -3714,7 +3714,7 @@
 		}
 		assert(jumpTarget110 != 0);
 		jumpTarget20 = jumpTarget110;
-		offset25 = (((sqInt) jumpTarget20)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset25 = (((int) jumpTarget20)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset25)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3734,14 +3734,14 @@
 		}
 		assert(jumpTarget118 != 0);
 		jumpTarget28 = jumpTarget118;
-		offset115 = (((sqInt) jumpTarget28)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset115 = (((int) jumpTarget28)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 12);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset115 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset115) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset115) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset115) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpGreaterOrEqual:
@@ -3756,7 +3756,7 @@
 		}
 		assert(jumpTarget119 != 0);
 		jumpTarget29 = jumpTarget119;
-		offset26 = (((sqInt) jumpTarget29)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset26 = (((int) jumpTarget29)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset26)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3776,14 +3776,14 @@
 		}
 		assert(jumpTarget1110 != 0);
 		jumpTarget210 = jumpTarget1110;
-		offset116 = (((sqInt) jumpTarget210)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset116 = (((int) jumpTarget210)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 13);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset116 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset116) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset116) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset116) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpGreater:
@@ -3798,7 +3798,7 @@
 		}
 		assert(jumpTarget120 != 0);
 		jumpTarget30 = jumpTarget120;
-		offset27 = (((sqInt) jumpTarget30)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset27 = (((int) jumpTarget30)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset27)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3818,14 +3818,14 @@
 		}
 		assert(jumpTarget1111 != 0);
 		jumpTarget211 = jumpTarget1111;
-		offset117 = (((sqInt) jumpTarget211)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset117 = (((int) jumpTarget211)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 15);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset117 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset117) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset117) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset117) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpLessOrEqual:
@@ -3840,7 +3840,7 @@
 		}
 		assert(jumpTarget121 != 0);
 		jumpTarget31 = jumpTarget121;
-		offset28 = (((sqInt) jumpTarget31)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset28 = (((int) jumpTarget31)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset28)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3860,14 +3860,14 @@
 		}
 		assert(jumpTarget1112 != 0);
 		jumpTarget212 = jumpTarget1112;
-		offset118 = (((sqInt) jumpTarget212)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset118 = (((int) jumpTarget212)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 14);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset118 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset118) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset118) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset118) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpAbove:
@@ -3883,7 +3883,7 @@
 		}
 		assert(jumpTarget122 != 0);
 		jumpTarget32 = jumpTarget122;
-		offset29 = (((sqInt) jumpTarget32)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset29 = (((int) jumpTarget32)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset29)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3903,14 +3903,14 @@
 		}
 		assert(jumpTarget1113 != 0);
 		jumpTarget213 = jumpTarget1113;
-		offset119 = (((sqInt) jumpTarget213)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset119 = (((int) jumpTarget213)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 7);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset119 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset119) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset119) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset119) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpBelowOrEqual:
@@ -3926,7 +3926,7 @@
 		}
 		assert(jumpTarget123 != 0);
 		jumpTarget33 = jumpTarget123;
-		offset30 = (((sqInt) jumpTarget33)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset30 = (((int) jumpTarget33)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset30)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3946,14 +3946,14 @@
 		}
 		assert(jumpTarget1114 != 0);
 		jumpTarget214 = jumpTarget1114;
-		offset120 = (((sqInt) jumpTarget214)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset120 = (((int) jumpTarget214)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 6);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset120 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset120) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset120) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset120) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpFPOrdered:
@@ -3968,7 +3968,7 @@
 		}
 		assert(jumpTarget124 != 0);
 		jumpTarget34 = jumpTarget124;
-		offset31 = (((sqInt) jumpTarget34)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset31 = (((int) jumpTarget34)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset31)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -3988,14 +3988,14 @@
 		}
 		assert(jumpTarget1115 != 0);
 		jumpTarget215 = jumpTarget1115;
-		offset121 = (((sqInt) jumpTarget215)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset121 = (((int) jumpTarget215)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 11);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset121 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset121) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset121) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset121) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case JumpFPUnordered:
@@ -4010,7 +4010,7 @@
 		}
 		assert(jumpTarget125 != 0);
 		jumpTarget35 = jumpTarget125;
-		offset32 = (((sqInt) jumpTarget35)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 2)));
+		offset32 = (((int) jumpTarget35)) - (((int) (((self_in_dispatchConcretize->address)) + 2)));
 		if ((((self_in_dispatchConcretize->machineCodeSize)) == 0
 			? isQuick(self_in_dispatchConcretize, offset32)
 			: ((self_in_dispatchConcretize->machineCodeSize)) == 2)) {
@@ -4030,14 +4030,14 @@
 		}
 		assert(jumpTarget1116 != 0);
 		jumpTarget216 = jumpTarget1116;
-		offset122 = (((sqInt) jumpTarget216)) - (((sqInt) (((self_in_dispatchConcretize->address)) + 6)));
+		offset122 = (((int) jumpTarget216)) - (((int) (((self_in_dispatchConcretize->address)) + 6)));
 		((self_in_dispatchConcretize->machineCode))[0] = 15;
 		((self_in_dispatchConcretize->machineCode))[1] = (128 + 10);
 		((self_in_dispatchConcretize->machineCode))[2] = (offset122 & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset122) >> 8) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset122) >> 16) & 0xFF);
 		((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset122) >> 24) & 0xFF);
-		((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6)));
+		((self_in_dispatchConcretize->machineCodeSize) = 6);
 		return;
 
 	case RetN:
@@ -5754,18 +5754,14 @@
 static sqInt NoDbgRegParms
 genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs)
 {
-	/* begin PopR: */
-	genoperand(PopR, EAX);
-	/* begin PopR: */
-	genoperand(PopR, EBX);
-	/* begin PopR: */
-	genoperand(PopR, ECX);
-	/* begin PopR: */
-	genoperand(PopR, EDX);
-	/* begin PopR: */
-	genoperand(PopR, ESI);
-	/* begin PopR: */
-	genoperand(PopR, EDI);
+    sqInt reg;
+
+	for (reg = EAX; reg <= EDI; reg += 1) {
+		if (!(((reg >= ESP) && (reg <= EBP)))) {
+			/* begin PopR: */
+			genoperand(PopR, reg);
+		}
+	}
 	return 0;
 }
 
@@ -5803,10 +5799,12 @@
 {
     sqInt reg;
 
-	assert(((EDI - EAX) + 1) == 6);
+	assert(((EDI - EAX) + 1) == 8);
 	for (reg = EDI; reg >= EAX; reg += -1) {
-		/* begin PushR: */
-		genoperand(PushR, reg);
+		if (!(((reg >= ESP) && (reg <= EBP)))) {
+			/* begin PushR: */
+			genoperand(PushR, reg);
+		}
 	}
 	return 0;
 }
@@ -5985,7 +5983,7 @@
 static sqInt NoDbgRegParms
 isQuick(AbstractInstruction * self_in_isQuick, unsigned long operand)
 {
-	return (((((sqInt) operand)) >= -128) && ((((sqInt) operand)) <= 0x7F));
+	return (((((int) operand)) >= -128) && ((((int) operand)) <= 0x7F));
 }
 
 
@@ -6297,7 +6295,7 @@
 	byteAtput(callSiteReturnAddress - 2, (((usqInt) callDistance) >> 16) & 0xFF);
 	byteAtput(callSiteReturnAddress - 3, (((usqInt) callDistance) >> 8) & 0xFF);
 	byteAtput(callSiteReturnAddress - 4, callDistance & 0xFF);
-	assert((((usqInt) (callTargetFromReturnAddress(self_in_rewriteCallAttarget, callSiteReturnAddress)))) == callTargetAddress);
+	assert((callTargetFromReturnAddress(self_in_rewriteCallAttarget, callSiteReturnAddress)) == callTargetAddress);
 	return 5;
 }
 
@@ -10037,14 +10035,14 @@
 generateMapAtstart(sqInt addressOrNull, sqInt startAddress)
 {
     unsigned char annotation;
-    usqInt delta;
+    sqInt delta;
     sqInt i;
     AbstractInstruction *instruction;
     sqInt length;
-    usqInt location;
-    usqInt mapEntry;
+    sqInt location;
+    sqInt mapEntry;
     sqInt maxDelta;
-    usqInt mcpc;
+    sqInt mcpc;
 
 	length = 0;
 	location = startAddress;
@@ -18665,7 +18663,6 @@
 		/* begin JumpNonZero: */
 		jumpCmp = genConditionalBranchoperand(JumpNonZero, ((sqInt)0));
 	}
-	/* begin genMoveTrueR: */
 	/* begin genMoveConstant:R: */
 	constant = trueObject();
 	if (shouldAnnotateObjectReference(constant)) {
@@ -21295,7 +21292,7 @@
 }
 
 	/* SimpleStackBasedCogit>>#genMoveTrueR: */
-static AbstractInstruction * NoDbgRegParms
+static sqInt NoDbgRegParms
 genMoveTrueR(sqInt reg)
 {
     AbstractInstruction *anInstruction;

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2015-12-14 19:30:06 UTC (rev 3532)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2015-12-15 19:48:51 UTC (rev 3533)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790
    from
-	CoInterpreter VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a
+	CoInterpreter VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1594 uuid: 79da8b81-d1f3-469a-869c-16c79d12649a " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1597 uuid: d40647ee-f0e2-471a-8007-2d2ca3483790 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -240,7 +240,8 @@
 #define GCModeImageSegment 16
 #define GCModeIncremental 4
 #define GCModeNewSpace 2
-#define HasBeenReturnedFromMCPC 0xFFFFFFFFUL
+#define HasBeenReturnedFromMCPC -1
+#define HasBeenReturnedFromMCPCOop 0xFFFFFFFFUL
 #define HeaderIndex 0
 #define IFrameSlots 7
 #define InstanceSpecificationIndex 2
@@ -505,7 +506,6 @@
 static sqInt NoDbgRegParms frameMethodObject(char *theFP);
 static sqInt NoDbgRegParms frameNumArgs(char *theFP);
 extern usqInt framePointerAddress(void);
-static char * NoDbgRegParms frameReceiverLocation(char *theFP);
 static sqInt NoDbgRegParms frameReceiver(char *theFP);
 extern void (*functionPointerForCompiledMethodprimitiveIndex(sqInt methodObj, sqInt primIndex))(void) ;
 extern sqInt getCheckAllocFiller(void);
@@ -1243,7 +1243,7 @@
 static void NoDbgRegParms addLastLinktoList(sqInt proc, sqInt aList);
 static void NoDbgRegParms addNewMethodToNSCache(sqInt rule);
 static sqInt NoDbgRegParms addressCouldBeClassObj(sqInt maybeClassObj);
-static char * NoDbgRegParms allocateMemoryminimumimageFileheaderSize(sqInt heapSize, sqInt minimumMemory, sqImageFile fileStream, sqInt headerSize);
+static char * allOnesAsCharStar(void);
 extern sqInt argumentCountOfClosure(sqInt closurePointer);
 extern sqInt argumentCountOfMethodHeader(sqInt header);
 extern sqInt argumentCountOf(sqInt methodPointer);
@@ -1309,8 +1309,6 @@
 extern double floatArg(sqInt index);
 static void NoDbgRegParms followForwardedFrameContentsstackPointer(char *theFP, char *theSP);
 extern sqInt forceInterruptCheck(void);
-static char * NoDbgRegParms frameCallerFP(char *theFP);
-static char * NoDbgRegParms frameCallerSavedIP(char *theFP);
 static char * NoDbgRegParms frameCallerSP(char *theFP);
 static sqInt NoDbgRegParms frameContext(char *theFP);
 static char * NoDbgRegParms frameOfMarriedContext(sqInt aContext);
@@ -2397,7 +2395,7 @@
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
 char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1594";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1597";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -5297,7 +5295,6 @@
 						contextToReturnTo = callerContextOrNil;
 					}
 					else {
-						/* begin frameCallerFP: */
 						frameToReturnTo = pointerForOop(longAt(theFP + FoxSavedFP));
 					}
 				}
@@ -5430,10 +5427,8 @@
 				else {
 					do {
 						callerFP = localFP;
-						/* begin frameCallerFP: */
 						localFP = pointerForOop(longAt(localFP + FoxSavedFP));
 					} while(localFP != frameToReturnTo);
-					/* begin frameCallerSavedIP: */
 					localIP = pointerForOop(longAt(callerFP + FoxCallerSavedIP));
 					localSP = (frameCallerSP(callerFP)) - BytesPerWord;
 				}
@@ -5547,7 +5542,6 @@
 				char *theSP;
 
 				VM_LABEL(commonCallerReturn);
-				/* begin frameCallerFP: */
 				callersFPOrNull = pointerForOop(longAt(localFP + FoxSavedFP));
 				if (callersFPOrNull == 0) {
 
@@ -5600,7 +5594,7 @@
 								frameAbove = 0;
 								goto l236;
 							}
-							while (((callerFP = frameCallerFP(fp))) != 0) {
+							while (((callerFP = pointerForOop(longAt(fp + FoxSavedFP)))) != 0) {
 								if (callerFP == theFP) {
 									frameAbove = fp;
 									goto l236;
@@ -5700,7 +5694,6 @@
 
 					goto l235;
 				}
-				/* begin frameCallerSavedIP: */
 				localIP = pointerForOop(longAt(localFP + FoxCallerSavedIP));
 				localSP = localFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(localFP + FoxMethod)))) < (startOfMemory())
 	? ((mframeCogMethod(localFP))->cmNumArgs)
@@ -6374,7 +6367,7 @@
 						GIV(method) = GIV(newMethod);
 						assert(isOopCompiledMethod(GIV(method)));
 						assert((methodHeaderOf(GIV(method))) == methodHeader);
-						GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+						GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 							? 256
 							: 0);
 
@@ -6401,7 +6394,7 @@
 
 							localIP += 3;
 							if (GIV(primFailCode) != 0) {
-								if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0
+								if ((byteAt(localIP + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 									/* begin getErrorObjectFromPrimFailCode */
@@ -6523,7 +6516,7 @@
 							value = longAt((rcvr1 + BaseHeaderSize) + (byte3 << (shiftForWord())));
 							if ((byte3 == InstructionPointerIndex)
 							 && (((value & 1))
-							 && ((((sqInt) value)) < 0))) {
+							 && ((((int) value)) < 0))) {
 								/* begin internalMustMapMachineCodePC:context: */
 								/* begin externalizeIPandSP */
 								assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
@@ -6552,7 +6545,6 @@
 						spouseFP = pointerForOop(senderOop - 1);
 						if (byte3 == SenderIndex) {
 							/* begin ensureCallerContext: */
-							/* begin frameCallerFP: */
 							callerFP = pointerForOop(longAt(spouseFP + FoxSavedFP));
 							if (callerFP == 0) {
 
@@ -8965,8 +8957,8 @@
 				sqInt fmt;
 				sqInt fmt1;
 				sqInt fmt2;
-				sqLong hdr;
-				sqLong hdr1;
+				sqInt hdr;
+				sqInt hdr1;
 				sqInt index;
 				sqInt index1;
 				sqInt newLargeInteger;
@@ -9013,7 +9005,7 @@
 							/* begin install:inAtCache:at:string: */
 							assert(!(isContext(rcvr)));
 							hdr = long64At(rcvr);
-							fmt1 = (((unsigned sqLong)hdr) >> (formatShift())) & (formatMask());
+							fmt1 = (((usqInt) hdr) >> (formatShift())) & (formatMask());
 							if ((fmt1 == (indexablePointersFormat()))
 							 && ((hdr & (classIndexMask())) == ClassMethodContextCompactIndex)) {
 
@@ -9079,7 +9071,7 @@
 								/* begin install:inAtCache:at:string: */
 								assert(!(isContext(rcvr)));
 								hdr1 = long64At(rcvr);
-								fmt2 = (((unsigned sqLong)hdr1) >> (formatShift())) & (formatMask());
+								fmt2 = (((usqInt) hdr1) >> (formatShift())) & (formatMask());
 								/* begin lengthOf:format: */
 								/* begin numSlotsOfAny: */
 								numSlots21 = byteAt(rcvr + 7);
@@ -9262,8 +9254,8 @@
 				sqInt fmt;
 				sqInt fmt1;
 				sqInt fmt2;
-				sqLong hdr;
-				sqLong hdr1;
+				sqInt hdr;
+				sqInt hdr1;
 				sqInt index;
 				sqInt isCharacter;
 				usqInt numSlots;
@@ -9305,7 +9297,7 @@
 							/* begin install:inAtCache:at:string: */
 							assert(!(isContext(rcvr)));
 							hdr = long64At(rcvr);
-							fmt1 = (((unsigned sqLong)hdr) >> (formatShift())) & (formatMask());
+							fmt1 = (((usqInt) hdr) >> (formatShift())) & (formatMask());
 							if ((fmt1 == (indexablePointersFormat()))
 							 && ((hdr & (classIndexMask())) == ClassMethodContextCompactIndex)) {
 
@@ -9371,7 +9363,7 @@
 								/* begin install:inAtCache:at:string: */
 								assert(!(isContext(rcvr)));
 								hdr1 = long64At(rcvr);
-								fmt2 = (((unsigned sqLong)hdr1) >> (formatShift())) & (formatMask());
+								fmt2 = (((usqInt) hdr1) >> (formatShift())) & (formatMask());
 								/* begin lengthOf:format: */
 								/* begin numSlotsOfAny: */
 								numSlots21 = byteAt(rcvr + 7);
@@ -11571,8 +11563,8 @@
 				sqInt fmt;
 				sqInt fmt1;
 				sqInt fmt2;
-				sqLong hdr;
-				sqLong hdr1;
+				sqInt hdr;
+				sqInt hdr1;
 				sqInt index;
 				sqInt index1;
 				sqInt newLargeInteger;
@@ -11619,7 +11611,7 @@
 							/* begin install:inAtCache:at:string: */
 							assert(!(isContext(rcvr)));
 							hdr = long64At(rcvr);
-							fmt1 = (((unsigned sqLong)hdr) >> (formatShift())) & (formatMask());
+							fmt1 = (((usqInt) hdr) >> (formatShift())) & (formatMask());
 							if ((fmt1 == (indexablePointersFormat()))
 							 && ((hdr & (classIndexMask())) == ClassMethodContextCompactIndex)) {
 
@@ -11685,7 +11677,7 @@
 								/* begin install:inAtCache:at:string: */
 								assert(!(isContext(rcvr)));
 								hdr1 = long64At(rcvr);
-								fmt2 = (((unsigned sqLong)hdr1) >> (formatShift())) & (formatMask());
+								fmt2 = (((usqInt) hdr1) >> (formatShift())) & (formatMask());
 								/* begin lengthOf:format: */
 								/* begin numSlotsOfAny: */
 								numSlots21 = byteAt(rcvr + 7);
@@ -11868,8 +11860,8 @@
 				sqInt fmt;
 				sqInt fmt1;
 				sqInt fmt2;
-				sqLong hdr;
-				sqLong hdr1;
+				sqInt hdr;
+				sqInt hdr1;
 				sqInt index;
 				sqInt isCharacter;
 				usqInt numSlots;
@@ -11911,7 +11903,7 @@
 							/* begin install:inAtCache:at:string: */
 							assert(!(isContext(rcvr)));
 							hdr = long64At(rcvr);
-							fmt1 = (((unsigned sqLong)hdr) >> (formatShift())) & (formatMask());
+							fmt1 = (((usqInt) hdr) >> (formatShift())) & (formatMask());
 							if ((fmt1 == (indexablePointersFormat()))
 							 && ((hdr & (classIndexMask())) == ClassMethodContextCompactIndex)) {
 
@@ -11977,7 +11969,7 @@
 								/* begin install:inAtCache:at:string: */
 								assert(!(isContext(rcvr)));
 								hdr1 = long64At(rcvr);
-								fmt2 = (((unsigned sqLong)hdr1) >> (formatShift())) & (formatMask());
+								fmt2 = (((usqInt) hdr1) >> (formatShift())) & (formatMask());
 								/* begin lengthOf:format: */
 								/* begin numSlotsOfAny: */
 								numSlots21 = byteAt(rcvr + 7);
@@ -12689,7 +12681,7 @@
 						value = longAt((rcvr + BaseHeaderSize) + (index << (shiftForWord())));
 						if ((index == InstructionPointerIndex)
 						 && (((value & 1))
-						 && ((((sqInt) value)) < 0))) {
+						 && ((((int) value)) < 0))) {
 							/* begin internalMustMapMachineCodePC:context: */
 							/* begin externalizeIPandSP */
 							assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
@@ -12718,7 +12710,6 @@
 					spouseFP = pointerForOop(senderOop - 1);
 					if (index == SenderIndex) {
 						/* begin ensureCallerContext: */
-						/* begin frameCallerFP: */
 						callerFP = pointerForOop(longAt(spouseFP + FoxSavedFP));
 						if (callerFP == 0) {
 
@@ -13824,7 +13815,7 @@
 					GIV(method) = GIV(newMethod);
 					assert(isOopCompiledMethod(GIV(method)));
 					assert((methodHeaderOf(GIV(method))) == methodHeader);
-					GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+					GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 						? 256
 						: 0);
 
@@ -13851,7 +13842,7 @@
 
 						localIP += 3;
 						if (GIV(primFailCode) != 0) {
-							if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0
+							if ((byteAt(localIP + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 								/* begin getErrorObjectFromPrimFailCode */
@@ -14194,7 +14185,7 @@
 					GIV(method) = GIV(newMethod);
 					assert(isOopCompiledMethod(GIV(method)));
 					assert((methodHeaderOf(GIV(method))) == methodHeader);
-					GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+					GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 						? 256
 						: 0);
 
@@ -14221,7 +14212,7 @@
 
 						localIP += 3;
 						if (GIV(primFailCode) != 0) {
-							if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0
+							if ((byteAt(localIP + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 								/* begin getErrorObjectFromPrimFailCode */
@@ -14671,7 +14662,7 @@
 					GIV(method) = GIV(newMethod);
 					assert(isOopCompiledMethod(GIV(method)));
 					assert((methodHeaderOf(GIV(method))) == methodHeader);
-					GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+					GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 						? 256
 						: 0);
 
@@ -14698,7 +14689,7 @@
 
 						localIP += 3;
 						if (GIV(primFailCode) != 0) {
-							if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0
+							if ((byteAt(localIP + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 								/* begin getErrorObjectFromPrimFailCode */
@@ -15157,7 +15148,7 @@
 					GIV(method) = GIV(newMethod);
 					assert(isOopCompiledMethod(GIV(method)));
 					assert((methodHeaderOf(GIV(method))) == methodHeader);
-					GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+					GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 						? 256
 						: 0);
 
@@ -15184,7 +15175,7 @@
 
 						localIP += 3;
 						if (GIV(primFailCode) != 0) {
-							if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0
+							if ((byteAt(localIP + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 								/* begin getErrorObjectFromPrimFailCode */
@@ -15576,7 +15567,7 @@
 
 		initialPC = ((GIV(newMethod) + ((LiteralStart + (literalCountOfMethodHeader(methodHeader))) * BytesPerOop)) + BaseHeaderSize) + (3);
 		if (GIV(primFailCode) != 0) {
-			if ((byteAt(initialPC)) == (((((sqInt) methodHeader)) < 0
+			if ((byteAt(initialPC)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 				/* begin getErrorObjectFromPrimFailCode */
@@ -15672,7 +15663,7 @@
 	GIV(method) = GIV(newMethod);
 	assert(isOopCompiledMethod(GIV(method)));
 	assert((methodHeaderOf(GIV(method))) == methodHeader);
-	GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0
+	GIV(bytecodeSetSelector) = ((((int) methodHeader)) < 0
 		? 256
 		: 0);
 
@@ -15704,7 +15695,7 @@
 
 		GIV(instructionPointer) += 3;
 		if (GIV(primFailCode) != 0) {
-			if ((byteAt(GIV(instructionPointer) + 1)) == (((((sqInt) methodHeader)) < 0
+			if ((byteAt(GIV(instructionPointer) + 1)) == (((((int) methodHeader)) < 0
 		? AltLongStoreBytecode
 		: LongStoreBytecode))) {
 				/* begin getErrorObjectFromPrimFailCode */
@@ -15999,7 +15990,7 @@
 			prevFrameWasCogged = 0;
 		}
 		theIP = ((usqInt)(longAt(theFP + FoxCallerSavedIP)));
-		if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
+		if (!(((callerFP = pointerForOop(longAt(theFP + FoxSavedFP)))) != 0)) break;
 		theFP = callerFP;
 	}
 	assertl(theIP == (ceBaseFrameReturnPC()), ln);
@@ -16048,7 +16039,6 @@
     char *p;
     usqInt pc;
     usqInt pc1;
-    sqInt savedIP;
     char *sp;
     char *sp1;
     sqInt startBcpc;
@@ -16069,13 +16059,11 @@
 			longAtput(GIV(framePointer) + FoxCallerSavedIP, ceBaseFrameReturnPC());
 		}
 		else {
-			if (!(isMachineCodeFrame(frameCallerFP(GIV(framePointer))))) {
+			if (!((((usqInt)(longAt((pointerForOop(longAt(GIV(framePointer) + FoxSavedFP))) + FoxMethod)))) < (startOfMemory()))) {
 				/* begin iframeSavedIP:put: */
-				/* begin frameCallerFP: */
 				theFP = pointerForOop(longAt(GIV(framePointer) + FoxSavedFP));
-				savedIP = ((sqInt)(frameCallerSavedIP(GIV(framePointer))));
 				assert(!(isMachineCodeFrame(theFP)));
-				longAtput(theFP + FoxIFSavedIP, savedIP);
+				longAtput(theFP + FoxIFSavedIP, ((sqInt)(pointerForOop(longAt(GIV(framePointer) + FoxCallerSavedIP)))));
 				longAtput(GIV(framePointer) + FoxCallerSavedIP, ceReturnToInterpreterPC());
 			}
 		}
@@ -16362,17 +16350,8 @@
 	assert((((GIV(stackPage)->baseFP)) + (2 * BytesPerWord)) < ((GIV(stackPage)->baseAddress)));
 	assert((addressCouldBeObj(longAt(((GIV(stackPage)->baseAddress)) - BytesPerWord)))
 	 && (isContext(longAt(((GIV(stackPage)->baseAddress)) - BytesPerWord))));
-	assert((addressCouldBeObj(longAt((GIV(stackPage)->baseAddress))))
-	 && (isContext(longAt((GIV(stackPage)->baseAddress)))));
-
-	/* The stack page is effectively free now, so free it.  We must free it to be
-	   correct in determining if contextToReturnTo is still married, and in case
-	   makeBaseFrameFor: cogs a method, which may cause a code compaction,
-	   in which case the frame must be free to avoid the relocation machinery
-	   tracing the dead frame.  Since freeing now temporarily violates the page-list
-	   ordering invariant, use the assert-free version. */
-
 	contextToReturnTo = longAt((GIV(stackPage)->baseAddress));
+	assert(addressCouldBeObj(contextToReturnTo));
 	freeStackPageNoAssert(GIV(stackPage));
 	isAContext = ((contextToReturnTo & (tagMask())) == 0)
 	 && (((longAt(contextToReturnTo)) & (classIndexMask())) == ClassMethodContextCompactIndex);
@@ -16405,7 +16384,7 @@
 				frameAbove = 0;
 				goto l1;
 			}
-			while (((callerFP = frameCallerFP(fp))) != 0) {
+			while (((callerFP = pointerForOop(longAt(fp + FoxSavedFP)))) != 0) {
 				if (callerFP == GIV(framePointer)) {
 					frameAbove = fp;
 					goto l1;
@@ -17371,7 +17350,6 @@
 			contextToReturnTo = callerContextOrNil;
 		}
 		else {
-			/* begin frameCallerFP: */
 			frameToReturnTo = pointerForOop(longAt(theFP + FoxSavedFP));
 		}
 	}
@@ -17502,10 +17480,9 @@
 	else {
 		do {
 			callerFP = GIV(framePointer);
-			/* begin frameCallerFP: */
 			GIV(framePointer) = pointerForOop(longAt(GIV(framePointer) + FoxSavedFP));
 		} while(GIV(framePointer) != frameToReturnTo);
-		GIV(instructionPointer) = ((usqInt)(frameCallerSavedIP(callerFP)));
+		GIV(instructionPointer) = ((usqInt)(pointerForOop(longAt(callerFP + FoxCallerSavedIP))));
 		/* begin frameCallerSP: */
 		assert(!(isBaseFrame(callerFP)));
 		GIV(stackPointer) = (callerFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(callerFP + FoxMethod)))) < (startOfMemory())
@@ -18577,7 +18554,6 @@
 				theSP += BytesPerWord;
 			}
 			while (1) {
-				/* begin frameReceiverLocation: */
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -18639,7 +18615,7 @@
 						ok = 0;
 					}
 				}
-				if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
+				if (!(((callerFP = pointerForOop(longAt(theFP + FoxSavedFP)))) != 0)) break;
 				theSP = (theFP + FoxCallerSavedIP) + BytesPerWord;
 				theFP = callerFP;
 			}
@@ -18792,7 +18768,7 @@
 		/* begin mframeCogMethod: */
 		cogMethod = ((CogBlockMethod *) ((longAt(theFP + FoxMethod)) & MFMethodMask));
 		if (theIP == (ceCannotResumePC())) {
-			return HasBeenReturnedFromMCPC;
+			return HasBeenReturnedFromMCPCOop;
 		}
 		if (((cogMethod->cmType)) == CMMethod) {
 			return ((((((sqInt)cogMethod)) - theIP) << 1) | 1);
@@ -18865,7 +18841,6 @@
 			return 1;
 		}
 		calleeFP = theFP;
-		/* begin frameCallerFP: */
 		theFP = pointerForOop(longAt(theFP + FoxSavedFP));
 		if (!(theFP != 0)) break;
 
@@ -19227,7 +19202,7 @@
 		value = longAt((aContext + BaseHeaderSize) + (offset << (shiftForWord())));
 		return ((offset == InstructionPointerIndex)
 		 && (((value & 1))
-		 && ((((sqInt) value)) < 0))
+		 && ((((int) value)) < 0))
 			? (/* begin externalWriteBackHeadFramePointers */
 				assert((GIV(framePointer) - GIV(stackPointer)) < (LargeContextSlots * BytesPerOop)),
 				assert(GIV(stackPage) == (mostRecentlyUsedPage())),
@@ -19597,7 +19572,7 @@
 				 && (((longAt(oop)) & (classIndexMask())) == (isForwardedObjectClassIndexPun()))) {
 					longAtput(theFP + offset, followForwarded(oop));
 				}
-				if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
+				if (!(((callerFP = pointerForOop(longAt(theFP + FoxSavedFP)))) != 0)) break;
 				theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
 				theFP = callerFP;
 			}
@@ -19747,15 +19722,6 @@
 	return ((usqInt)((&GIV(framePointer))));
 }
 

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list