Revision: 2640 Author: eliot Date: 2012-12-20 12:39:20 -0800 (Thu, 20 Dec 2012) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.240.
Back out of the wrong-headed attempt to give compact class indices to long header objects in changeClassOf:to:, and comment why (markAndTrace: reuses header type bits and depends on compact class and size fields to reconstruct type bits after traverse).
Consequently fix isClassOfNonImm:equalTo:compactClassIndex: so it will still accept long-header objects that are insances of compact classes but don't have a compact class index.
Clean-up accesses to the compactClassesArray so that they go through the compactClassAt: where appropriate.
Use the short-hand class determinators such as isInstanceOfClassFloat: in place of the long-winded is:instanceOf:compactClassIndex:.
Remove obsolete use of cCode: 'magnitude >> 32' in the integer conversion routines signed64BitIntegerFor: et al now that Slang generates the correct cases for right-shift.
Eliminate the compactClassTable accessor. CompactClasses and splOb: are both in scope in CogObjectRepresentationForSqueakV3.
Override sweepPhase in NewObjectMemory and hence eliminate initializeFreeBlocksPreSweep.
Fix off-by-one error in okayOop:.
Make longPrintOop: print header type info.
Make allAccessibleObjectsOk answer a result.
Don't inline loadInitialContext for gdb breakpointing convenience.
Declare some constant variables as const in the Cogit.
Don't use SA_ONSTACK if NEED_SIGALTSTACK is 0. (default is 1, so this isn't a change, except for experimenting).
Fix nscogbuild/unixbuild/HowToBuild (thanks Bob).
Modified Paths: -------------- branches/Cog/nscogbuild/unixbuild/HowToBuild branches/Cog/nscogsrc/vm/cogit.c branches/Cog/nscogsrc/vm/cogit.h branches/Cog/nscogsrc/vm/cogmethod.h branches/Cog/nscogsrc/vm/cointerp.c branches/Cog/nscogsrc/vm/cointerp.h branches/Cog/nscogsrc/vm/gcc3x-cointerp.c branches/Cog/nscogsrc/vm/interp.h branches/Cog/nscogsrc/vm/vmCallback.h branches/Cog/platforms/unix/vm/sqUnixITimerHeartbeat.c branches/Cog/platforms/unix/vm/sqUnixITimerTickerHeartbeat.c branches/Cog/src/vm/cogit.c branches/Cog/src/vm/cogit.h branches/Cog/src/vm/cogmethod.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/src/vm/vmCallback.h
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogbuild/unixbuild/HowToBuild =================================================================== --- branches/Cog/nscogbuild/unixbuild/HowToBuild 2012-12-18 18:39:16 UTC (rev 2639) +++ branches/Cog/nscogbuild/unixbuild/HowToBuild 2012-12-20 20:39:20 UTC (rev 2640) @@ -14,25 +14,30 @@ 2. Check out the following sources from svn (if you haven't already - if you're reading this in unixbuild its likely you've already got the sources) svn co http://www.squeakvm.org/svn/squeak/branches/Cog/platforms - svn co http://www.squeakvm.org/svn/squeak/branches/Cog/src + svn co http://www.squeakvm.org/svn/squeak/branches/Cog/nscogsrc svn co http://www.squeakvm.org/svn/squeak/branches/Cog/nscogbuild -3. Open a shell, cd into the unixbuild/bld directory and execute - ../../../platforms/unix/config/configure --with-src=nscogsrc CFLAGS="-g -O2 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=0" LIBS="-lpthread -luuid" +3. Open a shell, cd into the nscogbuild/unixbuild/bld directory and execute the + mvm script. This installs a VM in the nsvmlinux directory alongside + nscogsrc et al. Alternatively you can configure your own VM, e.g. with + ../../../platforms/unix/config/configure --with-src=nscogsrc CFLAGS="-g -O2 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DMULTIPLEBYTECODESETS=1 -DDEBUGVM=0" LIBS="-lpthread -luuid" LDFLAGS=-Wl,-z,now make install prefix=WhereYouWantTheVmToGo
N.B. On Ubuntu *do not* supply "LIBS="-lpthread -luuid"", i.e. use - ../../../platforms/unix/config/configure --with-src=nscogsrc CFLAGS="-g -O2 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=0" + ../../../platforms/unix/config/configure --with-src=nscogsrc CFLAGS="-g -O2 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DMULTIPLEBYTECODESETS=1 -DDEBUGVM=0" LDFLAGS=-Wl,-z,now
-4. At the end of it you'll get a new VM in the path provided via -prefix +4. At the end of it you'll get a new VM in nsvmlinux, or in the path provided + via -prefix
N.B. The plugin set is defined by plugins.ext and plugins.int in the build dir.
-3a. For an assert-enabled VM do - ../../../platforms/unix/config/configure --without-vm-display-fbdev --without-npsqueak --with-src=nscogsrc CFLAGS="-g -O1 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=0" LIBS="-lpthread -luuid" +3a. For an assert-enabled VM use the astbld directory's mvm and find a vm in + nsvmlinuxast, or do + ../../../platforms/unix/config/configure --with-src=nscogsrc CFLAGS="-g -O1 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DMULTIPLEBYTECODESETS=1 -DDEBUGVM=0 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" LIBS="-lpthread -luuid" LDFLAGS=-Wl,-z,now
-3b. For a full debug VM do - ../../../platforms/unix/config/configure --without-vm-display-fbdev --without-npsqueak --with-src=nscogsrc CFLAGS="-g3 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=1" LIBS="-lpthread -luuid" +3b. For a full debug VM use the dbgbld's mvm and find a vm in nsvmlinuxdbg, + or do + CFLAGS="-g -O0 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DMULTIPLEBYTECODESETS=1 -DDEBUGVM=1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" LIBS="-lpthread -luuid" LDFLAGS=-Wl,-z,now
3c. If you're building the VM on a 64-bit OS, you'll need a compiler which can compile and link to 32-bit binaries. On most Linuxes the gcc-multilib package
Modified: branches/Cog/nscogsrc/vm/cogit.c =================================================================== --- branches/Cog/nscogsrc/vm/cogit.c 2012-12-18 18:39:16 UTC (rev 2639) +++ branches/Cog/nscogsrc/vm/cogit.c 2012-12-20 20:39:20 UTC (rev 2640) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.234 uuid: 66acafd1-cad0-4f20-b786-ab8f48201d82 + CCodeGenerator VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 from - StackToRegisterMappingCogit VMMaker.oscog-eem.234 uuid: 66acafd1-cad0-4f20-b786-ab8f48201d82 + StackToRegisterMappingCogit VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.234 uuid: 66acafd1-cad0-4f20-b786-ab8f48201d82 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -152,6 +152,7 @@ #define CmpRdRd 96 #define CmpRR 75 #define COGMTVM 0 +#define CompactClasses 28 #define ConstZero 1 #define ConvertRRd 102 #define CPUID 106 @@ -1047,7 +1048,7 @@ static AbstractInstruction aMethodLabel; static sqInt annotationIndex; static InstructionAnnotation * annotations; -static AbstractInstruction *backEnd = &aMethodLabel; +static const AbstractInstruction *backEnd = &aMethodLabel; static usqInt baseAddress; static sqInt blockCount; static AbstractInstruction * blockEntryLabel; @@ -3817,7 +3818,7 @@ sqInt initialAnnotationIndex; sqInt initialOpcodeIndex; sqInt initialStackPtr; - sqInt (*pushNilSizeFunction)(sqInt) = v3or4PushNilSize; + const sqInt (*pushNilSizeFunction)(sqInt) = v3or4PushNilSize; sqInt result; sqInt savedNeedsFrame; sqInt savedNumArgs; @@ -9831,7 +9832,7 @@ /* begin Jump: */ jumpGotClass = genoperand(Jump, ((sqInt)0)); assert(BaseHeaderSize == BytesPerWord); - jmpTarget(jumpCompact, annotateobjRef(gMoveMwrR(compactClassTable(), destReg, scratchReg), compactClassTable())); + jmpTarget(jumpCompact, annotateobjRef(gMoveMwrR(splObj(CompactClasses), destReg, scratchReg), splObj(CompactClasses))); jmpTarget(jumpGotClass, gMoveMwrR((InstanceSpecificationIndex << ShiftForWord) + BytesPerWord, scratchReg, destReg)); return 0; } @@ -9880,7 +9881,7 @@ /* begin Jump: */ jumpGotClass2 = genoperand(Jump, ((sqInt)0)); assert(BaseHeaderSize == BytesPerWord); - jmpTarget(jumpCompact, annotateobjRef(gMoveMwrR(compactClassTable(), scratchReg, destReg), compactClassTable())); + jmpTarget(jumpCompact, annotateobjRef(gMoveMwrR(splObj(CompactClasses), scratchReg, destReg), splObj(CompactClasses))); jmpTarget(jumpGotClass, jmpTarget(jumpGotClass2, gLabel())); return 0; } @@ -16951,7 +16952,7 @@ { BytecodeDescriptor *descriptor; sqInt end; - sqInt (*isPushNilFunction)(struct _BytecodeDescriptor *,sqInt,sqInt,sqInt) = v3or4IsPushNil; + const sqInt (*isPushNilFunction)(struct _BytecodeDescriptor *,sqInt,sqInt,sqInt) = v3or4IsPushNil; sqInt nExts; sqInt pc; sqInt pushingNils;
Modified: branches/Cog/nscogsrc/vm/cogit.h =================================================================== --- branches/Cog/nscogsrc/vm/cogit.h 2012-12-18 18:39:16 UTC (rev 2639) +++ branches/Cog/nscogsrc/vm/cogit.h 2012-12-20 20:39:20 UTC (rev 2640) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.234 uuid: 66acafd1-cad0-4f20-b786-ab8f48201d82 + CCodeGenerator VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 */
Modified: branches/Cog/nscogsrc/vm/cogmethod.h =================================================================== --- branches/Cog/nscogsrc/vm/cogmethod.h 2012-12-18 18:39:16 UTC (rev 2639) +++ branches/Cog/nscogsrc/vm/cogmethod.h 2012-12-20 20:39:20 UTC (rev 2640) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.234 uuid: 66acafd1-cad0-4f20-b786-ab8f48201d82 + CCodeGenerator VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 */
typedef struct {
Modified: branches/Cog/nscogsrc/vm/cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.c 2012-12-18 18:39:16 UTC (rev 2639) +++ branches/Cog/nscogsrc/vm/cointerp.c 2012-12-20 20:39:20 UTC (rev 2640) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.239 uuid: 3087e16d-bf3c-4fdc-b2ec-14791deff66f + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 from - CoInterpreter VMMaker.oscog-eem.239 uuid: 3087e16d-bf3c-4fdc-b2ec-14791deff66f + CoInterpreter VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.239 uuid: 3087e16d-bf3c-4fdc-b2ec-14791deff66f " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.240 uuid: f72e2cd1-8b0e-45af-acd7-06ba9bbc2a50 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -123,7 +123,6 @@ #define ClassBlockClosure 36 #define ClassBlockClosureCompactIndex 0 #define ClassByteArray 26 -#define ClassByteString 6 #define ClassByteStringCompactIndex 11 #define ClassCharacter 19 #define ClassExternalAddress 43 @@ -448,7 +447,6 @@ sqInt compactClassAt(sqInt ccIndex); sqInt compactClassIndexOfHeader(sqInt header); sqInt compactClassIndexOf(sqInt oop); -sqInt compactClassTable(void); static sqInt compare31or32Bitsequal(sqInt obj1, sqInt obj2); void compilationBreakpointFor(sqInt selectorOop); static sqInt containOnlyOops(sqInt array); @@ -616,7 +614,6 @@ static sqInt isContext(sqInt oop); sqInt isFloatObject(sqInt oop); static sqInt isFree(StackPage * self_in_isFree); -static sqInt isFreeObject(sqInt oop); sqInt isIndexable(sqInt oop); sqInt isInMemory(sqInt address); sqInt isIntegerObject(sqInt objectPointer); @@ -1104,7 +1101,6 @@ static sqInt sizeBitsOf(sqInt oop); usqInt sizeOfAlienData(sqInt oop); sqInt sizeOfCallPrimitiveBytecode(sqInt methodHeader); -static sqInt sizeOfFree(sqInt oop); sqInt sizeOfLongStoreTempBytecode(sqInt methodHeader); sqInt sizeOfSTArrayFromCPrimitive(void *cPtr); sqInt slotSizeOf(sqInt oop); @@ -1186,20 +1182,20 @@ _iss usqInt method; _iss sqInt bytecodeSetSelector; _iss usqInt instructionPointer; +_iss sqInt argumentCount; _iss sqInt nilObj; -_iss sqInt argumentCount; _iss usqInt freeStart; _iss sqInt messageSelector; _iss usqInt newMethod; _iss usqInt youngStart; _iss StackPage * pages; _iss char * stackBasePlus1; -_iss sqInt lkupClass; _iss usqInt endOfMemory; _iss sqInt rootTableCount; _iss sqInt trueObj; _iss sqInt falseObj; _iss sqInt remapBufferCount; +_iss sqInt lkupClass; _iss sqInt traceLogIndex; _iss sqInt bytesPerPage; _iss char * stackLimit; @@ -1932,7 +1928,7 @@ 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); static usqInt heapBase; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.239"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.240"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace;
@@ -1991,8 +1987,6 @@ sqInt interpret(void) { DECL_MAYBE_SQ_GLOBAL_STRUCT - sqInt activeContext; - sqInt activeProc; sqInt currentBytecode; sqInt extA; sqInt extB; @@ -2013,16 +2007,7 @@ sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit))); sqMakeMemoryNotExecutableFromTo(((usqInt)theStackMemory), (((usqInt)theStackMemory)) + stackPagesBytes); initializeStacknumSlotspageSizestackLimitOffsetstackPageHeadroom(theStackMemory, ((sqInt) stackPagesBytes >> 2), ((sqInt) stackPageBytes >> 2), (IFrameSlots + 64) * BytesPerWord, (stackPageHeadroomBytes()) + 1024); - /* begin loadInitialContext */ - VM_LABEL(0loadInitialContext); - null; - if ((checkForLeaks & 1) != 0) { - clearLeakMapAndMapAccessibleObjects(); - assert(checkHeapIntegrity()); - } - activeProc = longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord)); - activeContext = longAt((activeProc + BaseHeaderSize) + (SuspendedContextIndex << ShiftForWord)); - marryContextInNewStackPageAndInitializeInterpreterRegisters(activeContext); + loadInitialContext(); ioInitHeartbeat(); initialEnterSmalltalkExecutive(); return null; @@ -4139,7 +4124,7 @@ ? ((longAt(localFP + FoxMethod)) & MFMethodFlagIsBlockFlag) != 0 : (byteAt((localFP + FoxIFrameFlags) + 3)) != 0))) { goto commonCallerReturn; - goto l230; + goto l267; } closure = longAt(localFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(localFP + FoxMethod)))) < (startOfMemory()) ? (mframeCogMethod(localFP)->cmNumArgs) @@ -4176,11 +4161,11 @@ theMethod = longAt((home + BaseHeaderSize) + (MethodIndex << ShiftForWord)); if ((primitiveIndexOfMethodheader(theMethod, headerOf(theMethod))) == 198) { unwindContextOrNilOrZero = home; - goto l231; + goto l268; } } unwindContextOrNilOrZero = ctxtOrNilOrZero; - l231: /* end internalFindUnwindThroughContext: */; + l268: /* end internalFindUnwindThroughContext: */; if (unwindContextOrNilOrZero == GIV(nilObj)) {
/* error: can't find home on chain; cannot return */ @@ -4194,10 +4179,10 @@ : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) { assert(isContext(frameContext(localFP))); ourContext = longAt(localFP + FoxThisContext); - goto l232; + goto l269; } ourContext = marryFrameSP(localFP, localSP); - l232: /* end ensureFrameIsMarried:SP: */; + l269: /* end ensureFrameIsMarried:SP: */; /* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), ourContext); /* begin internalPush: */ @@ -4205,7 +4190,7 @@ GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorCannotReturn << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; - goto l230; + goto l267; } if (unwindContextOrNilOrZero != 0) { /* begin internalAboutToReturn:through: */ @@ -4217,10 +4202,10 @@ : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) { assert(isContext(frameContext(localFP))); ourContext1 = longAt(localFP + FoxThisContext); - goto l233; + goto l270; } ourContext1 = marryFrameSP(localFP, localSP); - l233: /* end ensureFrameIsMarried:SP: */; + l270: /* end ensureFrameIsMarried:SP: */; /* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), ourContext1); /* begin internalPush: */ @@ -4230,7 +4215,7 @@ GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorAboutToReturn << ShiftForWord)); GIV(argumentCount) = 2; goto normalSend; - goto l230; + goto l267; } contextToReturnTo = null; if (((longAt((home + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) { @@ -4289,10 +4274,10 @@ : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) { assert(isContext(frameContext(localFP))); ourContext2 = longAt(localFP + FoxThisContext); - goto l234; + goto l271; } ourContext2 = marryFrameSP(localFP, localSP); - l234: /* end ensureFrameIsMarried:SP: */; + l271: /* end ensureFrameIsMarried:SP: */; /* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), ourContext2); /* begin internalPush: */ @@ -4300,7 +4285,7 @@ GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorCannotReturn << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; - goto l230; + goto l267; } } assert(pageListIsWellFormed()); @@ -4416,7 +4401,7 @@ ; ceEnterCogCodePopReceiverReg(); null; - goto l230; + goto l267; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); } @@ -4436,7 +4421,7 @@
null; } - l230: /* end case */; + l267: /* end case */; break; case 121: /* returnTrue */ @@ -4558,27 +4543,27 @@ fp = (thePage->headFP); if (fp == theFP) { frameAbove = 0; - goto l236; + goto l273; } while (((callerFP = frameCallerFP(fp))) != 0) { if (callerFP == theFP) { frameAbove = fp; - goto l236; + goto l273; } fp = callerFP; } error("did not find theFP in stack page"); frameAbove = 0; - l236: /* end findFrameAbove:inPage: */; + l273: /* end findFrameAbove:inPage: */; /* begin newStackPage */ lruOrFree = (mostRecentlyUsedPage()->nextPage); if (isFree(lruOrFree)) { newPage = lruOrFree; - goto l237; + goto l274; } divorceFramesIn(lruOrFree); newPage = lruOrFree; - l237: /* end newStackPage */; + l274: /* end newStackPage */; assert(newPage == GIV(stackPage)); moveFramesInthroughtoPage(thePage, frameAbove, newPage); markStackPageMostRecentlyUsed(newPage); @@ -4602,7 +4587,7 @@ longAtput((sp2 = GIV(stackPointer) - BytesPerWord), GIV(instructionPointer)); GIV(stackPointer) = sp2; ceSendAborttonumArgs(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorCannotReturn << ShiftForWord)), contextToReturnFrom, 1); - goto l235; + goto l272; } GIV(instructionPointer) = 0; thePage = makeBaseFrameFor(contextToReturnTo); @@ -4641,7 +4626,7 @@ ; ceEnterCogCodePopReceiverReg(); null; - goto l235; + goto l272; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); } @@ -4661,7 +4646,7 @@ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
null; - goto l235; + goto l272; } /* begin frameCallerSavedIP: */ localIP = pointerForOop(longAt(localFP + FoxCallerSavedIP)); @@ -4691,7 +4676,7 @@ ; ceEnterCogCodePopReceiverReg(); null; - goto l235; + goto l272; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); } @@ -4710,7 +4695,7 @@
longAtPointerput(localSP, localReturnValue); } - l235: /* end case */; + l272: /* end case */; break; case 126: /* dynamicSuperSendBytecode */ @@ -4718,6 +4703,7 @@ sqInt mClassMixin; sqInt mixinApplication; sqInt rcvr; + sqInt ccIndex;
VM_LABEL(0dynamicSuperSendBytecode); GIV(argumentCount) = byteAtPointer(++localIP); @@ -4726,7 +4712,11 @@ GIV(messageSelector) = longAt((GIV(method) + BaseHeaderSize) + (((byteAtPointer(++localIP)) + LiteralStart) << ShiftForWord)); rcvr = longAtPointer(localSP + (GIV(argumentCount) * BytesPerOop)); mClassMixin = methodClassOf(GIV(method)); - mixinApplication = findApplicationOfTargetMixinstartingAtBehavior(mClassMixin, fetchClassOf(rcvr)); + mixinApplication = findApplicationOfTargetMixinstartingAtBehavior(mClassMixin, ((rcvr & 1) + ? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassInteger << ShiftForWord)) + : (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0 + ? (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask + : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))))); GIV(lkupClass) = longAt((mixinApplication + BaseHeaderSize) + (SuperclassIndex << ShiftForWord)); goto commonSend; } @@ -4934,23 +4924,11 @@
VM_LABEL(0normalSend); rcvr = longAtPointer(localSP + (GIV(argumentCount) * BytesPerOop)); - /* begin fetchClassOf: */ - if ((rcvr & 1)) { - GIV(lkupClass) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassInteger << ShiftForWord)); - goto l238; - } - if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) { - GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask; - goto l238; - } - else { - - /* look up compact class */ - - GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)); - goto l238; - } - l238: /* end fetchClassOf: */; + GIV(lkupClass) = ((rcvr & 1) + ? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassInteger << ShiftForWord)) + : (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0 + ? (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask + : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)))); assert(GIV(lkupClass) != (nilObject())); /* goto commonSend */ } @@ -5007,7 +4985,7 @@ GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod]; primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction])); ok = 1; - goto l242; + goto l278; }
/* second probe */ @@ -5018,7 +4996,7 @@ GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod]; primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction])); ok = 1; - goto l242; + goto l278; } probe = (((usqInt) hash) >> 2) & MethodCacheMask; if (((GIV(methodCache)[probe + MethodCacheSelector]) == GIV(messageSelector)) @@ -5026,10 +5004,10 @@ GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod]; primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction])); ok = 1; - goto l242; + goto l278; } ok = 0; - l242: /* end lookupInMethodCacheSel:class: */; + l278: /* end lookupInMethodCacheSel:class: */; if (ok) { /* begin ifAppropriateCompileToNativeCode:selector: */ VM_LABEL(0ifAppropriateCompileToNativeCodeselector); @@ -5084,31 +5062,31 @@ if (localPrimIndex >= 264) { longAtPointerput(localSP, longAt(((longAtPointer(localSP)) + BaseHeaderSize) + ((localPrimIndex - 264) << ShiftForWord))); 1; - goto l240; + goto l276; } if (localPrimIndex == 256) { 1; - goto l240; + goto l276; } if (localPrimIndex == 257) { longAtPointerput(localSP, GIV(trueObj)); 1; - goto l240; + goto l276; } if (localPrimIndex == 258) { longAtPointerput(localSP, GIV(falseObj)); 1; - goto l240; + goto l276; } if (localPrimIndex == 259) { longAtPointerput(localSP, GIV(nilObj)); 1; - goto l240; + goto l276; } longAtPointerput(localSP, (((localPrimIndex - 261) << 1) | 1)); 1; - l240: /* end internalQuickPrimitiveResponse */; - goto l239; + l276: /* end internalQuickPrimitiveResponse */; + goto l275; } /* begin externalizeIPandSP */ assert((((usqInt)localIP)) != (ceReturnToInterpreterPC())); @@ -5158,7 +5136,7 @@ returntoExecutive(popStack(), 1); browserPluginReturnIfNeeded(); null; - goto l239; + goto l275; } } if (methodHasCogMethod(GIV(newMethod))) { @@ -5248,11 +5226,11 @@ table = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (PrimErrTableIndex << ShiftForWord)); if (GIV(primFailCode) <= (((sqInt) (lastPointerOf(table)) >> 2))) { errorCode = longAt((table + BaseHeaderSize) + ((GIV(primFailCode) - 1) << ShiftForWord)); - goto l241; + goto l277; } } errorCode = ((GIV(primFailCode) << 1) | 1); - l241: /* end getErrorObjectFromPrimFailCode */; + l277: /* end getErrorObjectFromPrimFailCode */; longAtPointerput(localSP, errorCode); } GIV(primFailCode) = 0; @@ -5276,7 +5254,7 @@ localFP = pointerForOop(GIV(framePointer)); } } - l239: /* end internalExecuteNewMethod */; + l275: /* end internalExecuteNewMethod */; /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -6250,9 +6228,9 @@ char *sp; sqInt isFloat; double result1; - sqInt ccIndex; sqInt isFloat1; double result2; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimAdd); @@ -6285,19 +6263,24 @@ goto l14; } /* begin floatValueOf: */ - VM_LABEL(0floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; goto l16; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l20; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l16; + goto l20; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l20: /* end isClassOfNonImm:equalTo:compactClassIndex: */; l16: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; @@ -6318,19 +6301,24 @@ goto l15; } /* begin floatValueOf: */ - VM_LABEL(1floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; goto l18; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l21; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l18; + goto l21; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l21: /* end isClassOfNonImm:equalTo:compactClassIndex: */; l18: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; @@ -6380,9 +6368,9 @@ char *sp; sqInt isFloat; double result1; - sqInt ccIndex; sqInt isFloat1; double result2; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimSubtract); @@ -6397,7 +6385,7 @@ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
null; - goto l20; + goto l22; } } else { @@ -6412,69 +6400,79 @@ /* begin loadFloatOrIntFrom: */ if ((rcvr & 1)) { rcvr1 = ((double) ((rcvr >> 1)) ); - goto l21; + goto l23; } /* begin floatValueOf: */ - VM_LABEL(2floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; - goto l23; + goto l25; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l29; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l23; + goto l29; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l23: /* end is:instanceOf:compactClassIndex: */; + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l29: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l25: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; fetchFloatAtinto(rcvr + BaseHeaderSize, result1); rcvr1 = result1; - goto l24; + goto l26; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } rcvr1 = 0.0; - l24: /* end floatValueOf: */; - l21: /* end loadFloatOrIntFrom: */; + l26: /* end floatValueOf: */; + l23: /* end loadFloatOrIntFrom: */; /* begin loadFloatOrIntFrom: */ if ((arg & 1)) { arg1 = ((double) ((arg >> 1)) ); - goto l22; + goto l24; } /* begin floatValueOf: */ - VM_LABEL(3floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; - goto l25; + goto l27; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l30; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l25; + goto l30; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l25: /* end is:instanceOf:compactClassIndex: */; + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l30: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l27: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; fetchFloatAtinto(arg + BaseHeaderSize, result2); arg1 = result2; - goto l26; + goto l28; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } arg1 = 0.0; - l26: /* end floatValueOf: */; - l22: /* end loadFloatOrIntFrom: */; + l28: /* end floatValueOf: */; + l24: /* end loadFloatOrIntFrom: */; if (!GIV(primFailCode)) { /* begin pop:thenPushFloat: */ longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), floatObjectOf(rcvr1 - arg1)); @@ -6490,14 +6488,14 @@ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
null; - goto l20; + goto l22; } } GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((1 * 2) << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; } - l20: /* end case */; + l22: /* end case */; break; case 178: /* bytecodePrimLessThan */ @@ -6509,9 +6507,9 @@ double rcvr1; sqInt isFloat; double result; - sqInt ccIndex; sqInt isFloat1; double result1; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimLessThan); @@ -6530,7 +6528,7 @@ goto booleanCheatFalse; } null; - goto l27; + goto l31; } /* begin initPrimCall */ GIV(primFailCode) = 0; @@ -6538,69 +6536,79 @@ /* begin loadFloatOrIntFrom: */ if ((rcvr & 1)) { rcvr1 = ((double) ((rcvr >> 1)) ); - goto l28; + goto l32; } /* begin floatValueOf: */ - VM_LABEL(4floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; - goto l30; + goto l34; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l38; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l30; + goto l38; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l30: /* end is:instanceOf:compactClassIndex: */; + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l38: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l34: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; fetchFloatAtinto(rcvr + BaseHeaderSize, result); rcvr1 = result; - goto l31; + goto l35; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } rcvr1 = 0.0; - l31: /* end floatValueOf: */; - l28: /* end loadFloatOrIntFrom: */; + l35: /* end floatValueOf: */; + l32: /* end loadFloatOrIntFrom: */; /* begin loadFloatOrIntFrom: */ if ((arg & 1)) { arg1 = ((double) ((arg >> 1)) ); - goto l29; + goto l33; } /* begin floatValueOf: */ - VM_LABEL(5floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; - goto l32; + goto l36; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l39; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l32; + goto l39; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l32: /* end is:instanceOf:compactClassIndex: */; + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l39: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l36: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; fetchFloatAtinto(arg + BaseHeaderSize, result1); arg1 = result1; - goto l33; + goto l37; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } arg1 = 0.0; - l33: /* end floatValueOf: */; - l29: /* end loadFloatOrIntFrom: */; + l37: /* end floatValueOf: */; + l33: /* end loadFloatOrIntFrom: */; aBool = rcvr1 < arg1; if (!GIV(primFailCode)) { /* begin booleanCheat: */ @@ -6611,13 +6619,13 @@ goto booleanCheatFalse; } null; - goto l27; + goto l31; } GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((2 * 2) << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; } - l27: /* end case */; + l31: /* end case */; booleanCheatTrue: /* booleanCheatTrue */ @@ -6642,7 +6650,7 @@ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
null; - goto l243; + goto l279; } if (bytecode == 172) {
@@ -6653,7 +6661,7 @@ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
null; - goto l243; + goto l279; } if (bytecode > 167) {
@@ -6665,7 +6673,7 @@ currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
null; - goto l243; + goto l279; } } currentBytecode = bytecode + GIV(bytecodeSetSelector); @@ -6673,7 +6681,7 @@ /* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), GIV(trueObj)); } - l243: /* end case */; + l279: /* end case */; break; case 179: /* bytecodePrimGreaterThan */ @@ -6685,9 +6693,9 @@ double rcvr1; sqInt isFloat; double result; - sqInt ccIndex; sqInt isFloat1; double result1; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimGreaterThan); @@ -6706,7 +6714,7 @@ /* goto booleanCheatFalse */ } null; - goto l34; + goto l40; } /* begin initPrimCall */ GIV(primFailCode) = 0; @@ -6714,69 +6722,79 @@ /* begin loadFloatOrIntFrom: */ if ((rcvr & 1)) { rcvr1 = ((double) ((rcvr >> 1)) ); - goto l35; + goto l41; } /* begin floatValueOf: */ - VM_LABEL(6floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; - goto l37; + goto l43; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l47; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l37; + goto l47; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l37: /* end is:instanceOf:compactClassIndex: */; + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l47: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l43: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; fetchFloatAtinto(rcvr + BaseHeaderSize, result); rcvr1 = result; - goto l38; + goto l44; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } rcvr1 = 0.0; - l38: /* end floatValueOf: */; - l35: /* end loadFloatOrIntFrom: */; + l44: /* end floatValueOf: */; + l41: /* end loadFloatOrIntFrom: */; /* begin loadFloatOrIntFrom: */ if ((arg & 1)) { arg1 = ((double) ((arg >> 1)) ); - goto l36; + goto l42; } /* begin floatValueOf: */ - VM_LABEL(7floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; - goto l39; + goto l45; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l48; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l39; + goto l48; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l39: /* end is:instanceOf:compactClassIndex: */; + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l48: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l45: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; fetchFloatAtinto(arg + BaseHeaderSize, result1); arg1 = result1; - goto l40; + goto l46; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } arg1 = 0.0; - l40: /* end floatValueOf: */; - l36: /* end loadFloatOrIntFrom: */; + l46: /* end floatValueOf: */; + l42: /* end loadFloatOrIntFrom: */; aBool = rcvr1 > arg1; if (!GIV(primFailCode)) { /* begin booleanCheat: */ @@ -6787,13 +6805,13 @@ goto booleanCheatFalse; } null; - goto l34; + goto l40; } GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((3 * 2) << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; } - l34: /* end case */; + l40: /* end case */; booleanCheatFalse: /* booleanCheatFalse */ @@ -6818,7 +6836,7 @@ currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
null; - goto l244; + goto l280; } if (bytecode == 172) {
@@ -6830,14 +6848,14 @@ currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
null; - goto l244; + goto l280; } currentBytecode = bytecode + GIV(bytecodeSetSelector);
/* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), GIV(falseObj)); } - l244: /* end case */; + l280: /* end case */; break; case 180: /* bytecodePrimLessOrEqual */ @@ -6849,9 +6867,9 @@ double rcvr1; sqInt isFloat; double result; - sqInt ccIndex; sqInt isFloat1; double result1; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimLessOrEqual); @@ -6870,7 +6888,7 @@ goto booleanCheatFalse; } null; - goto l41; + goto l49; } /* begin initPrimCall */ GIV(primFailCode) = 0; @@ -6878,69 +6896,79 @@ /* begin loadFloatOrIntFrom: */ if ((rcvr & 1)) { rcvr1 = ((double) ((rcvr >> 1)) ); - goto l42; + goto l50; } /* begin floatValueOf: */ - VM_LABEL(8floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; - goto l44; + goto l52; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l56; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l44; + goto l56; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l44: /* end is:instanceOf:compactClassIndex: */; + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l56: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l52: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; fetchFloatAtinto(rcvr + BaseHeaderSize, result); rcvr1 = result; - goto l45; + goto l53; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } rcvr1 = 0.0; - l45: /* end floatValueOf: */; - l42: /* end loadFloatOrIntFrom: */; + l53: /* end floatValueOf: */; + l50: /* end loadFloatOrIntFrom: */; /* begin loadFloatOrIntFrom: */ if ((arg & 1)) { arg1 = ((double) ((arg >> 1)) ); - goto l43; + goto l51; } /* begin floatValueOf: */ - VM_LABEL(9floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; - goto l46; + goto l54; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l57; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l46; + goto l57; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l46: /* end is:instanceOf:compactClassIndex: */; + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l57: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l54: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; fetchFloatAtinto(arg + BaseHeaderSize, result1); arg1 = result1; - goto l47; + goto l55; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } arg1 = 0.0; - l47: /* end floatValueOf: */; - l43: /* end loadFloatOrIntFrom: */; + l55: /* end floatValueOf: */; + l51: /* end loadFloatOrIntFrom: */; aBool = rcvr1 <= arg1; if (!GIV(primFailCode)) { /* begin booleanCheat: */ @@ -6951,13 +6979,13 @@ goto booleanCheatFalse; } null; - goto l41; + goto l49; } GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((4 * 2) << ShiftForWord)); GIV(argumentCount) = 1; goto normalSend; } - l41: /* end case */; + l49: /* end case */; break; case 181: /* bytecodePrimGreaterOrEqual */ @@ -6969,9 +6997,9 @@ double rcvr1; sqInt isFloat; double result; - sqInt ccIndex; sqInt isFloat1; double result1; + sqInt ccIndex; sqInt ccIndex1;
VM_LABEL(0bytecodePrimGreaterOrEqual); @@ -6990,7 +7018,7 @@ goto booleanCheatFalse; } null; - goto l48; + goto l58; } /* begin initPrimCall */ GIV(primFailCode) = 0; @@ -6998,69 +7026,79 @@ /* begin loadFloatOrIntFrom: */ if ((rcvr & 1)) { rcvr1 = ((double) ((rcvr >> 1)) ); - goto l49; + goto l59; } /* begin floatValueOf: */ - VM_LABEL(10floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((rcvr & 1)) { isFloat = 0; - goto l51; + goto l61; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((rcvr & 1))); ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31; + if (ccIndex == 0) { + isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l65; + } if (ClassFloatCompactIndex != 0) { isFloat = ClassFloatCompactIndex == ccIndex; - goto l51; + goto l65; } - isFloat = (ccIndex == 0) - && (((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l51: /* end is:instanceOf:compactClassIndex: */; + isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))); + l65: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l61: /* end is:instanceOf:compactClassIndex: */; if (isFloat) { ; fetchFloatAtinto(rcvr + BaseHeaderSize, result); rcvr1 = result; - goto l52; + goto l62; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } rcvr1 = 0.0; - l52: /* end floatValueOf: */; - l49: /* end loadFloatOrIntFrom: */; + l62: /* end floatValueOf: */; + l59: /* end loadFloatOrIntFrom: */; /* begin loadFloatOrIntFrom: */ if ((arg & 1)) { arg1 = ((double) ((arg >> 1)) ); - goto l50; + goto l60; } /* begin floatValueOf: */ - VM_LABEL(11floatValueOf); /* begin is:instanceOf:compactClassIndex: */ if ((arg & 1)) { isFloat1 = 0; - goto l53; + goto l63; } + /* begin isClassOfNonImm:equalTo:compactClassIndex: */ + assert(!((arg & 1))); ccIndex1 = (((usqInt) (longAt(arg))) >> 12) & 31; + if (ccIndex1 == 0) { + isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))); + goto l66; + } if (ClassFloatCompactIndex != 0) { isFloat1 = ClassFloatCompactIndex == ccIndex1; - goto l53; + goto l66; } - isFloat1 = (ccIndex1 == 0) - && (((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)))); - l53: /* end is:instanceOf:compactClassIndex: */; + isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord))); + l66: /* end isClassOfNonImm:equalTo:compactClassIndex: */; + l63: /* end is:instanceOf:compactClassIndex: */; if (isFloat1) { ; fetchFloatAtinto(arg + BaseHeaderSize, result1); arg1 = result1; - goto l54; + goto l64; } /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } arg1 = 0.0; - l54: /* end floatValueOf: */; - l50: /* end loadFloatOrIntFrom: */; + l64: /* end floatValueOf: */; + l60: /* end loadFloatOrIntFrom: */; aBool = rcvr1 >= arg1; if (!GIV(primFailCode)) { /* begin booleanCheat: */ @@ -7071,13 +7109,13 @@ goto booleanCheatFalse;
@@ Diff output truncated at 50000 characters. @@
vm-dev@lists.squeakfoundation.org