[Vm-dev] [commit][3061] CogVM source as per VMMaker.oscog-eem.848

commits at squeakvm.org commits at squeakvm.org
Thu Aug 7 15:22:33 UTC 2014


Revision: 3061
Author:   eliot
Date:     2014-08-07 08:22:32 -0700 (Thu, 07 Aug 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.848

Sista:
Implement ceClassTrap.

Fix argument access in inlinePrimitiveBytecode:.  Refactor
primitiveQuo to share code with inlinePrimitiveBytecode:.

Provide a dummy genCallPrimitiveBytecode for now.

Cogits:
Implement genExtTrapIfNotInstanceOfBehaviorsBytecode for 32 bit Spur.  Fix
argument branches type & alloca in genExtTrapIfNotInstanceOfBehaviorsBytecode.

Eliminate classFloatCompactIndex and just use ClassFloatCompactIndex directly.

Fix comment typos and miscategorizations.

Copy the readme to the paste buffer on Mac OS X in uploadvms

Modified Paths:
--------------
    branches/Cog/nscogsrc/vm/cogit.c
    branches/Cog/nscogsrc/vm/cogit.h
    branches/Cog/nscogsrc/vm/cointerp.c
    branches/Cog/nscogsrc/vm/cointerp.h
    branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/cogit.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/scripts/uploadvms
    branches/Cog/sistasrc/vm/cogit.c
    branches/Cog/sistasrc/vm/cogit.h
    branches/Cog/sistasrc/vm/cointerp.c
    branches/Cog/sistasrc/vm/cointerp.h
    branches/Cog/sistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cogit.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/vm/cogit.c
    branches/Cog/src/vm/cogit.h
    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/src/vm/interp.h
    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/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cogit.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+	CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+	StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -133,6 +133,7 @@
 #define BlockCreationBytecodeSize 4
 #define Call 9
 #define CDQ 111
+#define ClassFloatCompactIndex 6
 #define ClassMethodContextCompactIndex 14
 #define ClassReg -5
 #define ClosureFirstCopiedValueIndex 3
@@ -823,6 +824,7 @@
 char * whereIsMaybeCodeThing(sqInt anOop);
 static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
 static sqInt createsClosuresInline(void);
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
 static sqInt genEnsureObjInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
 static sqInt genEnsureOopInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
 static sqInt genInnerPrimitiveAsCharacterinReg(sqInt retNOffset, sqInt reg) NoDbgRegParms;
@@ -15581,7 +15583,14 @@
 	return 0;
 }
 
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+	/* begin CmpCq:R: */
+	return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
 
+
 /*	Make sure that the object in reg is not forwarded. By default there is
 	nothing to do. Subclasses for memory managers that forward will override. */
 
@@ -15804,7 +15813,7 @@
     sqInt newFloatHeaderSansHash;
 
 	allocSize = BaseHeaderSize + (sizeof(double));
-	newFloatHeaderSansHash = ((((classFloatCompactIndex()) << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
+	newFloatHeaderSansHash = (((ClassFloatCompactIndex << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
 	/* begin MoveAw:R: */
 	address = freeStartAddress();
 	genoperandoperand(MoveAwR, address, resultReg);
@@ -19597,7 +19606,6 @@
     AbstractInstruction *jumpFailClass;
     AbstractInstruction *jumpImmediate;
     AbstractInstruction *jumpNonInt;
-    sqInt quickConstant;
 
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -19606,9 +19614,7 @@
 	genoperandoperand(MoveRR, Arg0Reg, ClassReg);
 	jumpImmediate = genJumpImmediateInScratchReg(TempReg);
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFailClass = genoperand(JumpNonZero, ((sqInt)0));
 	genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -19658,16 +19664,13 @@
     AbstractInstruction *jumpFail;
     AbstractInstruction *jumpImmediate;
     AbstractInstruction *jumpNonInt;
-    sqInt quickConstant;
 
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, Arg0Reg, TempReg);
 	genGetDoubleValueOfinto(ReceiverResultReg, DPFPReg0);
 	jumpImmediate = genJumpImmediateInScratchReg(TempReg);
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFail = genoperand(JumpNonZero, ((sqInt)0));
 	genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -21290,7 +21293,6 @@
     AbstractInstruction *jumpFail;
     AbstractInstruction *jumpNonInt;
     AbstractInstruction *jumpTrue;
-    sqInt quickConstant;
 
 	if (!(hasDoublePrecisionFloatingPointSupport(backEnd))) {
 		return genSmallIntegerComparison(jumpOpcode);
@@ -21310,9 +21312,7 @@
 	jmpTarget(jumpDouble, gLabel());
 	
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFail = genoperand(JumpNonZero, ((sqInt)0));
 	genConvertSmallIntegerToIntegerInReg(ReceiverResultReg);

Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cogit.h	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+	CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
 
 

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -808,7 +808,6 @@
 sqInt characterValueOf(sqInt oop);
 static sqInt checkHeapIntegrity(void);
 sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
 sqInt clone(sqInt obj);
 static sqInt defaultEdenBytes(void);
 static sqInt eeInstantiateAndInitializeClassindexableSize(sqInt classPointer, sqInt size) NoDbgRegParms;
@@ -2083,7 +2082,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -4877,6 +4876,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
+							null;
 							goto l303;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -4894,7 +4894,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					/* return self */
+					null;
 				l303:	/* end baseFrameReturn */;
 					goto l302;
 				}
@@ -31097,22 +31097,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -35616,13 +35607,7 @@
 	return 1;
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
 
-
 /*	Return a shallow copy of the given object. May cause GC.
 	Assume: Oop is a real object, not a small integer.
 	Override to assert it's not a married context and maybe fix cloned
@@ -41189,7 +41174,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 4-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)
@@ -52832,7 +52819,7 @@
 	index = longAt(GIV(stackPointer) + (1 * BytesPerWord));
 	aContext = longAt(GIV(stackPointer) + (2 * BytesPerWord));
 	if (!((index & 1))) {
-		(GIV(primFailCode) = PrimErrBadArgument);
+		GIV(primFailCode) = PrimErrBadArgument;
 		return;
 	}
 	hdr = longAt(aContext);
@@ -53016,7 +53003,7 @@
 		stSize = (sp1 >> 1);
 	l2:	/* end fetchStackPointerOf: */;
 		if (!(((index >= 1) && (index <= stSize)))) {
-			(GIV(primFailCode) = PrimErrBadIndex);
+			GIV(primFailCode) = PrimErrBadIndex;
 			return;
 		}
 		/* begin subscript:with:storing:format: */
@@ -53062,7 +53049,7 @@
 	assert((senderOop & 1));
 	spouseFP = pointerForOop(senderOop - 1);
 	if (!(((index >= 1) && (index <= (stackPointerIndexForFrame(spouseFP)))))) {
-		(GIV(primFailCode) = PrimErrBadIndex);
+		GIV(primFailCode) = PrimErrBadIndex;
 		return;
 	}
 	if ((((usqInt)(longAt(spouseFP + FoxMethod)))) < (startOfMemory())) {
@@ -54267,7 +54254,7 @@
 	assert(pageListIsWellFormed());
 	
 	if (GIV(fullGCLock) > 0) {
-		(GIV(primFailCode) = PrimErrInappropriate);
+		GIV(primFailCode) = PrimErrInappropriate;
 		return;
 	}
 	incrementalGC();

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
 
 
@@ -127,7 +127,6 @@
 sqInt addressCouldBeObj(sqInt address);
 sqInt characterValueOf(sqInt oop);
 sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
 sqInt eeInstantiateClassIndexformatnumSlots(sqInt compactClassIndex, sqInt objFormat, sqInt numSlots);
 sqInt eeInstantiateClassindexableSize(sqInt classPointer, sqInt size);
 void findStringBeginningWith(char *aCString);

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -811,7 +811,6 @@
 sqInt characterValueOf(sqInt oop);
 static sqInt checkHeapIntegrity(void);
 sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
 sqInt clone(sqInt obj);
 static sqInt defaultEdenBytes(void);
 static sqInt eeInstantiateAndInitializeClassindexableSize(sqInt classPointer, sqInt size) NoDbgRegParms;
@@ -2086,7 +2085,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -4886,6 +4885,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
+							null;
 							goto l303;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -4903,7 +4903,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					/* return self */
+					null;
 				l303:	/* end baseFrameReturn */;
 					goto l302;
 				}
@@ -31106,22 +31106,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -35625,13 +35616,7 @@
 	return 1;
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
 
-
 /*	Return a shallow copy of the given object. May cause GC.
 	Assume: Oop is a real object, not a small integer.
 	Override to assert it's not a married context and maybe fix cloned
@@ -41198,7 +41183,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 4-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)
@@ -52841,7 +52828,7 @@
 	index = longAt(GIV(stackPointer) + (1 * BytesPerWord));
 	aContext = longAt(GIV(stackPointer) + (2 * BytesPerWord));
 	if (!((index & 1))) {
-		(GIV(primFailCode) = PrimErrBadArgument);
+		GIV(primFailCode) = PrimErrBadArgument;
 		return;
 	}
 	hdr = longAt(aContext);
@@ -53025,7 +53012,7 @@
 		stSize = (sp1 >> 1);
 	l2:	/* end fetchStackPointerOf: */;
 		if (!(((index >= 1) && (index <= stSize)))) {
-			(GIV(primFailCode) = PrimErrBadIndex);
+			GIV(primFailCode) = PrimErrBadIndex;
 			return;
 		}
 		/* begin subscript:with:storing:format: */
@@ -53071,7 +53058,7 @@
 	assert((senderOop & 1));
 	spouseFP = pointerForOop(senderOop - 1);
 	if (!(((index >= 1) && (index <= (stackPointerIndexForFrame(spouseFP)))))) {
-		(GIV(primFailCode) = PrimErrBadIndex);
+		GIV(primFailCode) = PrimErrBadIndex;
 		return;
 	}
 	if ((((usqInt)(longAt(spouseFP + FoxMethod)))) < (startOfMemory())) {
@@ -54276,7 +54263,7 @@
 	assert(pageListIsWellFormed());
 	
 	if (GIV(fullGCLock) > 0) {
-		(GIV(primFailCode) = PrimErrInappropriate);
+		GIV(primFailCode) = PrimErrInappropriate;
 		return;
 	}
 	incrementalGC();

Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cogit.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -134,6 +134,7 @@
 #define CDQ 111
 #define ClassArrayCompactIndex 51
 #define ClassBlockClosureCompactIndex 37
+#define ClassFloatCompactIndex 34
 #define ClassMethodContextCompactIndex 36
 #define ClassReg -5
 #define ClosureFirstCopiedValueIndex 3
@@ -816,6 +817,7 @@
 static void voidYoungReferrersPostTenureAll(void);
 char * whereIsMaybeCodeThing(sqInt anOop);
 static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
 static sqInt genInnerPrimitiveNewMethod(sqInt retNoffset) NoDbgRegParms;
 static sqInt genAddSmallIntegerTagsTo(sqInt aRegister) NoDbgRegParms;
 static void genConvertCharacterToSmallIntegerInReg(sqInt reg) NoDbgRegParms;
@@ -12797,7 +12799,7 @@
 static sqInt
 markLiteralspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod)
 {
-    usqInt cacheAddress;
+    sqInt cacheAddress;
     sqInt cacheTag;
     sqInt cacheTag1;
     sqInt class;
@@ -13706,7 +13708,7 @@
 static sqInt
 remapIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr)
 {
-    usqInt cacheAddress;
+    sqInt cacheAddress;
     sqInt cacheTag;
     sqInt cacheTag1;
     sqInt entryPoint;
@@ -14454,7 +14456,7 @@
 static void
 voidImplicitReceiverCacheAt(sqInt mcpc)
 {
-    usqInt cacheAddress;
+    sqInt cacheAddress;
 
 	assert(NumOopsPerIRC == 2);
 	cacheAddress = implicitReceiveCacheAt(backEnd, mcpc);
@@ -15185,7 +15187,14 @@
 	 && ((heapMapAtWord(pointerForOop(anOop))) != 0);
 }
 
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+	/* begin CmpCq:R: */
+	return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
 
+
 /*	subclasses override if they can */
 
 static sqInt
@@ -17231,7 +17240,7 @@
 {
     sqInt hash;
 
-	hash = ensureBehaviorHash(classOop);
+	hash = classTagForClass(classOop);
 	return (hash <= (tagMask())
 		? hash & 1
 		: hash);
@@ -17363,7 +17372,7 @@
     sqInt quickConstant;
 
 	allocSize = (BaseHeaderSize) + (sizeof(double));
-	newFloatHeader = headerForSlotsformatclassIndex((sizeof(double)) / (wordSize()), firstLongFormat(), classFloatCompactIndex());
+	newFloatHeader = headerForSlotsformatclassIndex((sizeof(double)) / (wordSize()), firstLongFormat(), ClassFloatCompactIndex);
 	/* begin MoveAw:R: */
 	address = freeStartAddress();
 	genoperandoperand(MoveAwR, address, resultReg);
@@ -20963,7 +20972,6 @@
     AbstractInstruction *jumpFailClass;
     AbstractInstruction *jumpImmediate;
     AbstractInstruction *jumpNonInt;
-    sqInt quickConstant;
 
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -20972,9 +20980,7 @@
 	genoperandoperand(MoveRR, Arg0Reg, ClassReg);
 	jumpImmediate = genJumpImmediateInScratchReg(TempReg);
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFailClass = genoperand(JumpNonZero, ((sqInt)0));
 	genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -21026,16 +21032,13 @@
     AbstractInstruction *jumpFail;
     AbstractInstruction *jumpImmediate;
     AbstractInstruction *jumpNonInt;
-    sqInt quickConstant;
 
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, Arg0Reg, TempReg);
 	genGetDoubleValueOfinto(ReceiverResultReg, DPFPReg0);
 	jumpImmediate = genJumpImmediateInScratchReg(TempReg);
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFail = genoperand(JumpNonZero, ((sqInt)0));
 	genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -22687,7 +22690,6 @@
     AbstractInstruction *jumpFail;
     AbstractInstruction *jumpNonInt;
     AbstractInstruction *jumpTrue;
-    sqInt quickConstant;
 
 	if (!(hasDoublePrecisionFloatingPointSupport(backEnd))) {
 		return genSmallIntegerComparison(jumpOpcode);
@@ -22710,9 +22712,7 @@
 	jumpNonInt = genJumpImmediateInScratchReg(TempReg);
 
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */
 	jumpFail = genoperand(JumpNonZero, ((sqInt)0));
 	genConvertSmallIntegerToIntegerInReg(ReceiverResultReg);

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cogit.h	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -802,9 +802,11 @@
 usqInt freeStartAddress(void);
 usqInt getScavengeThreshold(void);
 static sqLong headerWhileForwardingOf(sqInt aCompiledMethodObjOop) NoDbgRegParms;
+sqInt isImmediateClass(sqInt classObj);
 sqInt isReallyYoungObject(sqInt objOop);
 sqLong nullHeaderForMachineCodeMethod(void);
 usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
 sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
 sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
 static sqInt addressAfter(sqInt objOop) NoDbgRegParms;
@@ -904,7 +906,6 @@
 sqInt classExternalLibrary(void);
 sqInt classExternalStructure(void);
 sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
 static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
 sqInt classIndexMask(void);
 sqInt classIndexOf(sqInt objOop);
@@ -917,10 +918,10 @@
 sqInt classString(void);
 sqInt classTableMajorIndexShift(void);
 sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
 sqInt classTableRootObj(void);
 static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
 sqInt classUnsafeAlien(void);
 sqInt clone(sqInt objOop);
 static void compact(void) NeverInline;
@@ -934,7 +935,7 @@
 static void eliminateAndFreeForwardersForPigCompact(void);
 static void emptyObjStack(sqInt objStack) NoDbgRegParms;
 static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
 static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
 static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
 static sqInt ephemeronFormat(void);
@@ -2320,7 +2321,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.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -5611,7 +5612,6 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
-							null;
 							goto l292;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5629,7 +5629,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					null;
+					/* return self */
 				l292:	/* end baseFrameReturn */;
 					goto l291;
 				}
@@ -34905,22 +34905,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -38605,7 +38596,13 @@
 	return long64At(aCompiledMethodObjOop);
 }
 
+sqInt
+isImmediateClass(sqInt classObj)
+{
+	return ((((usqInt) (((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1))) >> 16) & 0x1F) == 7;
+}
 
+
 /*	Answer if obj is young. Require that obj is non-immediate. Override to
 	filter-out Cog methods
  */
@@ -38631,6 +38628,17 @@
 }
 
 
+/*	Beware, SmallInetger tags are 1 or 3. But SmallInteger's identityHash is
+	1. 
+ */
+
+sqInt
+smallIntegerTag(void)
+{
+	return 1;
+}
+
+
 /*	For the purposes of become: send selector to the cogit with obj1 and obj2
 	and answer the result. Undo forwarding for the selector. */
 
@@ -43960,12 +43968,6 @@
 	return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
-
 static sqInt
 classForClassTag(sqInt classIndex)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -44074,7 +44076,7 @@
 /*	1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
 /*	self basicNew classTablePageSize */
 
-static sqInt
+sqInt
 classTablePageSize(void)
 {
 	return 1 << 10;
@@ -44105,7 +44107,7 @@
 	method lookup cache.
  */
 
-static sqInt
+sqInt
 classTagForClass(sqInt classObj)
 {
     sqInt err;
@@ -45078,7 +45080,7 @@
 	memset(GIV(classTableBitmap), 0, requiredSize);
 }
 
-sqInt
+static sqInt
 ensureBehaviorHash(sqInt aBehavior)
 {
     sqInt err;
@@ -47334,7 +47336,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 5-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)

Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cointerp.h	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
 
 
@@ -122,9 +122,11 @@
 void ensureNoForwardedLiteralsIn(sqInt aMethodObj);
 usqInt freeStartAddress(void);
 usqInt getScavengeThreshold(void);
+sqInt isImmediateClass(sqInt classObj);
 sqInt isReallyYoungObject(sqInt objOop);
 sqLong nullHeaderForMachineCodeMethod(void);
 usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
 sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
 sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
 sqInt byteSwapped(sqInt w);
@@ -150,17 +152,17 @@
 sqInt checkOopHasOkayClass(usqInt obj);
 sqInt checkTraversableSortedFreeList(void);
 sqInt classAtIndex(sqInt classIndex);
-sqInt classFloatCompactIndex(void);
 sqInt classIndexMask(void);
 sqInt classIndexOf(sqInt objOop);
 sqInt classOrNilAtIndex(sqInt classIndex);
 sqInt classTableMajorIndexShift(void);
 sqInt classTableMinorIndexMask(void);
+sqInt classTablePageSize(void);
 sqInt classTableRootObj(void);
+sqInt classTagForClass(sqInt classObj);
 sqInt compactClassIndexOf(sqInt objOop);
 void countMarkedAndUnmarkdObjects(sqInt printFlags);
 sqInt eeInstantiateClassIndexformatnumSlots(sqInt knownClassIndex, sqInt objFormat, sqInt numSlots);
-sqInt ensureBehaviorHash(sqInt aBehavior);
 sqInt fetchByteofObject(sqInt byteIndex, sqInt objOop);
 void findStringBeginningWith(char *aCString);
 void findString(char *aCString);

Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -805,9 +805,11 @@
 usqInt freeStartAddress(void);
 usqInt getScavengeThreshold(void);
 static sqLong headerWhileForwardingOf(sqInt aCompiledMethodObjOop) NoDbgRegParms;
+sqInt isImmediateClass(sqInt classObj);
 sqInt isReallyYoungObject(sqInt objOop);
 sqLong nullHeaderForMachineCodeMethod(void);
 usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
 sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
 sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
 static sqInt addressAfter(sqInt objOop) NoDbgRegParms;
@@ -907,7 +909,6 @@
 sqInt classExternalLibrary(void);
 sqInt classExternalStructure(void);
 sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
 static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
 sqInt classIndexMask(void);
 sqInt classIndexOf(sqInt objOop);
@@ -920,10 +921,10 @@
 sqInt classString(void);
 sqInt classTableMajorIndexShift(void);
 sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
 sqInt classTableRootObj(void);
 static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
 sqInt classUnsafeAlien(void);
 sqInt clone(sqInt objOop);
 static void compact(void) NeverInline;
@@ -937,7 +938,7 @@
 static void eliminateAndFreeForwardersForPigCompact(void);
 static void emptyObjStack(sqInt objStack) NoDbgRegParms;
 static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
 static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
 static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
 static sqInt ephemeronFormat(void);
@@ -2323,7 +2324,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.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -5620,7 +5621,6 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
-							null;
 							goto l292;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5638,7 +5638,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-					null;
+					/* return self */
 				l292:	/* end baseFrameReturn */;
 					goto l291;
 				}
@@ -34914,22 +34914,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -38614,7 +38605,13 @@
 	return long64At(aCompiledMethodObjOop);
 }
 
+sqInt
+isImmediateClass(sqInt classObj)
+{
+	return ((((usqInt) (((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1))) >> 16) & 0x1F) == 7;
+}
 
+
 /*	Answer if obj is young. Require that obj is non-immediate. Override to
 	filter-out Cog methods
  */
@@ -38640,6 +38637,17 @@
 }
 
 
+/*	Beware, SmallInetger tags are 1 or 3. But SmallInteger's identityHash is
+	1. 
+ */
+
+sqInt
+smallIntegerTag(void)
+{
+	return 1;
+}
+
+
 /*	For the purposes of become: send selector to the cogit with obj1 and obj2
 	and answer the result. Undo forwarding for the selector. */
 
@@ -43969,12 +43977,6 @@
 	return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
-
 static sqInt
 classForClassTag(sqInt classIndex)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -44083,7 +44085,7 @@
 /*	1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
 /*	self basicNew classTablePageSize */
 
-static sqInt
+sqInt
 classTablePageSize(void)
 {
 	return 1 << 10;
@@ -44114,7 +44116,7 @@
 	method lookup cache.
  */
 
-static sqInt
+sqInt
 classTagForClass(sqInt classObj)
 {
     sqInt err;
@@ -45087,7 +45089,7 @@
 	memset(GIV(classTableBitmap), 0, requiredSize);
 }
 
-sqInt
+static sqInt
 ensureBehaviorHash(sqInt aBehavior)
 {
     sqInt err;
@@ -47343,7 +47345,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 5-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)

Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -657,7 +657,6 @@
 sqInt classExternalLibrary(void);
 sqInt classExternalStructure(void);
 sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
 static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
 sqInt classIndexMask(void);
 sqInt classIndexOf(sqInt objOop);
@@ -670,10 +669,10 @@
 sqInt classString(void);
 sqInt classTableMajorIndexShift(void);
 sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
 sqInt classTableRootObj(void);
 static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
 sqInt classUnsafeAlien(void);
 static void clearLeakMapAndMapAccessibleObjects(void);
 sqInt clone(sqInt objOop);
@@ -688,7 +687,7 @@
 static void eliminateAndFreeForwardersForPigCompact(void);
 static void emptyObjStack(sqInt objStack) NoDbgRegParms;
 static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
 static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
 static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
 static sqInt ephemeronFormat(void);
@@ -2071,7 +2070,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.848";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -23152,22 +23151,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -32511,12 +32501,6 @@
 	return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
-
 static sqInt
 classForClassTag(sqInt classIndex)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -32625,7 +32609,7 @@
 /*	1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
 /*	self basicNew classTablePageSize */
 
-static sqInt
+sqInt
 classTablePageSize(void)
 {
 	return 1 << 10;
@@ -32656,7 +32640,7 @@
 	method lookup cache.
  */
 
-static sqInt
+sqInt
 classTagForClass(sqInt classObj)
 {
     sqInt err;
@@ -33705,7 +33689,7 @@
 	memset(GIV(classTableBitmap), 0, requiredSize);
 }
 
-sqInt
+static sqInt
 ensureBehaviorHash(sqInt aBehavior)
 {
     sqInt err;
@@ -36004,7 +35988,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 5-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)

Modified: branches/Cog/nsspurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspurstacksrc/vm/interp.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -654,7 +654,6 @@
 sqInt classExternalLibrary(void);
 sqInt classExternalStructure(void);
 sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
 static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
 sqInt classIndexMask(void);
 sqInt classIndexOf(sqInt objOop);
@@ -667,10 +666,10 @@
 sqInt classString(void);
 sqInt classTableMajorIndexShift(void);
 sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
 sqInt classTableRootObj(void);
 static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
 sqInt classUnsafeAlien(void);
 static void clearLeakMapAndMapAccessibleObjects(void);
 sqInt clone(sqInt objOop);
@@ -685,7 +684,7 @@
 static void eliminateAndFreeForwardersForPigCompact(void);
 static void emptyObjStack(sqInt objStack) NoDbgRegParms;
 static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
 static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
 static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
 static sqInt ephemeronFormat(void);
@@ -2068,7 +2067,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.848";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -23143,22 +23142,13 @@
 		}
 	}
 	if (!GIV(primFailCode)) {
-		if (integerRcvr > 0) {
-			if (integerArg > 0) {
-				integerResult = integerRcvr / integerArg;
-			}
-			else {
-				integerResult = 0 - (integerRcvr / (0 - integerArg));
-			}
-		}
-		else {
-			if (integerArg > 0) {
-				integerResult = 0 - ((0 - integerRcvr) / integerArg);
-			}
-			else {
-				integerResult = (0 - integerRcvr) / (0 - integerArg);
-			}
-		}
+		integerResult = (integerRcvr > 0
+			? (integerArg > 0
+					? integerRcvr / integerArg
+					: 0 - (integerRcvr / (0 - integerArg)))
+			: (integerArg > 0
+					? 0 - ((0 - integerRcvr) / integerArg)
+					: (0 - integerRcvr) / (0 - integerArg)));
 	}
 	/* begin pop2AndPushIntegerIfOK: */
 	if (!GIV(primFailCode)) {
@@ -32502,12 +32492,6 @@
 	return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
 }
 
-sqInt
-classFloatCompactIndex(void)
-{
-	return ClassFloatCompactIndex;
-}
-
 static sqInt
 classForClassTag(sqInt classIndex)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -32616,7 +32600,7 @@
 /*	1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
 /*	self basicNew classTablePageSize */
 
-static sqInt
+sqInt
 classTablePageSize(void)
 {
 	return 1 << 10;
@@ -32647,7 +32631,7 @@
 	method lookup cache.
  */
 
-static sqInt
+sqInt
 classTagForClass(sqInt classObj)
 {
     sqInt err;
@@ -33696,7 +33680,7 @@
 	memset(GIV(classTableBitmap), 0, requiredSize);
 }
 
-sqInt
+static sqInt
 ensureBehaviorHash(sqInt aBehavior)
 {
     sqInt err;
@@ -35995,7 +35979,9 @@
 }
 
 
-/*	This is the same as the field stored in every object header */
+/*	This field in a class's format inst var corresponds to the 5-bit format
+	field stored in every object header
+ */
 
 static sqInt
 instSpecOfClass(sqInt classPointer)


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Wed Aug  6 17:34:23 PDT 2014
   + Thu Aug  7 08:19:00 PDT 2014

Modified: branches/Cog/scripts/uploadvms
===================================================================
--- branches/Cog/scripts/uploadvms	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/scripts/uploadvms	2014-08-07 15:22:32 UTC (rev 3061)
@@ -156,3 +156,5 @@
 ssh $RemoteUser chmod a-w $RemoteRoot/VM.r$REV/* \; ls -al $RemoteRoot/VM.r$REV
 
 test -x image/makegetvmscripts.sh && (image/makegetvmscripts.sh)
+
+test -x /usr/bin/pbcopy && pbcopy <../history/README.$REV

Modified: branches/Cog/sistasrc/vm/cogit.c
===================================================================
--- branches/Cog/sistasrc/vm/cogit.c	2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/sistasrc/vm/cogit.c	2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
    from
-	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
  */
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -134,6 +134,7 @@
 #define Call 9
 #define CDQ 111
 #define ClassArrayCompactIndex 3
+#define ClassFloatCompactIndex 6
 #define ClassMethodContextCompactIndex 14
 #define ClassReg -5
 #define ClassSmallInteger 5
@@ -815,6 +816,7 @@
 char * whereIsMaybeCodeThing(sqInt anOop);
 static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
 static sqInt createsClosuresInline(void);
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
 static sqInt genEnsureObjInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
 static sqInt genEnsureOopInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
 static sqInt genInnerPrimitiveAsCharacterinReg(sqInt retNOffset, sqInt reg) NoDbgRegParms;
@@ -828,8 +830,8 @@
 static void maybeCompileRetryonPrimitiveFail(AbstractInstruction *retryInst, sqInt primIndex) NoDbgRegParms;
 static sqInt allocateCounters(sqInt nCounters) NoDbgRegParms;
 static sqInt allYoungObjectsAgeInFullGC(void);
-static sqInt branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction *branches) NoDbgRegParms;
-static sqInt branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction *branches) NoDbgRegParms;
+static sqInt branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction **branches) NoDbgRegParms;
+static sqInt branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction **branches) NoDbgRegParms;
 static sqInt cacheTagIsMarked(sqInt cacheTag) NoDbgRegParms;
 static sqInt checkValidInlineCacheTag(sqInt cacheTag) NoDbgRegParms;
 static sqInt checkValidOopReference(sqInt anOop) NoDbgRegParms;
@@ -903,6 +905,7 @@
 static sqInt extendedStoreBytecode(void);
 static sqInt frameOffsetOfTemporary(sqInt index) NoDbgRegParms;
 static sqInt genBlockReturn(void);
+static sqInt genCallPrimitiveBytecode(void);
 static AbstractInstruction * genDoubleFailIfZeroArgRcvrarg(sqInt rcvrReg, sqInt argReg) NoDbgRegParms;
 static sqInt genExtendedSendBytecode(void);
 static sqInt genExtendedSuperBytecode(void);
@@ -15008,7 +15011,14 @@
 	return 0;
 }
 
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+	/* begin CmpCq:R: */
+	return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
 
+
 /*	Make sure that the object in reg is not forwarded. By default there is
 	nothing to do. Subclasses for memory managers that forward will override. */
 
@@ -15144,7 +15154,7 @@
 	generated. */
 
 static sqInt
-branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction *branches)
+branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction **branches)
 {
     sqInt allCompact;
     sqInt anImmediate;
@@ -15234,7 +15244,7 @@
  */
 
 static sqInt
-branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction *branches)
+branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction **branches)
 {
     sqInt compactClassIndex;
     AbstractInstruction *jmpImmediate;
@@ -15373,7 +15383,7 @@
     sqInt newFloatHeaderSansHash;
 
 	allocSize = BaseHeaderSize + (sizeof(double));
-	newFloatHeaderSansHash = ((((classFloatCompactIndex()) << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
+	newFloatHeaderSansHash = (((ClassFloatCompactIndex << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
 	/* begin MoveAw:R: */
 	address = freeStartAddress();
 	genoperandoperand(MoveAwR, address, resultReg);
@@ -17006,6 +17016,19 @@
 	return 0;
 }
 
+
+/*	SistaV1: 248		11111000 iiiiiiii		mjjjjjjj		Call Primitive #iiiiiiii +
+	(jjjjjjj * 256) m=1 means inlined primitive, no hard return after
+	execution. 
+ */
+/*	This makes sense only for the optimizing JITs */
+
+static sqInt
+genCallPrimitiveBytecode(void)
+{
+	return EncounteredUnknownBytecode;
+}
+
 static AbstractInstruction *
 genDoubleFailIfZeroArgRcvrarg(sqInt rcvrReg, sqInt argReg)
 {
@@ -18571,7 +18594,7 @@
 	numBranches = (isArrayNonImm(literal)
 		? (numSlotsOf(literal)) + 1
 		: 2);
-	branches = allocatype(numBranches, ((AbstractInstruction *) CogAbstractInstruction));
+	branches = allocatype(numBranches, AbstractInstruction *);
 
 	/* Only flush the stack if the class trap traps.  Use ssFlushNoUpdateTo: so we continue compiling as if
 	   the stack had not been flushed.  Control does not return after the ceClassTrapTrampoline call. */
@@ -20306,7 +20329,6 @@
     AbstractInstruction *jumpFailClass;
     AbstractInstruction *jumpImmediate;
     AbstractInstruction *jumpNonInt;
-    sqInt quickConstant;
 
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -20315,9 +20337,7 @@
 	genoperandoperand(MoveRR, Arg0Reg, ClassReg);
 	jumpImmediate = genJumpImmediateInScratchReg(TempReg);
 	genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
-	/* begin CmpCq:R: */
-	quickConstant = classFloatCompactIndex();
-	genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+	genCmpClassFloatCompactIndexR(SendNumArgsReg);
 	/* begin JumpNonZero: */

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list