[Vm-dev] [commit][3512] CogVM source as per VMMaker.oscog-eem.1543

commits at squeakvm.org commits at squeakvm.org
Wed Dec 2 20:56:41 UTC 2015


Revision: 3512
Author:   eliot
Date:     2015-12-02 12:56:33 -0800 (Wed, 02 Dec 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1543

Cogit:
Fix the regression caused by the incorrect fix for skipping the primitive and
primitive error code bytecodes.  Handle the skip in compileMethodBody.  Cache
methodHeader in an inst var; it's used enough.

Modified Paths:
--------------
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cogitARMv5.c
    branches/Cog/nsspursrc/vm/cogitIA32.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogitARMv5.c
    branches/Cog/spursistasrc/vm/cogitIA32.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogitARMv5.c
    branches/Cog/spursrc/vm/cogitIA32.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogitARMv5.c
    branches/Cog/src/vm/cogitIA32.c

Added Paths:
-----------
    branches/Cog/src/plugins/Squeak3D/
    branches/Cog/src/plugins/Squeak3D/Squeak3D.c

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

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/nsspursrc/vm/cogit.h	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -581,7 +581,7 @@
 static AbstractInstruction * NoDbgRegParms annotateBytecode(AbstractInstruction *abstractInstruction);
 static AbstractInstruction * NoDbgRegParms annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop);
 static void NoDbgRegParms assertSaneJumpTarget(AbstractInstruction *jumpTarget);
-static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt methodHeader);
+static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt aMethodHeader);
 static sqInt NoDbgRegParms blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg);
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 static AbstractInstruction * NoDbgRegParms CallNewspeakSend(sqInt callTarget);
@@ -965,7 +965,6 @@
 static sqInt NoDbgRegParms mustDumpLiterals(sqInt currentOpcodeIndex);
 static sqInt resetForBlockCompile(void);
 static sqInt saveForBlockCompile(void);
-static sqInt checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void);
 static sqInt compileBlockDispatch(void);
 static sqInt compileFallbackToInterpreterPrimitive(void);
 static void compileGetErrorCode(void);
@@ -1066,7 +1065,7 @@
 static sqInt genStoreAndPopTemporaryVariableBytecode(void);
 static sqInt genStoreRemoteTempLongBytecode(void);
 static void maybeCompileAllocFillerCheck(void);
-static sqInt NoDbgRegParms methodUsesPrimitiveErrorCode(sqInt methodHeader);
+static sqInt methodUsesPrimitiveErrorCode(void);
 static sqInt numSpecialSelectors(void);
 extern void recordCallOffsetIn(CogMethod *cogMethod);
 static sqInt NoDbgRegParms registerisInMask(sqInt reg, sqInt mask);
@@ -1862,6 +1861,7 @@
 static sqInt methodAbortTrampolines[4];
 static sqInt methodBytesFreedSinceLastCompaction;
 static sqInt methodCount;
+static sqInt methodHeader;
 static AbstractInstruction * const methodLabel = &aMethodLabel;
 static sqInt methodObj;
 static sqInt methodOrBlockNumArgs;
@@ -7877,9 +7877,9 @@
 
 	/* Cogit>>#blockCreationBytecodeSizeForHeader: */
 static sqInt NoDbgRegParms
-blockCreationBytecodeSizeForHeader(sqInt methodHeader)
+blockCreationBytecodeSizeForHeader(sqInt aMethodHeader)
 {
-	return (headerIndicatesAlternateBytecodeSet(methodHeader)
+	return (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 				? AltBlockCreationBytecodeSize
 				: BlockCreationBytecodeSize);
 }
@@ -7931,6 +7931,8 @@
 sqInt
 bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -7946,8 +7948,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc1;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -7969,8 +7969,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -7991,8 +7991,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -9361,6 +9361,7 @@
 	}
 	ensureNoForwardedLiteralsIn(aMethodObj);
 	methodObj = aMethodObj;
+	methodHeader = methodHeaderOf(aMethodObj);
 	cogMethod = compileCogMethod(aSelectorOop);
 	if ((((((sqInt)cogMethod)) >= MaxNegativeErrorCode) && ((((sqInt)cogMethod)) <= -1))) {
 		if ((((sqInt)cogMethod)) == InsufficientCodeSpace) {
@@ -9702,10 +9703,15 @@
 static sqInt
 compileMethodBody(void)
 {
+    sqInt deltaForPrimErrorCode;
+
 	if (endPC < initialPC) {
 		return 0;
 	}
-	return compileAbstractInstructionsFromthrough(initialPC, endPC);
+	deltaForPrimErrorCode = (methodUsesPrimitiveErrorCode()
+		? (sizeOfCallPrimitiveBytecode(methodHeader)) + (sizeOfLongStoreTempBytecode(methodHeader))
+		: 0);
+	return compileAbstractInstructionsFromthrough(initialPC + deltaForPrimErrorCode, endPC);
 }
 
 
@@ -10304,8 +10310,8 @@
 static CogMethod * NoDbgRegParms
 fillInMethodHeadersizeselector(CogMethod *method, sqInt size, sqInt selector)
 {
-    sqInt methodHeader;
     CogMethod *originalMethod;
+    sqInt rawHeader;
 
 	(method->cmType = CMMethod);
 	(method->objectHeader = nullHeaderForMachineCodeMethod());
@@ -10315,11 +10321,11 @@
 	/* If the method has already been cogged (e.g. Newspeak accessors) then
 	   leave the original method attached to its cog method, but get the right header. */
 
-	methodHeader = rawHeaderOf(methodObj);
-	if (isCogMethodReference(methodHeader)) {
-		originalMethod = ((CogMethod *) methodHeader);
+	rawHeader = rawHeaderOf(methodObj);
+	if (isCogMethodReference(rawHeader)) {
+		originalMethod = ((CogMethod *) rawHeader);
 		assert(((originalMethod->blockSize)) == size);
-		methodHeader = (originalMethod->methodHeader);
+		assert(methodHeader == ((originalMethod->methodHeader)));
 		addToUnpairedMethodList(method);
 
 	}
@@ -11040,12 +11046,12 @@
 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;
 
@@ -13417,6 +13423,8 @@
 usqInt
 mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc1;
@@ -13432,8 +13440,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -13455,8 +13461,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -13477,8 +13483,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc1 = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc1, aMethodObj)) + bsOffset;
@@ -21041,30 +21047,6 @@
 }
 
 
-/*	Answer if methodObj contains a quick primitive. In addition, if it has a
-	primitive that uses an error code, update the initialPC to skip this code.
-	The code to
-	process the error code is generated in compileFrameBuild. For fixups to
-	work correctly, the initialPC must be updated before scanning for backward
-	branches.  */
-
-	/* SimpleStackBasedCogit>>#checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed */
-static sqInt
-checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void)
-{
-    sqInt methodHeader;
-
-	if (primitiveIndex == 0) {
-		return 0;
-	}
-	methodHeader = methodHeaderOf(methodObj);
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
-		initialPC = (initialPC + (sizeOfCallPrimitiveBytecode(methodHeader))) + (sizeOfLongStoreTempBytecode(methodHeader));
-	}
-	return isQuickPrimitiveIndex(primitiveIndex);
-}
-
-
 /*	Compile the jump instruction(s) at the end of the method that dispatch to
 	each block body.
  */
@@ -22980,9 +22962,9 @@
 	code. 
  */
 
-	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode: */
-static sqInt NoDbgRegParms
-methodUsesPrimitiveErrorCode(sqInt methodHeader)
+	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode */
+static sqInt
+methodUsesPrimitiveErrorCode(void)
 {
 	return ((primitiveIndexOfMethodheader(methodObj, methodHeader)) > 0)
 	 && ((longStoreBytecodeForHeader(methodHeader)) == (fetchByteofObject(initialPC + (sizeOfCallPrimitiveBytecode(methodHeader)), methodObj)));
@@ -23920,7 +23902,6 @@
     sqInt i;
     sqInt iLimiT;
     AbstractInstruction *jumpSkip;
-    sqInt methodHeader;
 
 	if (!needsFrame) {
 		initSimStackForFramelessMethod(initialPC);
@@ -23930,7 +23911,6 @@
 	if (!needsFrame) {
 		return 0;
 	}
-	methodHeader = methodHeaderOf(methodObj);
 	/* begin PushR: */
 	genoperand(PushR, LinkReg);
 
@@ -23957,7 +23937,7 @@
 		/* begin PushR: */
 		genoperand(PushR, SendNumArgsReg);
 	}
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
+	if (methodUsesPrimitiveErrorCode()) {
 		compileGetErrorCode();
 	}
 	/* begin MoveAw:R: */
@@ -28586,7 +28566,8 @@
 
 #  endif /* NewspeakVM */
 
-	if (checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed()) {
+	if ((primitiveIndex > 0)
+	 && (isQuickPrimitiveIndex(primitiveIndex))) {
 		return 0;
 	}
 	pc = (latestContinuation = initialPC);

Modified: branches/Cog/nsspursrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitIA32.c	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/nsspursrc/vm/cogitIA32.c	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -519,7 +519,7 @@
 static AbstractInstruction * NoDbgRegParms annotateBytecode(AbstractInstruction *abstractInstruction);
 static AbstractInstruction * NoDbgRegParms annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop);
 static void NoDbgRegParms assertSaneJumpTarget(AbstractInstruction *jumpTarget);
-static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt methodHeader);
+static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt aMethodHeader);
 static sqInt NoDbgRegParms blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg);
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 static AbstractInstruction * NoDbgRegParms CallNewspeakSend(sqInt callTarget);
@@ -875,7 +875,6 @@
 static sqInt NoDbgRegParms registerOrNil(CogSimStackEntry * self_in_registerOrNil);
 static CogSimStackEntry * NoDbgRegParms storeToReg(CogSimStackEntry * self_in_storeToReg, sqInt reg);
 static sqInt endSizeOffset(void);
-static sqInt checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void);
 static sqInt compileBlockDispatch(void);
 static sqInt compileFallbackToInterpreterPrimitive(void);
 static void compileGetErrorCode(void);
@@ -976,7 +975,7 @@
 static sqInt genStoreAndPopTemporaryVariableBytecode(void);
 static sqInt genStoreRemoteTempLongBytecode(void);
 static void maybeCompileAllocFillerCheck(void);
-static sqInt NoDbgRegParms methodUsesPrimitiveErrorCode(sqInt methodHeader);
+static sqInt methodUsesPrimitiveErrorCode(void);
 static sqInt numSpecialSelectors(void);
 extern void recordCallOffsetIn(CogMethod *cogMethod);
 static sqInt NoDbgRegParms registerisInMask(sqInt reg, sqInt mask);
@@ -1768,6 +1767,7 @@
 static sqInt methodAbortTrampolines[4];
 static sqInt methodBytesFreedSinceLastCompaction;
 static sqInt methodCount;
+static sqInt methodHeader;
 static AbstractInstruction * const methodLabel = &aMethodLabel;
 static sqInt methodObj;
 static sqInt methodOrBlockNumArgs;
@@ -6979,9 +6979,9 @@
 
 	/* Cogit>>#blockCreationBytecodeSizeForHeader: */
 static sqInt NoDbgRegParms
-blockCreationBytecodeSizeForHeader(sqInt methodHeader)
+blockCreationBytecodeSizeForHeader(sqInt aMethodHeader)
 {
-	return (headerIndicatesAlternateBytecodeSet(methodHeader)
+	return (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 				? AltBlockCreationBytecodeSize
 				: BlockCreationBytecodeSize);
 }
@@ -7033,6 +7033,8 @@
 sqInt
 bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -7048,8 +7050,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc1;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -7071,8 +7071,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -7093,8 +7093,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -8468,6 +8468,7 @@
 	}
 	ensureNoForwardedLiteralsIn(aMethodObj);
 	methodObj = aMethodObj;
+	methodHeader = methodHeaderOf(aMethodObj);
 	cogMethod = compileCogMethod(aSelectorOop);
 	if ((((((sqInt)cogMethod)) >= MaxNegativeErrorCode) && ((((sqInt)cogMethod)) <= -1))) {
 		if ((((sqInt)cogMethod)) == InsufficientCodeSpace) {
@@ -8813,10 +8814,15 @@
 static sqInt
 compileMethodBody(void)
 {
+    sqInt deltaForPrimErrorCode;
+
 	if (endPC < initialPC) {
 		return 0;
 	}
-	return compileAbstractInstructionsFromthrough(initialPC, endPC);
+	deltaForPrimErrorCode = (methodUsesPrimitiveErrorCode()
+		? (sizeOfCallPrimitiveBytecode(methodHeader)) + (sizeOfLongStoreTempBytecode(methodHeader))
+		: 0);
+	return compileAbstractInstructionsFromthrough(initialPC + deltaForPrimErrorCode, endPC);
 }
 
 
@@ -9401,8 +9407,8 @@
 static CogMethod * NoDbgRegParms
 fillInMethodHeadersizeselector(CogMethod *method, sqInt size, sqInt selector)
 {
-    sqInt methodHeader;
     CogMethod *originalMethod;
+    sqInt rawHeader;
 
 	(method->cmType = CMMethod);
 	(method->objectHeader = nullHeaderForMachineCodeMethod());
@@ -9412,11 +9418,11 @@
 	/* If the method has already been cogged (e.g. Newspeak accessors) then
 	   leave the original method attached to its cog method, but get the right header. */
 
-	methodHeader = rawHeaderOf(methodObj);
-	if (isCogMethodReference(methodHeader)) {
-		originalMethod = ((CogMethod *) methodHeader);
+	rawHeader = rawHeaderOf(methodObj);
+	if (isCogMethodReference(rawHeader)) {
+		originalMethod = ((CogMethod *) rawHeader);
 		assert(((originalMethod->blockSize)) == size);
-		methodHeader = (originalMethod->methodHeader);
+		assert(methodHeader == ((originalMethod->methodHeader)));
 		addToUnpairedMethodList(method);
 
 	}
@@ -12542,6 +12548,8 @@
 usqInt
 mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc1;
@@ -12557,8 +12565,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -12580,8 +12586,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -12602,8 +12608,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc1 = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc1, aMethodObj)) + bsOffset;
@@ -20221,30 +20227,6 @@
 }
 
 
-/*	Answer if methodObj contains a quick primitive. In addition, if it has a
-	primitive that uses an error code, update the initialPC to skip this code.
-	The code to
-	process the error code is generated in compileFrameBuild. For fixups to
-	work correctly, the initialPC must be updated before scanning for backward
-	branches.  */
-
-	/* SimpleStackBasedCogit>>#checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed */
-static sqInt
-checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void)
-{
-    sqInt methodHeader;
-
-	if (primitiveIndex == 0) {
-		return 0;
-	}
-	methodHeader = methodHeaderOf(methodObj);
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
-		initialPC = (initialPC + (sizeOfCallPrimitiveBytecode(methodHeader))) + (sizeOfLongStoreTempBytecode(methodHeader));
-	}
-	return isQuickPrimitiveIndex(primitiveIndex);
-}
-
-
 /*	Compile the jump instruction(s) at the end of the method that dispatch to
 	each block body.
  */
@@ -22449,9 +22431,9 @@
 	code. 
  */
 
-	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode: */
-static sqInt NoDbgRegParms
-methodUsesPrimitiveErrorCode(sqInt methodHeader)
+	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode */
+static sqInt
+methodUsesPrimitiveErrorCode(void)
 {
 	return ((primitiveIndexOfMethodheader(methodObj, methodHeader)) > 0)
 	 && ((longStoreBytecodeForHeader(methodHeader)) == (fetchByteofObject(initialPC + (sizeOfCallPrimitiveBytecode(methodHeader)), methodObj)));
@@ -23417,7 +23399,6 @@
     sqInt i;
     sqInt iLimiT;
     AbstractInstruction *jumpSkip;
-    sqInt methodHeader;
 
 	if (!needsFrame) {
 		initSimStackForFramelessMethod(initialPC);
@@ -23427,7 +23408,6 @@
 	if (!needsFrame) {
 		return 0;
 	}
-	methodHeader = methodHeaderOf(methodObj);
 	
 	/* begin PushR: */
 	genoperand(PushR, FPReg);
@@ -23454,7 +23434,7 @@
 		/* begin PushR: */
 		genoperand(PushR, SendNumArgsReg);
 	}
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
+	if (methodUsesPrimitiveErrorCode()) {
 		compileGetErrorCode();
 	}
 	/* begin MoveAw:R: */
@@ -28385,7 +28365,8 @@
 
 #  endif /* NewspeakVM */
 
-	if (checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed()) {
+	if ((primitiveIndex > 0)
+	 && (isQuickPrimitiveIndex(primitiveIndex))) {
 		return 0;
 	}
 	pc = (latestContinuation = initialPC);


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Wed Dec  2 10:25:49 PST 2015
   + Wed Dec  2 12:52:07 PST 2015

Modified: branches/Cog/spursistasrc/vm/cogit.h
===================================================================
--- branches/Cog/spursistasrc/vm/cogit.h	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/spursistasrc/vm/cogit.h	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
 
 

Modified: branches/Cog/spursistasrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/spursistasrc/vm/cogitARMv5.c	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/spursistasrc/vm/cogitARMv5.c	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
    from
-	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -576,7 +576,7 @@
 static AbstractInstruction * NoDbgRegParms annotateBytecode(AbstractInstruction *abstractInstruction);
 static AbstractInstruction * NoDbgRegParms annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop);
 static void NoDbgRegParms assertSaneJumpTarget(AbstractInstruction *jumpTarget);
-static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt methodHeader);
+static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt aMethodHeader);
 static sqInt NoDbgRegParms blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg);
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 static AbstractInstruction * NoDbgRegParms CallRT(sqInt callTarget);
@@ -957,7 +957,6 @@
 static sqInt NoDbgRegParms literalInstructionInRange(AbstractInstruction *litInst);
 static AbstractInstruction * NoDbgRegParms locateLiteral(sqInt aLiteral);
 static sqInt NoDbgRegParms mustDumpLiterals(sqInt currentOpcodeIndex);
-static sqInt checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void);
 static sqInt compileBlockDispatch(void);
 static sqInt compileFallbackToInterpreterPrimitive(void);
 static void compileGetErrorCode(void);
@@ -1049,7 +1048,7 @@
 static sqInt genStoreAndPopTemporaryVariableBytecode(void);
 static sqInt genStoreRemoteTempLongBytecode(void);
 static void maybeCompileAllocFillerCheck(void);
-static sqInt NoDbgRegParms methodUsesPrimitiveErrorCode(sqInt methodHeader);
+static sqInt methodUsesPrimitiveErrorCode(void);
 static sqInt numSpecialSelectors(void);
 extern void recordCallOffsetIn(CogMethod *cogMethod);
 static sqInt NoDbgRegParms registerisInMask(sqInt reg, sqInt mask);
@@ -1861,6 +1860,7 @@
 static sqInt methodAbortTrampolines[4];
 static sqInt methodBytesFreedSinceLastCompaction;
 static sqInt methodCount;
+static sqInt methodHeader;
 static AbstractInstruction * const methodLabel = &aMethodLabel;
 static sqInt methodObj;
 static sqInt methodOrBlockNumArgs;
@@ -7883,9 +7883,9 @@
 
 	/* Cogit>>#blockCreationBytecodeSizeForHeader: */
 static sqInt NoDbgRegParms
-blockCreationBytecodeSizeForHeader(sqInt methodHeader)
+blockCreationBytecodeSizeForHeader(sqInt aMethodHeader)
 {
-	return (headerIndicatesAlternateBytecodeSet(methodHeader)
+	return (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 				? AltBlockCreationBytecodeSize
 				: BlockCreationBytecodeSize);
 }
@@ -7937,6 +7937,8 @@
 sqInt
 bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -7952,8 +7954,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc1;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -7975,8 +7975,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -7997,8 +7997,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -9276,6 +9276,7 @@
 	}
 	ensureNoForwardedLiteralsIn(aMethodObj);
 	methodObj = aMethodObj;
+	methodHeader = methodHeaderOf(aMethodObj);
 	cogMethod = compileCogMethod(aSelectorOop);
 	if ((((((sqInt)cogMethod)) >= MaxNegativeErrorCode) && ((((sqInt)cogMethod)) <= -1))) {
 		if ((((sqInt)cogMethod)) == InsufficientCodeSpace) {
@@ -9623,10 +9624,15 @@
 static sqInt
 compileMethodBody(void)
 {
+    sqInt deltaForPrimErrorCode;
+
 	if (endPC < initialPC) {
 		return 0;
 	}
-	return compileAbstractInstructionsFromthrough(initialPC, endPC);
+	deltaForPrimErrorCode = (methodUsesPrimitiveErrorCode()
+		? (sizeOfCallPrimitiveBytecode(methodHeader)) + (sizeOfLongStoreTempBytecode(methodHeader))
+		: 0);
+	return compileAbstractInstructionsFromthrough(initialPC + deltaForPrimErrorCode, endPC);
 }
 
 
@@ -10907,12 +10913,12 @@
 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;
 
@@ -13035,6 +13041,8 @@
 usqInt
 mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc1;
@@ -13050,8 +13058,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -13073,8 +13079,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -13095,8 +13101,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc1 = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc1, aMethodObj)) + bsOffset;
@@ -20131,30 +20137,6 @@
 }
 
 
-/*	Answer if methodObj contains a quick primitive. In addition, if it has a
-	primitive that uses an error code, update the initialPC to skip this code.
-	The code to
-	process the error code is generated in compileFrameBuild. For fixups to
-	work correctly, the initialPC must be updated before scanning for backward
-	branches.  */
-
-	/* SimpleStackBasedCogit>>#checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed */
-static sqInt
-checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void)
-{
-    sqInt methodHeader;
-
-	if (primitiveIndex == 0) {
-		return 0;
-	}
-	methodHeader = methodHeaderOf(methodObj);
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
-		initialPC = (initialPC + (sizeOfCallPrimitiveBytecode(methodHeader))) + (sizeOfLongStoreTempBytecode(methodHeader));
-	}
-	return isQuickPrimitiveIndex(primitiveIndex);
-}
-
-
 /*	Compile the jump instruction(s) at the end of the method that dispatch to
 	each block body.
  */
@@ -21942,9 +21924,9 @@
 	code. 
  */
 
-	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode: */
-static sqInt NoDbgRegParms
-methodUsesPrimitiveErrorCode(sqInt methodHeader)
+	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode */
+static sqInt
+methodUsesPrimitiveErrorCode(void)
 {
 	return ((primitiveIndexOfMethodheader(methodObj, methodHeader)) > 0)
 	 && ((longStoreBytecodeForHeader(methodHeader)) == (fetchByteofObject(initialPC + (sizeOfCallPrimitiveBytecode(methodHeader)), methodObj)));
@@ -22456,7 +22438,6 @@
     sqInt i;
     sqInt iLimiT;
     AbstractInstruction *jumpSkip;
-    sqInt methodHeader;
 
 	if (!needsFrame) {
 		initSimStackForFramelessMethod(initialPC);
@@ -22466,7 +22447,6 @@
 	if (!needsFrame) {
 		return 0;
 	}
-	methodHeader = methodHeaderOf(methodObj);
 	/* begin PushR: */
 	genoperand(PushR, LinkReg);
 
@@ -22493,7 +22473,7 @@
 		/* begin PushR: */
 		genoperand(PushR, SendNumArgsReg);
 	}
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
+	if (methodUsesPrimitiveErrorCode()) {
 		compileGetErrorCode();
 	}
 	/* begin MoveAw:R: */
@@ -22554,8 +22534,8 @@
 static CogMethod * NoDbgRegParms
 fillInMethodHeadersizeselector(CogMethod *method, sqInt size, sqInt selector)
 {
-    sqInt methodHeader;
     CogMethod *originalMethod;
+    sqInt rawHeader;
 
 	(method->cmType = CMMethod);
 	(method->objectHeader = nullHeaderForMachineCodeMethod());
@@ -22565,11 +22545,11 @@
 	/* If the method has already been cogged (e.g. Newspeak accessors) then
 	   leave the original method attached to its cog method, but get the right header. */
 
-	methodHeader = rawHeaderOf(methodObj);
-	if (isCogMethodReference(methodHeader)) {
-		originalMethod = ((CogMethod *) methodHeader);
+	rawHeader = rawHeaderOf(methodObj);
+	if (isCogMethodReference(rawHeader)) {
+		originalMethod = ((CogMethod *) rawHeader);
 		assert(((originalMethod->blockSize)) == size);
-		methodHeader = (originalMethod->methodHeader);
+		assert(methodHeader == ((originalMethod->methodHeader)));
 		
 	}
 	else {
@@ -23910,6 +23890,8 @@
 static usqInt NoDbgRegParms
 picDataForBlockEntryMethod(sqInt blockEntryMcpc, sqInt cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -23925,8 +23907,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -23955,8 +23935,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -23978,8 +23958,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -24226,6 +24206,8 @@
 sqInt
 picDataForinto(CogMethod *cogMethod, sqInt arrayObj)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -24242,8 +24224,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -24274,8 +24254,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -24297,8 +24277,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -24482,7 +24462,8 @@
 
 #  endif /* NewspeakVM */
 
-	if (checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed()) {
+	if ((primitiveIndex > 0)
+	 && (isQuickPrimitiveIndex(primitiveIndex))) {
 		return 0;
 	}
 	pc = (latestContinuation = initialPC);

Modified: branches/Cog/spursistasrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/spursistasrc/vm/cogitIA32.c	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/spursistasrc/vm/cogitIA32.c	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
    from
-	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -513,7 +513,7 @@
 static AbstractInstruction * NoDbgRegParms annotateBytecode(AbstractInstruction *abstractInstruction);
 static AbstractInstruction * NoDbgRegParms annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop);
 static void NoDbgRegParms assertSaneJumpTarget(AbstractInstruction *jumpTarget);
-static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt methodHeader);
+static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt aMethodHeader);
 static sqInt NoDbgRegParms blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg);
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 static AbstractInstruction * NoDbgRegParms CallRT(sqInt callTarget);
@@ -868,7 +868,6 @@
 static sqInt NoDbgRegParms registerOrNil(CogSimStackEntry * self_in_registerOrNil);
 static CogSimStackEntry * NoDbgRegParms storeToReg(CogSimStackEntry * self_in_storeToReg, sqInt reg);
 static sqInt endSizeOffset(void);
-static sqInt checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void);
 static sqInt compileBlockDispatch(void);
 static sqInt compileFallbackToInterpreterPrimitive(void);
 static void compileGetErrorCode(void);
@@ -960,7 +959,7 @@
 static sqInt genStoreAndPopTemporaryVariableBytecode(void);
 static sqInt genStoreRemoteTempLongBytecode(void);
 static void maybeCompileAllocFillerCheck(void);
-static sqInt NoDbgRegParms methodUsesPrimitiveErrorCode(sqInt methodHeader);
+static sqInt methodUsesPrimitiveErrorCode(void);
 static sqInt numSpecialSelectors(void);
 extern void recordCallOffsetIn(CogMethod *cogMethod);
 static sqInt NoDbgRegParms registerisInMask(sqInt reg, sqInt mask);
@@ -1768,6 +1767,7 @@
 static sqInt methodAbortTrampolines[4];
 static sqInt methodBytesFreedSinceLastCompaction;
 static sqInt methodCount;
+static sqInt methodHeader;
 static AbstractInstruction * const methodLabel = &aMethodLabel;
 static sqInt methodObj;
 static sqInt methodOrBlockNumArgs;
@@ -6979,9 +6979,9 @@
 
 	/* Cogit>>#blockCreationBytecodeSizeForHeader: */
 static sqInt NoDbgRegParms
-blockCreationBytecodeSizeForHeader(sqInt methodHeader)
+blockCreationBytecodeSizeForHeader(sqInt aMethodHeader)
 {
-	return (headerIndicatesAlternateBytecodeSet(methodHeader)
+	return (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 				? AltBlockCreationBytecodeSize
 				: BlockCreationBytecodeSize);
 }
@@ -7033,6 +7033,8 @@
 sqInt
 bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -7048,8 +7050,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc1;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -7071,8 +7071,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -7093,8 +7093,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -8377,6 +8377,7 @@
 	}
 	ensureNoForwardedLiteralsIn(aMethodObj);
 	methodObj = aMethodObj;
+	methodHeader = methodHeaderOf(aMethodObj);
 	cogMethod = compileCogMethod(aSelectorOop);
 	if ((((((sqInt)cogMethod)) >= MaxNegativeErrorCode) && ((((sqInt)cogMethod)) <= -1))) {
 		if ((((sqInt)cogMethod)) == InsufficientCodeSpace) {
@@ -8728,10 +8729,15 @@
 static sqInt
 compileMethodBody(void)
 {
+    sqInt deltaForPrimErrorCode;
+
 	if (endPC < initialPC) {
 		return 0;
 	}
-	return compileAbstractInstructionsFromthrough(initialPC, endPC);
+	deltaForPrimErrorCode = (methodUsesPrimitiveErrorCode()
+		? (sizeOfCallPrimitiveBytecode(methodHeader)) + (sizeOfLongStoreTempBytecode(methodHeader))
+		: 0);
+	return compileAbstractInstructionsFromthrough(initialPC + deltaForPrimErrorCode, endPC);
 }
 
 
@@ -12130,6 +12136,8 @@
 usqInt
 mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc1;
@@ -12145,8 +12153,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -12168,8 +12174,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -12190,8 +12196,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc1 = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc1, aMethodObj)) + bsOffset;
@@ -19166,30 +19172,6 @@
 }
 
 
-/*	Answer if methodObj contains a quick primitive. In addition, if it has a
-	primitive that uses an error code, update the initialPC to skip this code.
-	The code to
-	process the error code is generated in compileFrameBuild. For fixups to
-	work correctly, the initialPC must be updated before scanning for backward
-	branches.  */
-
-	/* SimpleStackBasedCogit>>#checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed */
-static sqInt
-checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void)
-{
-    sqInt methodHeader;
-
-	if (primitiveIndex == 0) {
-		return 0;
-	}
-	methodHeader = methodHeaderOf(methodObj);
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
-		initialPC = (initialPC + (sizeOfCallPrimitiveBytecode(methodHeader))) + (sizeOfLongStoreTempBytecode(methodHeader));
-	}
-	return isQuickPrimitiveIndex(primitiveIndex);
-}
-
-
 /*	Compile the jump instruction(s) at the end of the method that dispatch to
 	each block body.
  */
@@ -21265,9 +21247,9 @@
 	code. 
  */
 
-	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode: */
-static sqInt NoDbgRegParms
-methodUsesPrimitiveErrorCode(sqInt methodHeader)
+	/* SimpleStackBasedCogit>>#methodUsesPrimitiveErrorCode */
+static sqInt
+methodUsesPrimitiveErrorCode(void)
 {
 	return ((primitiveIndexOfMethodheader(methodObj, methodHeader)) > 0)
 	 && ((longStoreBytecodeForHeader(methodHeader)) == (fetchByteofObject(initialPC + (sizeOfCallPrimitiveBytecode(methodHeader)), methodObj)));
@@ -21784,7 +21766,6 @@
     sqInt i;
     sqInt iLimiT;
     AbstractInstruction *jumpSkip;
-    sqInt methodHeader;
 
 	if (!needsFrame) {
 		initSimStackForFramelessMethod(initialPC);
@@ -21794,7 +21775,6 @@
 	if (!needsFrame) {
 		return 0;
 	}
-	methodHeader = methodHeaderOf(methodObj);
 	
 	/* begin PushR: */
 	genoperand(PushR, FPReg);
@@ -21821,7 +21801,7 @@
 		/* begin PushR: */
 		genoperand(PushR, SendNumArgsReg);
 	}
-	if (methodUsesPrimitiveErrorCode(methodHeader)) {
+	if (methodUsesPrimitiveErrorCode()) {
 		compileGetErrorCode();
 	}
 	/* begin MoveAw:R: */
@@ -21890,8 +21870,8 @@
 static CogMethod * NoDbgRegParms
 fillInMethodHeadersizeselector(CogMethod *method, sqInt size, sqInt selector)
 {
-    sqInt methodHeader;
     CogMethod *originalMethod;
+    sqInt rawHeader;
 
 	(method->cmType = CMMethod);
 	(method->objectHeader = nullHeaderForMachineCodeMethod());
@@ -21901,11 +21881,11 @@
 	/* If the method has already been cogged (e.g. Newspeak accessors) then
 	   leave the original method attached to its cog method, but get the right header. */
 
-	methodHeader = rawHeaderOf(methodObj);
-	if (isCogMethodReference(methodHeader)) {
-		originalMethod = ((CogMethod *) methodHeader);
+	rawHeader = rawHeaderOf(methodObj);
+	if (isCogMethodReference(rawHeader)) {
+		originalMethod = ((CogMethod *) rawHeader);
 		assert(((originalMethod->blockSize)) == size);
-		methodHeader = (originalMethod->methodHeader);
+		assert(methodHeader == ((originalMethod->methodHeader)));
 		
 	}
 	else {
@@ -23374,6 +23354,8 @@
 static usqInt NoDbgRegParms
 picDataForBlockEntryMethod(sqInt blockEntryMcpc, sqInt cogMethod)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -23389,8 +23371,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -23419,8 +23399,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -23442,8 +23422,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -23690,6 +23670,8 @@
 sqInt
 picDataForinto(CogMethod *cogMethod, sqInt arrayObj)
 {
+    sqInt aMethodHeader;
+    sqInt aMethodHeader1;
     sqInt aMethodObj;
     sqInt annotation;
     sqInt bcpc;
@@ -23706,8 +23688,6 @@
     sqInt map;
     sqInt mapByte;
     usqInt mcpc;
-    sqInt methodHeader;
-    sqInt methodHeader1;
     sqInt nExts;
     sqInt nextBcpc;
     sqInt result;
@@ -23738,8 +23718,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		endbcpc = (numBytesOf(aMethodObj)) - 1;
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader)
+		aMethodHeader = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader)
 						? 256
 						: 0);
 	}
@@ -23761,8 +23741,8 @@
 		aMethodObj = (homeMethod->methodObject);
 		bcpc = startbcpc - (blockCreationBytecodeSizeForHeader((homeMethod->methodHeader)));
 		/* begin bytecodeSetOffsetForHeader: */
-		methodHeader1 = (homeMethod->methodHeader);
-		bsOffset = (headerIndicatesAlternateBytecodeSet(methodHeader1)
+		aMethodHeader1 = (homeMethod->methodHeader);
+		bsOffset = (headerIndicatesAlternateBytecodeSet(aMethodHeader1)
 						? 256
 						: 0);
 		byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
@@ -23946,7 +23926,8 @@
 
 #  endif /* NewspeakVM */
 
-	if (checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed()) {
+	if ((primitiveIndex > 0)
+	 && (isQuickPrimitiveIndex(primitiveIndex))) {
 		return 0;
 	}
 	pc = (latestContinuation = initialPC);

Modified: branches/Cog/spursrc/vm/cogit.h
===================================================================
--- branches/Cog/spursrc/vm/cogit.h	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/spursrc/vm/cogit.h	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
 
 

Modified: branches/Cog/spursrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/spursrc/vm/cogitARMv5.c	2015-12-02 18:26:38 UTC (rev 3511)
+++ branches/Cog/spursrc/vm/cogitARMv5.c	2015-12-02 20:56:33 UTC (rev 3512)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	CCodeGenerator VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1539 uuid: 7d957563-4269-4950-9f7d-3d2dde2ac18d " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1543 uuid: 7ab33230-086d-4b21-a335-26f16100a3b4 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -572,7 +572,7 @@
 static AbstractInstruction * NoDbgRegParms annotateBytecode(AbstractInstruction *abstractInstruction);
 static AbstractInstruction * NoDbgRegParms annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop);
 static void NoDbgRegParms assertSaneJumpTarget(AbstractInstruction *jumpTarget);
-static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt methodHeader);
+static sqInt NoDbgRegParms blockCreationBytecodeSizeForHeader(sqInt aMethodHeader);
 static sqInt NoDbgRegParms blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg);
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 static AbstractInstruction * NoDbgRegParms CallRTregistersToBeSavedMask(sqInt callTarget, sqInt registersToBeSaved);
@@ -942,7 +942,6 @@
 static sqInt NoDbgRegParms mustDumpLiterals(sqInt currentOpcodeIndex);
 static sqInt resetForBlockCompile(void);
 static sqInt saveForBlockCompile(void);
-static sqInt checkForQuickPrimitiveAdjustingIntialPCIfErrorCodeUsed(void);
 static sqInt compileBlockDispatch(void);
 static sqInt compileFallbackToInterpreterPrimitive(void);
 static void compileGetErrorCode(void);
@@ -1012,7 +1011,7 @@
 static sqInt genStoreAndPopTemporaryVariableBytecode(void);
 static sqInt genStoreRemoteTempLongBytecode(void);
 static void maybeCompileAllocFillerCheck(void);
-static sqInt NoDbgRegParms methodUsesPrimitiveErrorCode(sqInt methodHeader);
+static sqInt methodUsesPrimitiveErrorCode(void);
 static sqInt numSpecialSelectors(void);
 extern void recordCallOffsetIn(CogMethod *cogMethod);
 static sqInt NoDbgRegParms registerisInMask(sqInt reg, sqInt mask);

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list