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. @@
vm-dev@lists.squeakfoundation.org