[Vm-dev] [commit][3061] CogVM source as per VMMaker.oscog-eem.848
commits at squeakvm.org
commits at squeakvm.org
Thu Aug 7 15:22:33 UTC 2014
Revision: 3061
Author: eliot
Date: 2014-08-07 08:22:32 -0700 (Thu, 07 Aug 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.848
Sista:
Implement ceClassTrap.
Fix argument access in inlinePrimitiveBytecode:. Refactor
primitiveQuo to share code with inlinePrimitiveBytecode:.
Provide a dummy genCallPrimitiveBytecode for now.
Cogits:
Implement genExtTrapIfNotInstanceOfBehaviorsBytecode for 32 bit Spur. Fix
argument branches type & alloca in genExtTrapIfNotInstanceOfBehaviorsBytecode.
Eliminate classFloatCompactIndex and just use ClassFloatCompactIndex directly.
Fix comment typos and miscategorizations.
Copy the readme to the paste buffer on Mac OS X in uploadvms
Modified Paths:
--------------
branches/Cog/nscogsrc/vm/cogit.c
branches/Cog/nscogsrc/vm/cogit.h
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nsspursrc/vm/cogit.c
branches/Cog/nsspursrc/vm/cogit.h
branches/Cog/nsspursrc/vm/cointerp.c
branches/Cog/nsspursrc/vm/cointerp.h
branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
branches/Cog/nsspurstacksrc/vm/interp.c
branches/Cog/scripts/uploadvms
branches/Cog/sistasrc/vm/cogit.c
branches/Cog/sistasrc/vm/cogit.h
branches/Cog/sistasrc/vm/cointerp.c
branches/Cog/sistasrc/vm/cointerp.h
branches/Cog/sistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursistasrc/vm/cogit.c
branches/Cog/spursistasrc/vm/cogit.h
branches/Cog/spursistasrc/vm/cointerp.c
branches/Cog/spursistasrc/vm/cointerp.h
branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursrc/vm/cogit.c
branches/Cog/spursrc/vm/cogit.h
branches/Cog/spursrc/vm/cointerp.c
branches/Cog/spursrc/vm/cointerp.h
branches/Cog/spursrc/vm/gcc3x-cointerp.c
branches/Cog/spurstacksrc/vm/gcc3x-interp.c
branches/Cog/spurstacksrc/vm/interp.c
branches/Cog/src/vm/cogit.c
branches/Cog/src/vm/cogit.h
branches/Cog/src/vm/cointerp.c
branches/Cog/src/vm/cointerp.h
branches/Cog/src/vm/cointerpmt.c
branches/Cog/src/vm/cointerpmt.h
branches/Cog/src/vm/gcc3x-cointerp.c
branches/Cog/src/vm/gcc3x-cointerpmt.c
branches/Cog/src/vm/interp.h
branches/Cog/stacksrc/vm/gcc3x-interp.c
branches/Cog/stacksrc/vm/interp.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cogit.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+ CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+ StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -133,6 +133,7 @@
#define BlockCreationBytecodeSize 4
#define Call 9
#define CDQ 111
+#define ClassFloatCompactIndex 6
#define ClassMethodContextCompactIndex 14
#define ClassReg -5
#define ClosureFirstCopiedValueIndex 3
@@ -823,6 +824,7 @@
char * whereIsMaybeCodeThing(sqInt anOop);
static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
static sqInt createsClosuresInline(void);
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
static sqInt genEnsureObjInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
static sqInt genEnsureOopInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
static sqInt genInnerPrimitiveAsCharacterinReg(sqInt retNOffset, sqInt reg) NoDbgRegParms;
@@ -15581,7 +15583,14 @@
return 0;
}
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+ /* begin CmpCq:R: */
+ return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
+
/* Make sure that the object in reg is not forwarded. By default there is
nothing to do. Subclasses for memory managers that forward will override. */
@@ -15804,7 +15813,7 @@
sqInt newFloatHeaderSansHash;
allocSize = BaseHeaderSize + (sizeof(double));
- newFloatHeaderSansHash = ((((classFloatCompactIndex()) << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
+ newFloatHeaderSansHash = (((ClassFloatCompactIndex << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
/* begin MoveAw:R: */
address = freeStartAddress();
genoperandoperand(MoveAwR, address, resultReg);
@@ -19597,7 +19606,6 @@
AbstractInstruction *jumpFailClass;
AbstractInstruction *jumpImmediate;
AbstractInstruction *jumpNonInt;
- sqInt quickConstant;
/* begin MoveR:R: */
genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -19606,9 +19614,7 @@
genoperandoperand(MoveRR, Arg0Reg, ClassReg);
jumpImmediate = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFailClass = genoperand(JumpNonZero, ((sqInt)0));
genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -19658,16 +19664,13 @@
AbstractInstruction *jumpFail;
AbstractInstruction *jumpImmediate;
AbstractInstruction *jumpNonInt;
- sqInt quickConstant;
/* begin MoveR:R: */
genoperandoperand(MoveRR, Arg0Reg, TempReg);
genGetDoubleValueOfinto(ReceiverResultReg, DPFPReg0);
jumpImmediate = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFail = genoperand(JumpNonZero, ((sqInt)0));
genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -21290,7 +21293,6 @@
AbstractInstruction *jumpFail;
AbstractInstruction *jumpNonInt;
AbstractInstruction *jumpTrue;
- sqInt quickConstant;
if (!(hasDoublePrecisionFloatingPointSupport(backEnd))) {
return genSmallIntegerComparison(jumpOpcode);
@@ -21310,9 +21312,7 @@
jmpTarget(jumpDouble, gLabel());
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFail = genoperand(JumpNonZero, ((sqInt)0));
genConvertSmallIntegerToIntegerInReg(ReceiverResultReg);
Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cogit.h 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.842 uuid: 1355259a-aa6e-48eb-8348-f0890328e7a6
+ CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -808,7 +808,6 @@
sqInt characterValueOf(sqInt oop);
static sqInt checkHeapIntegrity(void);
sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
sqInt clone(sqInt obj);
static sqInt defaultEdenBytes(void);
static sqInt eeInstantiateAndInitializeClassindexableSize(sqInt classPointer, sqInt size) NoDbgRegParms;
@@ -2083,7 +2082,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -4877,6 +4876,7 @@
GIV(framePointer) = localFP;
ceEnterCogCodePopReceiverReg();
+ null;
goto l303;
}
localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -4894,7 +4894,7 @@
/* begin fetchNextBytecode */
currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- /* return self */
+ null;
l303: /* end baseFrameReturn */;
goto l302;
}
@@ -31097,22 +31097,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -35616,13 +35607,7 @@
return 1;
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
/* Return a shallow copy of the given object. May cause GC.
Assume: Oop is a real object, not a small integer.
Override to assert it's not a married context and maybe fix cloned
@@ -41189,7 +41174,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 4-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
@@ -52832,7 +52819,7 @@
index = longAt(GIV(stackPointer) + (1 * BytesPerWord));
aContext = longAt(GIV(stackPointer) + (2 * BytesPerWord));
if (!((index & 1))) {
- (GIV(primFailCode) = PrimErrBadArgument);
+ GIV(primFailCode) = PrimErrBadArgument;
return;
}
hdr = longAt(aContext);
@@ -53016,7 +53003,7 @@
stSize = (sp1 >> 1);
l2: /* end fetchStackPointerOf: */;
if (!(((index >= 1) && (index <= stSize)))) {
- (GIV(primFailCode) = PrimErrBadIndex);
+ GIV(primFailCode) = PrimErrBadIndex;
return;
}
/* begin subscript:with:storing:format: */
@@ -53062,7 +53049,7 @@
assert((senderOop & 1));
spouseFP = pointerForOop(senderOop - 1);
if (!(((index >= 1) && (index <= (stackPointerIndexForFrame(spouseFP)))))) {
- (GIV(primFailCode) = PrimErrBadIndex);
+ GIV(primFailCode) = PrimErrBadIndex;
return;
}
if ((((usqInt)(longAt(spouseFP + FoxMethod)))) < (startOfMemory())) {
@@ -54267,7 +54254,7 @@
assert(pageListIsWellFormed());
if (GIV(fullGCLock) > 0) {
- (GIV(primFailCode) = PrimErrInappropriate);
+ GIV(primFailCode) = PrimErrInappropriate;
return;
}
incrementalGC();
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
@@ -127,7 +127,6 @@
sqInt addressCouldBeObj(sqInt address);
sqInt characterValueOf(sqInt oop);
sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
sqInt eeInstantiateClassIndexformatnumSlots(sqInt compactClassIndex, sqInt objFormat, sqInt numSlots);
sqInt eeInstantiateClassindexableSize(sqInt classPointer, sqInt size);
void findStringBeginningWith(char *aCString);
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -811,7 +811,6 @@
sqInt characterValueOf(sqInt oop);
static sqInt checkHeapIntegrity(void);
sqInt checkOkayOop(usqInt oop);
-sqInt classFloatCompactIndex(void);
sqInt clone(sqInt obj);
static sqInt defaultEdenBytes(void);
static sqInt eeInstantiateAndInitializeClassindexableSize(sqInt classPointer, sqInt size) NoDbgRegParms;
@@ -2086,7 +2085,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -4886,6 +4885,7 @@
GIV(framePointer) = localFP;
ceEnterCogCodePopReceiverReg();
+ null;
goto l303;
}
localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -4903,7 +4903,7 @@
/* begin fetchNextBytecode */
currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- /* return self */
+ null;
l303: /* end baseFrameReturn */;
goto l302;
}
@@ -31106,22 +31106,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -35625,13 +35616,7 @@
return 1;
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
/* Return a shallow copy of the given object. May cause GC.
Assume: Oop is a real object, not a small integer.
Override to assert it's not a married context and maybe fix cloned
@@ -41198,7 +41183,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 4-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
@@ -52841,7 +52828,7 @@
index = longAt(GIV(stackPointer) + (1 * BytesPerWord));
aContext = longAt(GIV(stackPointer) + (2 * BytesPerWord));
if (!((index & 1))) {
- (GIV(primFailCode) = PrimErrBadArgument);
+ GIV(primFailCode) = PrimErrBadArgument;
return;
}
hdr = longAt(aContext);
@@ -53025,7 +53012,7 @@
stSize = (sp1 >> 1);
l2: /* end fetchStackPointerOf: */;
if (!(((index >= 1) && (index <= stSize)))) {
- (GIV(primFailCode) = PrimErrBadIndex);
+ GIV(primFailCode) = PrimErrBadIndex;
return;
}
/* begin subscript:with:storing:format: */
@@ -53071,7 +53058,7 @@
assert((senderOop & 1));
spouseFP = pointerForOop(senderOop - 1);
if (!(((index >= 1) && (index <= (stackPointerIndexForFrame(spouseFP)))))) {
- (GIV(primFailCode) = PrimErrBadIndex);
+ GIV(primFailCode) = PrimErrBadIndex;
return;
}
if ((((usqInt)(longAt(spouseFP + FoxMethod)))) < (startOfMemory())) {
@@ -54276,7 +54263,7 @@
assert(pageListIsWellFormed());
if (GIV(fullGCLock) > 0) {
- (GIV(primFailCode) = PrimErrInappropriate);
+ GIV(primFailCode) = PrimErrInappropriate;
return;
}
incrementalGC();
Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cogit.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -134,6 +134,7 @@
#define CDQ 111
#define ClassArrayCompactIndex 51
#define ClassBlockClosureCompactIndex 37
+#define ClassFloatCompactIndex 34
#define ClassMethodContextCompactIndex 36
#define ClassReg -5
#define ClosureFirstCopiedValueIndex 3
@@ -816,6 +817,7 @@
static void voidYoungReferrersPostTenureAll(void);
char * whereIsMaybeCodeThing(sqInt anOop);
static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
static sqInt genInnerPrimitiveNewMethod(sqInt retNoffset) NoDbgRegParms;
static sqInt genAddSmallIntegerTagsTo(sqInt aRegister) NoDbgRegParms;
static void genConvertCharacterToSmallIntegerInReg(sqInt reg) NoDbgRegParms;
@@ -12797,7 +12799,7 @@
static sqInt
markLiteralspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod)
{
- usqInt cacheAddress;
+ sqInt cacheAddress;
sqInt cacheTag;
sqInt cacheTag1;
sqInt class;
@@ -13706,7 +13708,7 @@
static sqInt
remapIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr)
{
- usqInt cacheAddress;
+ sqInt cacheAddress;
sqInt cacheTag;
sqInt cacheTag1;
sqInt entryPoint;
@@ -14454,7 +14456,7 @@
static void
voidImplicitReceiverCacheAt(sqInt mcpc)
{
- usqInt cacheAddress;
+ sqInt cacheAddress;
assert(NumOopsPerIRC == 2);
cacheAddress = implicitReceiveCacheAt(backEnd, mcpc);
@@ -15185,7 +15187,14 @@
&& ((heapMapAtWord(pointerForOop(anOop))) != 0);
}
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+ /* begin CmpCq:R: */
+ return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
+
/* subclasses override if they can */
static sqInt
@@ -17231,7 +17240,7 @@
{
sqInt hash;
- hash = ensureBehaviorHash(classOop);
+ hash = classTagForClass(classOop);
return (hash <= (tagMask())
? hash & 1
: hash);
@@ -17363,7 +17372,7 @@
sqInt quickConstant;
allocSize = (BaseHeaderSize) + (sizeof(double));
- newFloatHeader = headerForSlotsformatclassIndex((sizeof(double)) / (wordSize()), firstLongFormat(), classFloatCompactIndex());
+ newFloatHeader = headerForSlotsformatclassIndex((sizeof(double)) / (wordSize()), firstLongFormat(), ClassFloatCompactIndex);
/* begin MoveAw:R: */
address = freeStartAddress();
genoperandoperand(MoveAwR, address, resultReg);
@@ -20963,7 +20972,6 @@
AbstractInstruction *jumpFailClass;
AbstractInstruction *jumpImmediate;
AbstractInstruction *jumpNonInt;
- sqInt quickConstant;
/* begin MoveR:R: */
genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -20972,9 +20980,7 @@
genoperandoperand(MoveRR, Arg0Reg, ClassReg);
jumpImmediate = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFailClass = genoperand(JumpNonZero, ((sqInt)0));
genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -21026,16 +21032,13 @@
AbstractInstruction *jumpFail;
AbstractInstruction *jumpImmediate;
AbstractInstruction *jumpNonInt;
- sqInt quickConstant;
/* begin MoveR:R: */
genoperandoperand(MoveRR, Arg0Reg, TempReg);
genGetDoubleValueOfinto(ReceiverResultReg, DPFPReg0);
jumpImmediate = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFail = genoperand(JumpNonZero, ((sqInt)0));
genGetDoubleValueOfinto(Arg0Reg, DPFPReg1);
@@ -22687,7 +22690,6 @@
AbstractInstruction *jumpFail;
AbstractInstruction *jumpNonInt;
AbstractInstruction *jumpTrue;
- sqInt quickConstant;
if (!(hasDoublePrecisionFloatingPointSupport(backEnd))) {
return genSmallIntegerComparison(jumpOpcode);
@@ -22710,9 +22712,7 @@
jumpNonInt = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
jumpFail = genoperand(JumpNonZero, ((sqInt)0));
genConvertSmallIntegerToIntegerInReg(ReceiverResultReg);
Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cogit.h 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -802,9 +802,11 @@
usqInt freeStartAddress(void);
usqInt getScavengeThreshold(void);
static sqLong headerWhileForwardingOf(sqInt aCompiledMethodObjOop) NoDbgRegParms;
+sqInt isImmediateClass(sqInt classObj);
sqInt isReallyYoungObject(sqInt objOop);
sqLong nullHeaderForMachineCodeMethod(void);
usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
static sqInt addressAfter(sqInt objOop) NoDbgRegParms;
@@ -904,7 +906,6 @@
sqInt classExternalLibrary(void);
sqInt classExternalStructure(void);
sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
sqInt classIndexMask(void);
sqInt classIndexOf(sqInt objOop);
@@ -917,10 +918,10 @@
sqInt classString(void);
sqInt classTableMajorIndexShift(void);
sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
sqInt classTableRootObj(void);
static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
sqInt classUnsafeAlien(void);
sqInt clone(sqInt objOop);
static void compact(void) NeverInline;
@@ -934,7 +935,7 @@
static void eliminateAndFreeForwardersForPigCompact(void);
static void emptyObjStack(sqInt objStack) NoDbgRegParms;
static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
static sqInt ephemeronFormat(void);
@@ -2320,7 +2321,7 @@
/*540*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -5611,7 +5612,6 @@
GIV(framePointer) = localFP;
ceEnterCogCodePopReceiverReg();
- null;
goto l292;
}
localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5629,7 +5629,7 @@
/* begin fetchNextBytecode */
currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- null;
+ /* return self */
l292: /* end baseFrameReturn */;
goto l291;
}
@@ -34905,22 +34905,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -38605,7 +38596,13 @@
return long64At(aCompiledMethodObjOop);
}
+sqInt
+isImmediateClass(sqInt classObj)
+{
+ return ((((usqInt) (((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1))) >> 16) & 0x1F) == 7;
+}
+
/* Answer if obj is young. Require that obj is non-immediate. Override to
filter-out Cog methods
*/
@@ -38631,6 +38628,17 @@
}
+/* Beware, SmallInetger tags are 1 or 3. But SmallInteger's identityHash is
+ 1.
+ */
+
+sqInt
+smallIntegerTag(void)
+{
+ return 1;
+}
+
+
/* For the purposes of become: send selector to the cogit with obj1 and obj2
and answer the result. Undo forwarding for the selector. */
@@ -43960,12 +43968,6 @@
return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
static sqInt
classForClassTag(sqInt classIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -44074,7 +44076,7 @@
/* 1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
/* self basicNew classTablePageSize */
-static sqInt
+sqInt
classTablePageSize(void)
{
return 1 << 10;
@@ -44105,7 +44107,7 @@
method lookup cache.
*/
-static sqInt
+sqInt
classTagForClass(sqInt classObj)
{
sqInt err;
@@ -45078,7 +45080,7 @@
memset(GIV(classTableBitmap), 0, requiredSize);
}
-sqInt
+static sqInt
ensureBehaviorHash(sqInt aBehavior)
{
sqInt err;
@@ -47334,7 +47336,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 5-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/cointerp.h 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
@@ -122,9 +122,11 @@
void ensureNoForwardedLiteralsIn(sqInt aMethodObj);
usqInt freeStartAddress(void);
usqInt getScavengeThreshold(void);
+sqInt isImmediateClass(sqInt classObj);
sqInt isReallyYoungObject(sqInt objOop);
sqLong nullHeaderForMachineCodeMethod(void);
usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
sqInt byteSwapped(sqInt w);
@@ -150,17 +152,17 @@
sqInt checkOopHasOkayClass(usqInt obj);
sqInt checkTraversableSortedFreeList(void);
sqInt classAtIndex(sqInt classIndex);
-sqInt classFloatCompactIndex(void);
sqInt classIndexMask(void);
sqInt classIndexOf(sqInt objOop);
sqInt classOrNilAtIndex(sqInt classIndex);
sqInt classTableMajorIndexShift(void);
sqInt classTableMinorIndexMask(void);
+sqInt classTablePageSize(void);
sqInt classTableRootObj(void);
+sqInt classTagForClass(sqInt classObj);
sqInt compactClassIndexOf(sqInt objOop);
void countMarkedAndUnmarkdObjects(sqInt printFlags);
sqInt eeInstantiateClassIndexformatnumSlots(sqInt knownClassIndex, sqInt objFormat, sqInt numSlots);
-sqInt ensureBehaviorHash(sqInt aBehavior);
sqInt fetchByteofObject(sqInt byteIndex, sqInt objOop);
void findStringBeginningWith(char *aCString);
void findString(char *aCString);
Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -805,9 +805,11 @@
usqInt freeStartAddress(void);
usqInt getScavengeThreshold(void);
static sqLong headerWhileForwardingOf(sqInt aCompiledMethodObjOop) NoDbgRegParms;
+sqInt isImmediateClass(sqInt classObj);
sqInt isReallyYoungObject(sqInt objOop);
sqLong nullHeaderForMachineCodeMethod(void);
usqInt scavengeThresholdAddress(void);
+sqInt smallIntegerTag(void);
sqInt withoutForwardingOnandsendToCogit(sqInt obj1, sqInt obj2, sqInt (*selector)(sqInt,sqInt));
sqInt withoutForwardingOnandwithsendToCogit(sqInt obj1, sqInt obj2, sqInt aBool, sqInt (*selector)(sqInt,sqInt,sqInt));
static sqInt addressAfter(sqInt objOop) NoDbgRegParms;
@@ -907,7 +909,6 @@
sqInt classExternalLibrary(void);
sqInt classExternalStructure(void);
sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
sqInt classIndexMask(void);
sqInt classIndexOf(sqInt objOop);
@@ -920,10 +921,10 @@
sqInt classString(void);
sqInt classTableMajorIndexShift(void);
sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
sqInt classTableRootObj(void);
static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
sqInt classUnsafeAlien(void);
sqInt clone(sqInt objOop);
static void compact(void) NeverInline;
@@ -937,7 +938,7 @@
static void eliminateAndFreeForwardersForPigCompact(void);
static void emptyObjStack(sqInt objStack) NoDbgRegParms;
static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
static sqInt ephemeronFormat(void);
@@ -2323,7 +2324,7 @@
/*540*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -5620,7 +5621,6 @@
GIV(framePointer) = localFP;
ceEnterCogCodePopReceiverReg();
- null;
goto l292;
}
localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5638,7 +5638,7 @@
/* begin fetchNextBytecode */
currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- null;
+ /* return self */
l292: /* end baseFrameReturn */;
goto l291;
}
@@ -34914,22 +34914,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -38614,7 +38605,13 @@
return long64At(aCompiledMethodObjOop);
}
+sqInt
+isImmediateClass(sqInt classObj)
+{
+ return ((((usqInt) (((longAt((classObj + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1))) >> 16) & 0x1F) == 7;
+}
+
/* Answer if obj is young. Require that obj is non-immediate. Override to
filter-out Cog methods
*/
@@ -38640,6 +38637,17 @@
}
+/* Beware, SmallInetger tags are 1 or 3. But SmallInteger's identityHash is
+ 1.
+ */
+
+sqInt
+smallIntegerTag(void)
+{
+ return 1;
+}
+
+
/* For the purposes of become: send selector to the cogit with obj1 and obj2
and answer the result. Undo forwarding for the selector. */
@@ -43969,12 +43977,6 @@
return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
static sqInt
classForClassTag(sqInt classIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -44083,7 +44085,7 @@
/* 1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
/* self basicNew classTablePageSize */
-static sqInt
+sqInt
classTablePageSize(void)
{
return 1 << 10;
@@ -44114,7 +44116,7 @@
method lookup cache.
*/
-static sqInt
+sqInt
classTagForClass(sqInt classObj)
{
sqInt err;
@@ -45087,7 +45089,7 @@
memset(GIV(classTableBitmap), 0, requiredSize);
}
-sqInt
+static sqInt
ensureBehaviorHash(sqInt aBehavior)
{
sqInt err;
@@ -47343,7 +47345,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 5-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -657,7 +657,6 @@
sqInt classExternalLibrary(void);
sqInt classExternalStructure(void);
sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
sqInt classIndexMask(void);
sqInt classIndexOf(sqInt objOop);
@@ -670,10 +669,10 @@
sqInt classString(void);
sqInt classTableMajorIndexShift(void);
sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
sqInt classTableRootObj(void);
static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
sqInt classUnsafeAlien(void);
static void clearLeakMapAndMapAccessibleObjects(void);
sqInt clone(sqInt objOop);
@@ -688,7 +687,7 @@
static void eliminateAndFreeForwardersForPigCompact(void);
static void emptyObjStack(sqInt objStack) NoDbgRegParms;
static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
static sqInt ephemeronFormat(void);
@@ -2071,7 +2070,7 @@
0 };
char * breakSelector;
sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.848";
volatile int sendTrace;
sqInt suppressHeartbeatFlag;
@@ -23152,22 +23151,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -32511,12 +32501,6 @@
return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
static sqInt
classForClassTag(sqInt classIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -32625,7 +32609,7 @@
/* 1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
/* self basicNew classTablePageSize */
-static sqInt
+sqInt
classTablePageSize(void)
{
return 1 << 10;
@@ -32656,7 +32640,7 @@
method lookup cache.
*/
-static sqInt
+sqInt
classTagForClass(sqInt classObj)
{
sqInt err;
@@ -33705,7 +33689,7 @@
memset(GIV(classTableBitmap), 0, requiredSize);
}
-sqInt
+static sqInt
ensureBehaviorHash(sqInt aBehavior)
{
sqInt err;
@@ -36004,7 +35988,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 5-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
Modified: branches/Cog/nsspurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/nsspurstacksrc/vm/interp.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -654,7 +654,6 @@
sqInt classExternalLibrary(void);
sqInt classExternalStructure(void);
sqInt classFloat(void);
-sqInt classFloatCompactIndex(void);
static sqInt classForClassTag(sqInt classIndex) NoDbgRegParms;
sqInt classIndexMask(void);
sqInt classIndexOf(sqInt objOop);
@@ -667,10 +666,10 @@
sqInt classString(void);
sqInt classTableMajorIndexShift(void);
sqInt classTableMinorIndexMask(void);
-static sqInt classTablePageSize(void);
+sqInt classTablePageSize(void);
sqInt classTableRootObj(void);
static sqInt classTableRootSlots(void);
-static sqInt classTagForClass(sqInt classObj) NoDbgRegParms;
+sqInt classTagForClass(sqInt classObj);
sqInt classUnsafeAlien(void);
static void clearLeakMapAndMapAccessibleObjects(void);
sqInt clone(sqInt objOop);
@@ -685,7 +684,7 @@
static void eliminateAndFreeForwardersForPigCompact(void);
static void emptyObjStack(sqInt objStack) NoDbgRegParms;
static void ensureAdequateClassTableBitmap(void);
-sqInt ensureBehaviorHash(sqInt aBehavior);
+static sqInt ensureBehaviorHash(sqInt aBehavior) NoDbgRegParms;
static sqInt ensureRoomOnObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
static sqInt enterIntoClassTable(sqInt aBehavior) NoDbgRegParms;
static sqInt ephemeronFormat(void);
@@ -2068,7 +2067,7 @@
0 };
char * breakSelector;
sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.844";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.848";
volatile int sendTrace;
sqInt suppressHeartbeatFlag;
@@ -23143,22 +23142,13 @@
}
}
if (!GIV(primFailCode)) {
- if (integerRcvr > 0) {
- if (integerArg > 0) {
- integerResult = integerRcvr / integerArg;
- }
- else {
- integerResult = 0 - (integerRcvr / (0 - integerArg));
- }
- }
- else {
- if (integerArg > 0) {
- integerResult = 0 - ((0 - integerRcvr) / integerArg);
- }
- else {
- integerResult = (0 - integerRcvr) / (0 - integerArg);
- }
- }
+ integerResult = (integerRcvr > 0
+ ? (integerArg > 0
+ ? integerRcvr / integerArg
+ : 0 - (integerRcvr / (0 - integerArg)))
+ : (integerArg > 0
+ ? 0 - ((0 - integerRcvr) / integerArg)
+ : (0 - integerRcvr) / (0 - integerArg)));
}
/* begin pop2AndPushIntegerIfOK: */
if (!GIV(primFailCode)) {
@@ -32502,12 +32492,6 @@
return longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2));
}
-sqInt
-classFloatCompactIndex(void)
-{
- return ClassFloatCompactIndex;
-}
-
static sqInt
classForClassTag(sqInt classIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
@@ -32616,7 +32600,7 @@
/* 1024 entries per page (2^10); 22 bit classIndex implies 2^12 pages */
/* self basicNew classTablePageSize */
-static sqInt
+sqInt
classTablePageSize(void)
{
return 1 << 10;
@@ -32647,7 +32631,7 @@
method lookup cache.
*/
-static sqInt
+sqInt
classTagForClass(sqInt classObj)
{
sqInt err;
@@ -33696,7 +33680,7 @@
memset(GIV(classTableBitmap), 0, requiredSize);
}
-sqInt
+static sqInt
ensureBehaviorHash(sqInt aBehavior)
{
sqInt err;
@@ -35995,7 +35979,9 @@
}
-/* This is the same as the field stored in every object header */
+/* This field in a class's format inst var corresponds to the 5-bit format
+ field stored in every object header
+ */
static sqInt
instSpecOfClass(sqInt classPointer)
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Wed Aug 6 17:34:23 PDT 2014
+ Thu Aug 7 08:19:00 PDT 2014
Modified: branches/Cog/scripts/uploadvms
===================================================================
--- branches/Cog/scripts/uploadvms 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/scripts/uploadvms 2014-08-07 15:22:32 UTC (rev 3061)
@@ -156,3 +156,5 @@
ssh $RemoteUser chmod a-w $RemoteRoot/VM.r$REV/* \; ls -al $RemoteRoot/VM.r$REV
test -x image/makegetvmscripts.sh && (image/makegetvmscripts.sh)
+
+test -x /usr/bin/pbcopy && pbcopy <../history/README.$REV
Modified: branches/Cog/sistasrc/vm/cogit.c
===================================================================
--- branches/Cog/sistasrc/vm/cogit.c 2014-08-07 00:37:34 UTC (rev 3060)
+++ branches/Cog/sistasrc/vm/cogit.c 2014-08-07 15:22:32 UTC (rev 3061)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
from
- SistaStackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa
+ SistaStackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648
*/
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.844 uuid: 4ea8ab78-c8f6-4cf2-a165-23eb85dd66aa " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -134,6 +134,7 @@
#define Call 9
#define CDQ 111
#define ClassArrayCompactIndex 3
+#define ClassFloatCompactIndex 6
#define ClassMethodContextCompactIndex 14
#define ClassReg -5
#define ClassSmallInteger 5
@@ -815,6 +816,7 @@
char * whereIsMaybeCodeThing(sqInt anOop);
static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
static sqInt createsClosuresInline(void);
+static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
static sqInt genEnsureObjInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
static sqInt genEnsureOopInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms;
static sqInt genInnerPrimitiveAsCharacterinReg(sqInt retNOffset, sqInt reg) NoDbgRegParms;
@@ -828,8 +830,8 @@
static void maybeCompileRetryonPrimitiveFail(AbstractInstruction *retryInst, sqInt primIndex) NoDbgRegParms;
static sqInt allocateCounters(sqInt nCounters) NoDbgRegParms;
static sqInt allYoungObjectsAgeInFullGC(void);
-static sqInt branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction *branches) NoDbgRegParms;
-static sqInt branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction *branches) NoDbgRegParms;
+static sqInt branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction **branches) NoDbgRegParms;
+static sqInt branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction **branches) NoDbgRegParms;
static sqInt cacheTagIsMarked(sqInt cacheTag) NoDbgRegParms;
static sqInt checkValidInlineCacheTag(sqInt cacheTag) NoDbgRegParms;
static sqInt checkValidOopReference(sqInt anOop) NoDbgRegParms;
@@ -903,6 +905,7 @@
static sqInt extendedStoreBytecode(void);
static sqInt frameOffsetOfTemporary(sqInt index) NoDbgRegParms;
static sqInt genBlockReturn(void);
+static sqInt genCallPrimitiveBytecode(void);
static AbstractInstruction * genDoubleFailIfZeroArgRcvrarg(sqInt rcvrReg, sqInt argReg) NoDbgRegParms;
static sqInt genExtendedSendBytecode(void);
static sqInt genExtendedSuperBytecode(void);
@@ -15008,7 +15011,14 @@
return 0;
}
+static AbstractInstruction *
+genCmpClassFloatCompactIndexR(sqInt reg)
+{
+ /* begin CmpCq:R: */
+ return genoperandoperand(CmpCqR, ClassFloatCompactIndex, SendNumArgsReg);
+}
+
/* Make sure that the object in reg is not forwarded. By default there is
nothing to do. Subclasses for memory managers that forward will override. */
@@ -15144,7 +15154,7 @@
generated. */
static sqInt
-branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction *branches)
+branchIfInstanceOfBehaviorsbranches(sqInt arrayObj, AbstractInstruction **branches)
{
sqInt allCompact;
sqInt anImmediate;
@@ -15234,7 +15244,7 @@
*/
static sqInt
-branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction *branches)
+branchIfInstanceOfBehaviorbranches(sqInt classObj, AbstractInstruction **branches)
{
sqInt compactClassIndex;
AbstractInstruction *jmpImmediate;
@@ -15373,7 +15383,7 @@
sqInt newFloatHeaderSansHash;
allocSize = BaseHeaderSize + (sizeof(double));
- newFloatHeaderSansHash = ((((classFloatCompactIndex()) << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
+ newFloatHeaderSansHash = (((ClassFloatCompactIndex << (compactClassFieldLSB())) | (formatOfClass(classFloat()))) | allocSize) | HeaderTypeShort;
/* begin MoveAw:R: */
address = freeStartAddress();
genoperandoperand(MoveAwR, address, resultReg);
@@ -17006,6 +17016,19 @@
return 0;
}
+
+/* SistaV1: 248 11111000 iiiiiiii mjjjjjjj Call Primitive #iiiiiiii +
+ (jjjjjjj * 256) m=1 means inlined primitive, no hard return after
+ execution.
+ */
+/* This makes sense only for the optimizing JITs */
+
+static sqInt
+genCallPrimitiveBytecode(void)
+{
+ return EncounteredUnknownBytecode;
+}
+
static AbstractInstruction *
genDoubleFailIfZeroArgRcvrarg(sqInt rcvrReg, sqInt argReg)
{
@@ -18571,7 +18594,7 @@
numBranches = (isArrayNonImm(literal)
? (numSlotsOf(literal)) + 1
: 2);
- branches = allocatype(numBranches, ((AbstractInstruction *) CogAbstractInstruction));
+ branches = allocatype(numBranches, AbstractInstruction *);
/* Only flush the stack if the class trap traps. Use ssFlushNoUpdateTo: so we continue compiling as if
the stack had not been flushed. Control does not return after the ceClassTrapTrampoline call. */
@@ -20306,7 +20329,6 @@
AbstractInstruction *jumpFailClass;
AbstractInstruction *jumpImmediate;
AbstractInstruction *jumpNonInt;
- sqInt quickConstant;
/* begin MoveR:R: */
genoperandoperand(MoveRR, Arg0Reg, TempReg);
@@ -20315,9 +20337,7 @@
genoperandoperand(MoveRR, Arg0Reg, ClassReg);
jumpImmediate = genJumpImmediateInScratchReg(TempReg);
genGetCompactClassIndexNonImmOfinto(Arg0Reg, SendNumArgsReg);
- /* begin CmpCq:R: */
- quickConstant = classFloatCompactIndex();
- genoperandoperand(CmpCqR, quickConstant, SendNumArgsReg);
+ genCmpClassFloatCompactIndexR(SendNumArgsReg);
/* begin JumpNonZero: */
@@ Diff output truncated at 50000 characters. @@
More information about the Vm-dev
mailing list