Revision: 3064 Author: eliot Date: 2014-08-26 01:52:44 -0700 (Tue, 26 Aug 2014) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.865
Sista: Fix primitiveSistaMethodPICAndCounterData after the VMMaker.oscog-eem.814 change moving counters to the heap. Add several modifications to the current image facade so we can get the send and branch data for an in-image compilation. Fix header printing of counters and IR caches.
Implement genBinaryConstOpVarInlinePrimitive: & genBinaryVarOpConstInlinePrimitive: and correct genBinaryVarOpVarInlinePrimitive: for Slang.
V3: Fix bug with become where duplicate entries in the input array would crash the system (thanks Igor).
Spur: Add an assert to check for a valid mehtodClassAssociation in methods (arguably dubious) to help catch malformed methods in multiple bytecode shenannigans.
Reduce the possibility for heisenbugs by providing noFixupFollowField:ofObject: and using it in debugging code.
General: Make nameOfClass: more robust, in both the real and simulated VMs.
Modified Paths: -------------- branches/Cog/image/BuildSqueak45VMMakerImage.st branches/Cog/image/LoadSpurPackagesFromTempDir.st branches/Cog/image/WriteSpurPackagesToTempDir.st branches/Cog/image/buildspurtrunkimage.sh branches/Cog/image/getGoodCogVM.sh branches/Cog/image/getGoodSpurVM.sh 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/nscogsrc/vm/interp.h 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/stacksrc/vm/gcc3x-interp.c branches/Cog/stacksrc/vm/interp.c
Added Paths: ----------- branches/Cog/image/uploadspurimage.sh
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/image/BuildSqueak45VMMakerImage.st =================================================================== --- branches/Cog/image/BuildSqueak45VMMakerImage.st 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/BuildSqueak45VMMakerImage.st 2014-08-26 08:52:44 UTC (rev 3064) @@ -23,6 +23,10 @@ {repository. order. packages}] valueWithArguments: tuple]) sort: [:a :b| a second <= b second].
+Character instSize > 0 ifTrue: + [#('callPrimitiveShimForV3.st') do: + [:fileName| (FileDirectory default fileNamed: fileName) fileIn]]. + ((MCMcmUpdater defaultUpdateURL endsWith: 'trunk') ifTrue: [#( "'FT2Constants.st'" Modified: branches/Cog/image/LoadSpurPackagesFromTempDir.st =================================================================== --- branches/Cog/image/LoadSpurPackagesFromTempDir.st 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/LoadSpurPackagesFromTempDir.st 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,7 +1,9 @@ | dir tempRepo | dir := FileDirectory default directoryNamed: 'temp-spur-repository'. tempRepo := MCDirectoryRepository path: dir fullName. -#('Collections' 'Kernel' 'System') do: +"I dug a deep hole with the compiler changes here. This hack gets me out." +EncoderForV3 removeSelector: #computeMethodHeaderForNumArgs:numTemps:numLits:primitive:. +#('Collections' 'Compiler' 'Kernel' 'System') do: [:package| | versionName version | versionName := (tempRepo versionNamesForPackageNamed: package) first. version := tempRepo versionNamed: versionName. Modified: branches/Cog/image/WriteSpurPackagesToTempDir.st =================================================================== --- branches/Cog/image/WriteSpurPackagesToTempDir.st 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/WriteSpurPackagesToTempDir.st 2014-08-26 08:52:44 UTC (rev 3064) @@ -3,7 +3,7 @@ dir assureExistence. tempRepo := MCDirectoryRepository path: dir fullName. trunkRepo := MCRepositoryGroup default repositories detect:[:r| r description = 'http://source.squeak.org/trunk']. -#('Collections' 'Kernel' 'System') do: +#('Collections' 'Compiler' 'Kernel' 'System') do: [:package| | currentVersion | currentVersion := (MCPackage named: package) workingCopy ancestry ancestors first versionName. tempRepo storeVersion: (trunkRepo versionNamed: currentVersion, '.mcz')]. Modified: branches/Cog/image/buildspurtrunkimage.sh =================================================================== --- branches/Cog/image/buildspurtrunkimage.sh 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/buildspurtrunkimage.sh 2014-08-26 08:52:44 UTC (rev 3064) @@ -3,7 +3,7 @@ ./getsqueak45.sh . ./getGoodCogVM.sh
-if [ "$1" -ne -skiptrunkbuild ]; then +if [ "$1" != -skiptrunkbuild ]; then cp -p $SQUEAK45.image trunk46forspur.image cp -p $SQUEAK45.changes trunk46forspur.changes
@@ -52,5 +52,5 @@
# Now load the modified packages . ./getGoodSpurVM.sh -echo $VM trunk46-spur.image LoadSpurPackagesFromTempDir.st -$VM trunk46-spur.image LoadSpurPackagesFromTempDir.st +echo $VM -blockonerror trunk46-spur.image LoadSpurPackagesFromTempDir.st +$VM -blockonerror trunk46-spur.image LoadSpurPackagesFromTempDir.st
Modified: branches/Cog/image/getGoodCogVM.sh =================================================================== --- branches/Cog/image/getGoodCogVM.sh 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/getGoodCogVM.sh 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,31 +1,31 @@ #!/bin/sh -# Sets the VM env var to the r3060 Cog VM for the current platform. +# Sets the VM env var to the r3063 Cog VM for the current platform. # will download and install the VM in this directory if necessary.
-TAG=14.31.3060 -REV=3060 +TAG=14.32.3063 +REV=3063 URL=http://www.mirandabanda.org/files/Cog/VM/VM.r$REV/
. ./envvars.sh
case "$OS" in Darwin) get_vm_from_tar \ - Cog.app/Contents/MacOS/Squeak b9d79576423fe79f9f77383f676d37d6 \ - Cog.app-$TAG.tgz 2d93340bed9902bd8913067f372c7371 + Cog.app/Contents/MacOS/Squeak efd6128a2e0ca36035bbe5ace4fd8e80 \ + Cog.app-$TAG.tgz 658e5e3a5085529959a744c11b78f7d9 VM=Cog.app/Contents/MacOS/Squeak;; Linux) if expr $OSREL > 2.6.12; then get_vm_from_tar \ - coglinuxht/lib/squeak/4.0-$REV/squeak 35c003d9bd2c614850ca5b99c86155e9 \ - coglinuxht-$TAG.tgz a9e34f56f4923fff1ab4fc82f6ec93a0 + coglinuxht/lib/squeak/4.0-$REV/squeak badd6e33775c1176e478b2262cffe177 \ + coglinuxht-$TAG.tgz 1b58e26c4c6c92ca8b141e94c04b0ed9 else get_vm_from_tar \ - coglinux/lib/squeak/4.0-$REV/squeak 8327eef0d7dda150f3fcf809df940bf5 \ - coglinux-$TAG.tgz 81466c4732d2fa5d8aec991938e714c8 + coglinux/lib/squeak/4.0-$REV/squeak 817f87fa0cf4b7d90ef9599d7b762fe5 \ + coglinux-$TAG.tgz 1394d1bfd1749b711a2266621dc8ff5b fi;; CYGWIN*) get_vm_from_zip \ - cogwin/SqueakConsole.exe 6655d9ea5c7f0919f61a9cf5ad58b202 \ - cogwin-$TAG.zip 8fa6ba2df26e72342889b0279f17bb6d + cogwin/SqueakConsole.exe 8edd0cc2355232726330ecbc967c7ce0 \ + cogwin-$TAG.zip 888ca7a978e34176763c8be34fa13860 VM=cogwin/SqueakConsole.exe;; *) echo "don't know how to run Squeak on your system. bailing out." 1>&2; exit 2 esac
Modified: branches/Cog/image/getGoodSpurVM.sh =================================================================== --- branches/Cog/image/getGoodSpurVM.sh 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/image/getGoodSpurVM.sh 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,25 +1,25 @@ #!/bin/sh -# Sets the VM env var to the r3060 Cog Spur VM for the current platform. +# Sets the VM env var to the r3063 Cog Spur VM for the current platform. # will download and install the VM in this directory if necessary.
-TAG=14.31.3060 -REV=3060 +TAG=14.32.3063 +REV=3063 URL=http://www.mirandabanda.org/files/Cog/VM/VM.r$REV/
. ./envvars.sh
case "$OS" in Darwin) get_vm_from_tar \ - CogSpur.app/Contents/MacOS/Squeak d71657f3596108f1ee26ddde98d2a6e1 \ - CogSpur.app-$TAG.tgz 775fc34a65293eb7c6b1fe585b29343c + CogSpur.app/Contents/MacOS/Squeak 80a55ecfb5abeabf3890c87898ee5914 \ + CogSpur.app-$TAG.tgz 741a5355c22f20cda33db969bb5e3d7a VM=CogSpur.app/Contents/MacOS/Squeak;; Linux) get_vm_from_tar \ - cogspurlinuxht/lib/squeak/4.0-$REV/squeak c0df39147de2ac7d76aee7d7aa073f36 \ - cogspurlinuxht-$TAG.tgz 70421b720be1f5f843c96b48fbe8d07e + cogspurlinuxht/lib/squeak/4.0-$REV/squeak \ + cogspurlinuxht-$TAG.tgz af8988545c1042a9813e3166390af6cb VM=cogspurlinuxht/squeak;; CYGWIN*) get_vm_from_zip \ - cogspurwin/SqueakConsole.exe 83454062da3b7855b81e3fb5a8c6d360 \ - cogspurwin-$TAG.zip 463d2fe92c95f4c7083ac37cd9baf84f + cogspurwin/SqueakConsole.exe a7bc32115050dab7e9060e8391025c4e \ + cogspurwin-$TAG.zip 6945ef0ff89bc5c1da00f6076868f3e6 VM=cogspurwin/SqueakConsole.exe;; *) echo "don't know how to run Squeak on your system. bailing out." 1>&2; exit 2 esac
Added: branches/Cog/image/uploadspurimage.sh =================================================================== --- branches/Cog/image/uploadspurimage.sh (rev 0) +++ branches/Cog/image/uploadspurimage.sh 2014-08-26 08:52:44 UTC (rev 3064) @@ -0,0 +1,22 @@ +#!/bin/sh +# Upload a trunk46-spur.image/.changes to mirandabanda.org +RemoteUser=eliotmiranda@highland-park.dreamhost.com +RemoteRoot=mirandabanda.org/files/Cog/SpurImages +IFS=" +" +DATE=`date +%Y-%m-%d` +BASENAME=trunk46-spur +cd `dirname $0` + +DIR=$RemoteRoot/$DATE +echo ssh -x $RemoteUser mkdir $DIR +ssh -x $RemoteUser mkdir $DIR +echo scp -p $BASENAME.image $BASENAME.changes "$@" $RemoteUser:$DIR +scp -p $BASENAME.image $BASENAME.changes "$@" $RemoteUser:$DIR +echo ssh $RemoteUser chmod a-w $DIR/* \; ls -al $DIR +ssh $RemoteUser chmod a-w $DIR/* ; ls -al $DIR +echo ssh $RemoteUser rm $RemoteRoot/{$BASENAME.image,$BASENAME.changes} +ssh $RemoteUser rm $RemoteRoot/{$BASENAME.image,$BASENAME.changes} +echo ssh $RemoteUser ln -s $DIR/{$BASENAME.image,$BASENAME.changes} $RemoteRoot +ssh $RemoteUser ln -s $DIR/{$BASENAME.image,$BASENAME.changes} $RemoteRoot +ssh $RemoteUser ls -l $RemoteRoot
Property changes on: branches/Cog/image/uploadspurimage.sh ___________________________________________________________________ Added: svn:executable + *
Modified: branches/Cog/nscogsrc/vm/cogit.c =================================================================== --- branches/Cog/nscogsrc/vm/cogit.c 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/nscogsrc/vm/cogit.c 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 + CCodeGenerator VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 from - StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 + StackToRegisterMappingCogit VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -120,6 +120,7 @@ #define AlignmentNops 2 #define AllButTypeMask 0xFFFFFFFCUL #define AltBlockCreationBytecodeSize 3 +#define AltFirstSpecialSelector 80 #define AltNSSendIsPCAnnotated 0 #define AndCqR 93 #define AndCwR 100 @@ -183,6 +184,7 @@ #define FirstAnnotation 64 #define FirstJump 12 #define FirstShortJump 15 +#define FirstSpecialSelector 176 #define FoxCallerSavedIP 4 #define FoxMethod -4 #define FoxMFReceiver -12 @@ -385,6 +387,7 @@
static sqInt abstractRegisterForConcreteRegister(AbstractInstruction * self_in_abstractRegisterForConcreteRegister, sqInt reg) NoDbgRegParms; static AbstractInstruction * addDependent(AbstractInstruction * self_in_addDependent, AbstractInstruction *anInstruction) NoDbgRegParms; +static sqInt availableRegisterOrNilFor(AbstractInstruction * self_in_availableRegisterOrNilFor, sqInt liveRegsMask) NoDbgRegParms; static sqInt computeJumpTargetOffsetPlus(AbstractInstruction * self_in_computeJumpTargetOffsetPlus, sqInt anPCOffset) NoDbgRegParms; static sqInt concretizeLabel(AbstractInstruction * self_in_concretizeLabel) NoDbgRegParms; static sqInt genAlignCStackSavingRegistersnumArgswordAlignment(AbstractInstruction * self_in_genAlignCStackSavingRegistersnumArgswordAlignment, sqInt saveRegs, sqInt numArgs, sqInt alignment) NoDbgRegParms; @@ -492,7 +495,6 @@ static sqInt concretizeXCHGRR(AbstractInstruction * self_in_concretizeXCHGRR) NoDbgRegParms; static sqInt concretizeXorCwR(AbstractInstruction * self_in_concretizeXorCwR) NoDbgRegParms; static sqInt concretizeXorRR(AbstractInstruction * self_in_concretizeXorRR) NoDbgRegParms; -static sqInt counterTargetFromFollowingAddress(AbstractInstruction * self_in_counterTargetFromFollowingAddress, sqInt nextInstructionAddress) NoDbgRegParms; static sqInt cResultRegister(AbstractInstruction * self_in_cResultRegister) NoDbgRegParms; static void dispatchConcretize(AbstractInstruction * self_in_dispatchConcretize) NoDbgRegParms; static AbstractInstruction * genDivRRQuoRem(AbstractInstruction * self_in_genDivRRQuoRem, sqInt abstractRegDivisor, sqInt abstractRegDividend, sqInt abstractRegQuotient, sqInt abstractRegRemainder) NoDbgRegParms; @@ -2094,6 +2096,7 @@ #define ceCheckFeatures() ceCheckFeaturesFunction() #define ceReturnToInterpreterPC() ((usqInt)ceReturnToInterpreterTrampoline) #define cFramePointerAddress() ((unsigned long)&CFramePointer) +#define compileSendTrace() (traceFlags & 2) #define cr() putchar('\n') #define cStackPointerAddress() ((unsigned long)&CStackPointer) #define dynSuperEntryOffset() cmDynSuperEntryOffset @@ -2183,6 +2186,31 @@ }
+/* Answer an unused abstract register in the liveRegMask. + Subclasses with more registers can override to answer them. */ + +static sqInt +availableRegisterOrNilFor(AbstractInstruction * self_in_availableRegisterOrNilFor, sqInt liveRegsMask) +{ + if (!(liveRegsMask & (registerMaskFor(Arg1Reg)))) { + return Arg1Reg; + } + if (!(liveRegsMask & (registerMaskFor(Arg0Reg)))) { + return Arg0Reg; + } + if (!(liveRegsMask & (registerMaskFor(SendNumArgsReg)))) { + return SendNumArgsReg; + } + if (!(liveRegsMask & (registerMaskFor(ClassReg)))) { + return ClassReg; + } + if (!(liveRegsMask & (registerMaskFor(ReceiverResultReg)))) { + return ReceiverResultReg; + } + return null; +} + + /* Since it's an extraction from other methods. */
static sqInt @@ -4675,17 +4703,6 @@ }
-/* Answer the address of the MoveAw:R or MoveR:Aw: instruction preceeding - nextInstructionAddress - */ - -static sqInt -counterTargetFromFollowingAddress(AbstractInstruction * self_in_counterTargetFromFollowingAddress, sqInt nextInstructionAddress) -{ - return literalBeforeFollowingAddress(self_in_counterTargetFromFollowingAddress, nextInstructionAddress); -} - - /* Answer the abstract register for the C result register. Only partially implemented. Works on x86 since TempReg = EAX = C result reg. */ @@ -8663,7 +8680,6 @@ ? nExts + 1 : 0); } - /* begin maybeRememberPrevMap:absPCMcpc: */ } else { mcpc1 += (mapByte >= DisplacementX2N @@ -10268,7 +10284,7 @@ genoperand(JumpNonZero, ((sqInt)sendMiss)); /* begin Label */ noCheckEntry = genoperandoperand(Label, (labelCounter += 1), bytecodePC); - if (recordSendTrace()) { + if (compileSendTrace()) { CallRT(ceTraceLinkedSendTrampoline); } } @@ -10694,7 +10710,7 @@ } (method->cmUsageCount = initialMethodUsageCount()); (method->cpicHasMNUCase = 0); - (method->cmUsesPenultimateLit = maxLitIndex >= ((literalCountOfHeader(methodHeader)) - 2)); + (method->cmUsesPenultimateLit = maxLitIndex >= ((literalCountOfMethodHeader(methodHeader)) - 2)); (method->blockEntryOffset = (blockEntryLabel != null ? ((blockEntryLabel->address)) - (((sqInt)method)) : 0)); @@ -12990,7 +13006,7 @@ { sqInt *address; sqInt *address1; - usqInt cacheAddress; + sqInt cacheAddress; sqInt cacheTag; sqInt cacheTag1; sqInt cacheTagMarked; @@ -13123,7 +13139,7 @@ markLiteralspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod) { sqInt *address; - usqInt cacheAddress; + sqInt cacheAddress; sqInt cacheTag; sqInt cacheTag1; sqInt class; @@ -13239,7 +13255,7 @@ static sqInt markYoungObjectspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod) { - usqInt cacheAddress; + sqInt cacheAddress; sqInt cacheTag; sqInt cacheTag1; sqInt class; @@ -13530,7 +13546,6 @@ ? nExts + 1 : 0); } - /* begin maybeRememberPrevMap:absPCMcpc: */ } else { mcpc += (mapByte >= DisplacementX2N @@ -13559,14 +13574,14 @@ sqInt li; sqInt numLitsA;
- headerA = headerOf(methodA); - headerB = headerOf(methodB); - numLitsA = literalCountOfHeader(headerA); + headerA = methodHeaderOf(methodA); + headerB = methodHeaderOf(methodB); + numLitsA = literalCountOfMethodHeader(headerA); endPCA = endPCOf(methodA); if (((argumentCountOfMethodHeader(headerA)) != (argumentCountOfMethodHeader(headerB))) || (((temporaryCountOfMethodHeader(headerA)) != (temporaryCountOfMethodHeader(headerB))) || (((primitiveIndexOfMethodheader(methodA, headerA)) != (primitiveIndexOfMethodheader(methodB, headerB))) - || ((numLitsA != (literalCountOfHeader(headerB))) + || ((numLitsA != (literalCountOfMethodHeader(headerB))) || (endPCA > (numBytesOf(methodB))))))) { return 0; } @@ -13619,7 +13634,7 @@ static sqInt noAssertMethodClassAssociationOf(sqInt methodPointer) { - return literalofMethod((literalCountOfHeader(noAssertHeaderOf(methodPointer))) - 1, methodPointer); + return literalofMethod((literalCountOfMethodHeader(noAssertHeaderOf(methodPointer))) - 1, methodPointer); }
@@ -14086,7 +14101,7 @@ static sqInt remapIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr) { - usqInt cacheAddress; + sqInt cacheAddress; sqInt cacheTag; sqInt cacheTag1; sqInt entryPoint; @@ -14850,7 +14865,7 @@ static void voidImplicitReceiverCacheAt(sqInt mcpc) { - usqInt cacheAddress; + sqInt cacheAddress;
assert(NumOopsPerIRC == 2); cacheAddress = (((usqInt)mcpc)) + (jumpShortByteSize(backEnd)); @@ -17065,9 +17080,13 @@ }
-/* 249 11111001 i i i i i i i i jjjjjjjj Call Primitive #iiiiiiii + +/* V3PlusClosures: 139 10001011 iiiiiiii jjjjjjjj Call Primitive #iiiiiiii + (jjjjjjjj * 256) - */ + NewsqueakV4: 249 11111001 iiiiiiii jjjjjjjj Call Primitive #iiiiiiii + + (jjjjjjjj * 256) + SistaV1: 248 11111000 iiiiiiii mjjjjjjj Call Primitive #iiiiiiii + ( + jjjjjjj * 256) + m=1 means inlined primitive, no hard return after execution. */
static sqInt callPrimitiveBytecode(void) @@ -18417,8 +18436,8 @@ sqInt selector;
index = byte0 - ((bytecodeSetOffset == 256 - ? 80 + 256 - : 176)); + ? AltFirstSpecialSelector + 256 + : FirstSpecialSelector)); selector = specialSelector(index); numArgs = specialSelectorNumArgs(index); return genSendnumArgs(selector, numArgs); @@ -19209,7 +19228,7 @@ if (!needsFrame) { return 0; } - methodHeader = headerOf(methodObj); + methodHeader = methodHeaderOf(methodObj); /* begin PushR: */ genoperand(PushR, FPReg); @@ -21503,8 +21522,8 @@ genoperandoperand(MoveCqR, argInt, Arg0Reg); } genMarshalledSendnumArgs(specialSelector(byte0 - ((bytecodeSetOffset == 256 - ? 80 + 256 - : 176))), 1); + ? AltFirstSpecialSelector + 256 + : FirstSpecialSelector))), 1); jmpTarget(jumpContinue, gLabel()); return 0; } @@ -21660,8 +21679,8 @@ genoperandoperand(MoveCqR, argInt, Arg0Reg); } return genMarshalledSendnumArgs(specialSelector(byte0 - ((bytecodeSetOffset == 256 - ? 80 + 256 - : 176))), 1); + ? AltFirstSpecialSelector + 256 + : FirstSpecialSelector))), 1); }
static sqInt
Modified: branches/Cog/nscogsrc/vm/cogit.h =================================================================== --- branches/Cog/nscogsrc/vm/cogit.h 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/nscogsrc/vm/cogit.h 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 + CCodeGenerator VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 */
@@ -134,6 +134,7 @@ #define ceBaseFrameReturnPC() ceBaseFrameReturnTrampoline #define ceCannotResumePC() ((usqInt)ceCannotResumeTrampoline) #define ceReturnToInterpreterPC() ((usqInt)ceReturnToInterpreterTrampoline) +#define compileSendTrace() (traceFlags & 2) #define dynSuperEntryOffset() cmDynSuperEntryOffset #define entryOffset() cmEntryOffset #define getCFramePointer() CFramePointer
Modified: branches/Cog/nscogsrc/vm/cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.c 2014-08-14 19:43:38 UTC (rev 3063) +++ branches/Cog/nscogsrc/vm/cointerp.c 2014-08-26 08:52:44 UTC (rev 3064) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 from - CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 + CoInterpreter VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.848 uuid: 2aa6755a-a96a-4834-bc08-5c0a831c4648 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.865 uuid: 4efffc12-280e-4060-b741-9066fb3fc970 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -458,7 +458,6 @@ sqInt getCheckAllocFiller(void); sqInt getCurrentBytecode(void); static sqInt handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage) NoDbgRegParms; -sqInt headerOf(sqInt methodPointer); static sqInt iframeIsBlockActivation(char *theFP) NoDbgRegParms; static sqInt iframeReceiver(char *theFP) NoDbgRegParms; static sqInt iframeSavedIP(char *theFP) NoDbgRegParms; @@ -792,9 +791,11 @@ static sqInt copyObjtoSegmentaddrstopAtsaveOopAtheaderAt(sqInt oop, sqInt segmentWordArray, sqInt lastSeg, sqInt stopAddr, sqInt oopPtr, sqInt hdrPtr) NoDbgRegParms; usqInt freeStartAddress(void); sqInt isReallyYoungObject(sqInt obj); +sqInt methodHeaderOf(sqInt methodObj); sqInt noShiftCompactClassIndexOf(sqInt oop); sqInt 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)); usqInt youngStartAddress(void); @@ -830,11 +831,12 @@ static void initializeObjectMemory(sqInt bytesToShift) NoDbgRegParms; static sqInt isContextHeader(sqInt aHeader) NoDbgRegParms; sqInt isYoungObject(sqInt obj); -sqInt lastPointerOf(sqInt oop); +sqInt lastPointerOf(sqInt objOop); sqInt leakCheckBecome(void); sqInt leakCheckFullGC(void); sqInt leakCheckIncrementalGC(void); sqInt leakCheckNewSpaceGC(void); +sqInt literalCountOfMethodHeader(sqInt header); static sqInt loadImageSegmentFromoutPointers(sqInt segmentWordArray, sqInt outPointerArray) NoDbgRegParms; void longPrintReferencesTo(sqInt anOop); static void mapPointersInObjectsFromto(sqInt memStart, sqInt memEnd) NoDbgRegParms; @@ -850,7 +852,7 @@ void printWronglySizedContexts(sqInt printContexts); static void restoreHeadersFromtofromandtofrom(sqInt firstIn, sqInt lastIn, sqInt hdrBaseIn, sqInt firstOut, sqInt lastOut, sqInt hdrBaseOut) NoDbgRegParms; static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms; -static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms; +static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms; static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms; static sqInt shortentoIndexableSize(sqInt obj, sqInt nSlots) NoDbgRegParms; static sqInt sizeBitsOfSafe(sqInt oop) NoDbgRegParms; @@ -926,6 +928,7 @@ sqInt formatOfClass(sqInt classPointer); static sqInt fwdBlockValid(sqInt addr) NoDbgRegParms; static sqInt goodContextSize(sqInt oop) NoDbgRegParms; +static sqInt hasForwardingBlock(sqInt objOop) NoDbgRegParms; static sqInt headerWhileForwardingOf(sqInt oop) NoDbgRegParms; sqInt indexablePointersFormat(void); sqInt instanceSizeOf(sqInt classObj); @@ -968,11 +971,13 @@ static sqInt lengthOfMaybeImmediate(sqInt oop) NoDbgRegParms; sqInt lengthOf(sqInt oop); static sqInt lengthOfbaseHeaderformat(sqInt oop, sqInt hdr, sqInt fmt) NoDbgRegParms; +sqInt literalCountOf(sqInt methodPointer); void longPrintInstancesOf(sqInt aClassOop); static sqInt lowestFreeAfter(sqInt chunk) NoDbgRegParms; sqInt markAndTrace(sqInt oop); sqInt maybeSplObj(sqInt index); sqInt nilObject(void); +static sqInt noFixupFollowFieldofObject(sqInt fieldIndex, sqInt anObject) NoDbgRegParms; sqInt noShiftCompactClassIndexOfHeader(sqInt header); sqInt numBytesOf(sqInt objOop); sqInt numSlotsOf(sqInt obj); @@ -1104,7 +1109,7 @@ static usqInt iframeMethod(char *theFP) NoDbgRegParms; static sqInt imageFormatVersion(void); sqInt includesBehaviorThatOf(sqInt aClass, sqInt aSuperclass); -sqInt initialPCForHeadermethod(sqInt methodHeader, sqInt theMethod); +static sqInt initialPCForHeadermethod(sqInt methodHeader, sqInt theMethod) NoDbgRegParms; sqInt integerArg(sqInt index); void ioFilenamefromStringofLengthresolveAliases(char *aCharBuffer, char *aFilenameString, sqInt filenameLength, sqInt aBoolean); static sqInt isBaseFrame(char *theFP) NoDbgRegParms; @@ -1124,8 +1129,6 @@ sqInt isKindOf(sqInt oop, char *className); sqInt isMemberOf(sqInt oop, char *className); static sqInt lengthOfNameOfClass(sqInt classOop) NoDbgRegParms; -sqInt literalCountOfHeader(sqInt headerPointer); -sqInt literalCountOf(sqInt methodPointer); sqInt literalofMethod(sqInt offset, sqInt methodPointer); sqInt loadBitBltFrom(sqInt bb); void loadInitialContext(void); @@ -1148,6 +1151,7 @@ sqInt methodClassAssociationOf(sqInt methodPointer); sqInt methodClassOf(sqInt methodPointer); static sqInt methodHeaderHasPrimitive(sqInt methodHeader) NoDbgRegParms; +static sqInt methodHeaderIndicatesLargeFrame(sqInt methodHeader) NoDbgRegParms; sqInt methodPrimitiveIndex(void); sqInt methodReturnValue(sqInt oop); sqInt methodUsesAlternateBytecodeSet(sqInt aMethodObj); @@ -1220,6 +1224,8 @@ static sqInt removeFirstLinkOfList(sqInt aList) NoDbgRegParms; EXPORT(sqInt) returnAsThroughCallbackContext(sqInt returnTypeOop, VMCallbackContext *vmCallbackContext, sqInt callbackMethodContext); static sqInt reverseDisplayFromto(sqInt startIndex, sqInt endIndex) NoDbgRegParms; +static sqInt safeMethodClassOf(sqInt methodPointer) NoDbgRegParms; +static sqInt saneMethodClassAssociationInnumLiterals(sqInt methodObj, sqInt numLiterals) NoDbgRegParms; void setBreakSelector(char *aString); void setFullScreenFlag(sqInt value); EXPORT(void (*setInterruptCheckChain(void (*aFunction)(void)))()) ; @@ -1383,6 +1389,7 @@ _iss usqInt compEnd; _iss sqInt externalPrimitiveTableFirstFreeIndex; _iss sqInt flagInterpretedMethods; +_iss sqInt thisClassIndex; _iss sqInt edenBytes; _iss usqInt fwdTableLast; _iss usqLong gcStartUsecs; @@ -1394,7 +1401,6 @@ _iss usqLong statIOProcessEvents; _iss sqInt statMkFwdCount; _iss sqInt tenuringThreshold; -_iss sqInt thisClassIndex; _iss sqInt forceTenureFlag; _iss sqInt longRunningPrimitiveCheckSequenceNumber; _iss sqInt methodDictLinearSearchLimit; @@ -1492,8 +1498,8 @@ sqInt desiredNumStackPages; sqInt extraVMMemory; sqInt desiredCogCodeSize; +sqInt breakSelectorLength = -1; usqInt heapBase; -sqInt breakSelectorLength = -1; void * showSurfaceFn; char * breakSelector; sqInt deferDisplayUpdates; @@ -2082,7 +2088,7 @@ /* 574 */ (void (*)(void))0, /* 575 */ (void (*)(void))0, 0 }; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.848"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.865"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -2104,6 +2110,7 @@ #define getCodeCompactionMSecs() integerObjectOf((GIV(statCodeCompactionUsecs) + 500) / 1000) #define getCogCodeSize() integerObjectOf(GIV(cogCodeSize)) #define getDesiredCogCodeSize() integerObjectOf(desiredCogCodeSize) +#define heapBase() heapBase #define initialEnterSmalltalkExecutive() enterSmalltalkExecutiveImplementation() #define primTraceLogIndex(aValue) (GIV(primTraceLogIndex) = (aValue)) #define setDesiredCogCodeSize(dccs) (desiredCogCodeSize = (dccs)) @@ -4415,7 +4422,7 @@ ctxtOrNilOrZero = findMethodWithPrimitiveFromFPUpToContext(198, GIV(framePointer), home); if (ctxtOrNilOrZero == 0) { theMethod = longAt((home + BaseHeaderSize) + (MethodIndex << ShiftForWord)); - if ((primitiveIndexOfMethodheader(theMethod, headerOf(theMethod))) == 198) { + if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == 198) { unwindContextOrNilOrZero = home; goto l299; } @@ -4664,7 +4671,7 @@ assert((((usqInt)(longAt(localFP + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(localFP + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -4876,7 +4883,6 @@ GIV(framePointer) = localFP; ceEnterCogCodePopReceiverReg(); - null; goto l303; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); @@ -4886,7 +4892,7 @@ assert((((usqInt)(longAt(localFP + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(localFP + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -4894,7 +4900,7 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- null; + /* return self */ l303: /* end baseFrameReturn */; goto l302; } @@ -4933,7 +4939,7 @@ assert((((usqInt)(longAt(localFP + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(localFP + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -5259,7 +5265,6 @@ l309: /* end inlineLookupInMethodCacheSel:classTag: */; if (ok) { /* begin ifAppropriateCompileToNativeCode:selector: */ - VM_LABEL(0ifAppropriateCompileToNativeCodeselector); methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); if (isCogMethodReference(methodHeader2)) {
@@ -5271,9 +5276,7 @@ } } else { - if ((((((sqInt) methodHeader2)) < 0 - ? (((usqInt) methodHeader2) >> 1) & 0xFFFF - : (((usqInt) methodHeader2) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader2)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), GIV(messageSelector)); } else { @@ -5434,7 +5437,7 @@ /* begin setMethod:methodHeader: */ GIV(method) = GIV(newMethod); assert(isOopCompiledMethod(GIV(method))); - assert((headerOf(GIV(method))) == methodHeader); + assert((methodHeaderOf(GIV(method))) == methodHeader); GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0 ? 256 : 0); @@ -5454,19 +5457,17 @@ /* begin internalPush: */ longAtPointerput((localSP -= BytesPerOop), GIV(nilObj)); } - localIP = pointerForOop(((GIV(newMethod) + ((LiteralStart + (((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF))) * BytesPerOop)) + (BaseHeaderSize)) - 1); + localIP = pointerForOop((initialPCForHeadermethod(methodHeader, GIV(newMethod))) - 1); if (((((sqInt) methodHeader)) < 0 - ? methodHeader & (65536 << SmallIntegerShift) - : (methodHeader & 536871934) != 0)) { + ? methodHeader & (65536 << SmallIntegerShift) + : (methodHeader & 536871934) != 0)) {
/* Skip the CallPrimitive bytecode, if it's there, and store the error code if the method starts with a long store temp. Strictly no need to skip the store because it's effectively a noop. */
localIP += ((((sqInt) methodHeader)) < 0 - ? 3 - : 0); + ? 3 + : 0); if (GIV(primFailCode) != 0) { if ((byteAt(localIP + 1)) == (((((sqInt) methodHeader)) < 0 ? AltLongStoreBytecode @@ -6377,7 +6378,7 @@ ? (FoxIFrameFlags + BytesPerWord) - 1 : FoxIFrameFlags))); if (((backwardJumpCountByte -= 2)) == 1) { - if (methodWithHeaderShouldBeCogged(headerOf(GIV(method)))) { + if (methodWithHeaderShouldBeCogged(methodHeaderOf(GIV(method)))) { /* begin externalizeIPandSP */ assert((((usqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); @@ -8452,7 +8453,7 @@ } else { if ((fmt2 < 12) - || (((index >> 1)) >= ((((literalCountOfHeader(headerOf(rcvr))) + LiteralStart) * BytesPerOop) + 1))) { + || (((index >> 1)) >= ((((literalCountOf(rcvr)) + LiteralStart) * BytesPerOop) + 1))) { result = (((byteAt((rcvr + BaseHeaderSize) + (((index >> 1)) - 1))) << 1) | 1); goto l117; } @@ -8696,7 +8697,7 @@ } else { if ((fmt2 >= 12) - && (((index >> 1)) < ((((literalCountOfHeader(headerOf(rcvr))) + LiteralStart) * BytesPerOop) + 1))) { + && (((index >> 1)) < ((((literalCountOf(rcvr)) + LiteralStart) * BytesPerOop) + 1))) { GIV(primFailCode) = PrimErrBadIndex; goto l127; } @@ -11346,7 +11347,7 @@ } else { if ((fmt2 < 12) - || (((index >> 1)) >= ((((literalCountOfHeader(headerOf(rcvr))) + LiteralStart) * BytesPerOop) + 1))) { + || (((index >> 1)) >= ((((literalCountOf(rcvr)) + LiteralStart) * BytesPerOop) + 1))) { result = (((byteAt((rcvr + BaseHeaderSize) + (((index >> 1)) - 1))) << 1) | 1); goto l253; } @@ -11590,7 +11591,7 @@ } else { if ((fmt2 >= 12) - && (((index >> 1)) < ((((literalCountOfHeader(headerOf(rcvr))) + LiteralStart) * BytesPerOop) + 1))) { + && (((index >> 1)) < ((((literalCountOf(rcvr)) + LiteralStart) * BytesPerOop) + 1))) { GIV(primFailCode) = PrimErrBadIndex; goto l263; } @@ -12924,7 +12925,7 @@ ? (FoxIFrameFlags + BytesPerWord) - 1 : FoxIFrameFlags))); if (((backwardJumpCountByte -= 2)) == 1) { - if (methodWithHeaderShouldBeCogged(headerOf(GIV(method)))) { + if (methodWithHeaderShouldBeCogged(methodHeaderOf(GIV(method)))) { /* begin externalizeIPandSP */ assert((((usqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); @@ -13222,16 +13223,14 @@ GIV(stackPointer) = sp2; } if (((((sqInt) methodHeader)) < 0 - ? methodHeader & (65536 << SmallIntegerShift) - : (methodHeader & 536871934) != 0)) { + ? methodHeader & (65536 << SmallIntegerShift) + : (methodHeader & 536871934) != 0)) {
/* Store the error code if the method starts with a long store temp. No instructionPointer skip because we're heading for machine code. */
- initialPC = ((GIV(newMethod) + ((LiteralStart + (((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF))) * BytesPerOop)) + (BaseHeaderSize)) + (((((sqInt) methodHeader)) < 0 - ? 3 - : 0)); + initialPC = (initialPCForHeadermethod(methodHeader, GIV(newMethod))) + (((((sqInt) methodHeader)) < 0 + ? 3 + : 0)); if (GIV(primFailCode) != 0) { if ((byteAt(initialPC)) == (((((sqInt) methodHeader)) < 0 ? AltLongStoreBytecode @@ -13272,10 +13271,10 @@ activateNewMethod(void) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt errorCode; + sqInt header; sqInt i; sqInt inInterpreter; sqInt methodHeader; - sqInt methodHeader1; sqInt numArgs; sqInt numTemps; sqInt object; @@ -13291,12 +13290,14 @@ sqInt switched; sqInt table;
- /* begin headerOf: */ - methodHeader1 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); - methodHeader = (isCogMethodReference(methodHeader1) - ? (assert((((((CogMethod *) methodHeader1))->objectHeader)) == (nullHeaderForMachineCodeMethod())), - ((((CogMethod *) methodHeader1))->methodHeader)) - : methodHeader1); + /* begin methodHeaderOf: */ + assert(isCompiledMethod(GIV(newMethod))); + header = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); + methodHeader = ((header & 1) + ? header + : (assert((((usqInt)header)) < (heapBase())), + assert((((((CogMethod *) header))->objectHeader)) == (nullHeaderForMachineCodeMethod())), + ((((CogMethod *) header))->methodHeader))); numTemps = (((usqInt) methodHeader) >> 19) & 0x3F; numArgs = (((usqInt) methodHeader) >> 25) & 15;
@@ -13322,7 +13323,7 @@ /* begin setMethod:methodHeader: */ GIV(method) = GIV(newMethod); assert(isOopCompiledMethod(GIV(method))); - assert((headerOf(GIV(method))) == methodHeader); + assert((methodHeaderOf(GIV(method))) == methodHeader); GIV(bytecodeSetSelector) = ((((sqInt) methodHeader)) < 0 ? 256 : 0); @@ -13347,19 +13348,17 @@ longAtput((sp = GIV(stackPointer) - BytesPerWord), GIV(nilObj)); GIV(stackPointer) = sp; } - GIV(instructionPointer) = ((GIV(newMethod) + ((LiteralStart + (((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF))) * BytesPerOop)) + (BaseHeaderSize)) - 1; + GIV(instructionPointer) = (initialPCForHeadermethod(methodHeader, GIV(newMethod))) - 1; if (((((sqInt) methodHeader)) < 0 - ? methodHeader & (65536 << SmallIntegerShift) - : (methodHeader & 536871934) != 0)) { + ? methodHeader & (65536 << SmallIntegerShift) + : (methodHeader & 536871934) != 0)) {
/* Skip the CallPrimitive bytecode, if it's there, and store the error code if the method starts with a long store temp. Strictly no need to skip the store because it's effectively a noop. */
GIV(instructionPointer) += ((((sqInt) methodHeader)) < 0 - ? 3 - : 0); + ? 3 + : 0); if (GIV(primFailCode) != 0) { if ((byteAt(GIV(instructionPointer) + 1)) == (((((sqInt) methodHeader)) < 0 ? AltLongStoreBytecode @@ -13405,8 +13404,8 @@ { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt firstBytecode; sqInt hash; + sqInt header; sqInt methodHeader; - sqInt methodHeader1; sqInt p; sqInt primBits; sqInt primitiveIndex; @@ -13424,19 +13423,21 @@ if (((GIV(newMethod) & 1) == 0) && (((((usqInt) (longAt(GIV(newMethod)))) >> (instFormatFieldLSB())) & 15) >= 12)) { /* begin primitiveIndexOfMethod:header: */ - /* begin headerOf: */ - methodHeader1 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); - methodHeader = (isCogMethodReference(methodHeader1) - ? (assert((((((CogMethod *) methodHeader1))->objectHeader)) == (nullHeaderForMachineCodeMethod())), - ((((CogMethod *) methodHeader1))->methodHeader)) - : methodHeader1); + /* begin methodHeaderOf: */ + assert(isCompiledMethod(GIV(newMethod))); + header = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); + methodHeader = ((header & 1) + ? header + : (assert((((usqInt)header)) < (heapBase())), + assert((((((CogMethod *) header))->objectHeader)) == (nullHeaderForMachineCodeMethod())), + ((((CogMethod *) header))->methodHeader))); primitiveIndex = ((((sqInt) methodHeader)) < 0 - ? (methodHeader & (65536 << SmallIntegerShift) - ? ((firstBytecode = (GIV(newMethod) + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerWord)) + BaseHeaderSize), - (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) - : 0) - : ((primBits = ((usqInt) methodHeader) >> 1), - (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); + ? (methodHeader & (65536 << SmallIntegerShift) + ? ((firstBytecode = (GIV(newMethod) + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerOop)) + (BaseHeaderSize)), + (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) + : 0) + : ((primBits = (methodHeader >> 1)), + (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); /* begin functionPointerFor:inClass: */ primitiveFunctionPointer = ((void (*)(void)) ((primitiveIndex > MaxPrimitiveIndex ? 0 @@ -13731,9 +13732,7 @@ else { /* begin startPCOfMethodHeader: */ aCompiledMethodHeader = (cogMethod->methodHeader); - startBcpc = ((((((sqInt) aCompiledMethodHeader)) < 0 - ? (((usqInt) aCompiledMethodHeader) >> 1) & 0xFFFF - : (((usqInt) aCompiledMethodHeader) >> 10) & 0xFF)) + LiteralStart) * BytesPerOop; + startBcpc = ((literalCountOfMethodHeader(aCompiledMethodHeader)) + LiteralStart) * BytesPerOop; cogMethod2 = ((CogBlockMethod *) cogMethod); methodField = ((sqInt)cogMethod); } @@ -13778,7 +13777,7 @@ volatile void *currentCFramePointer; volatile void *currentCStackPointer; volatile sqInt header; - volatile sqInt methodHeader; + volatile sqInt header1; volatile jmp_buf savedReenterInterpreter; volatile sqInt wasInMachineCode; volatile sqInt xArray; @@ -13827,12 +13826,14 @@
GIV(newMethod) = GIV(suspendedMethods)[GIV(jmpDepth)]; /* begin argumentCountOfMethodHeader: */ - /* begin headerOf: */ - methodHeader = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); - header = (isCogMethodReference(methodHeader) - ? (assert((((((CogMethod *) methodHeader))->objectHeader)) == (nullHeaderForMachineCodeMethod())), - ((((CogMethod *) methodHeader))->methodHeader)) - : methodHeader); + /* begin methodHeaderOf: */ + assert(isCompiledMethod(GIV(newMethod))); + header1 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); + header = ((header1 & 1) + ? header1 + : (assert((((usqInt)header1)) < (heapBase())), + assert((((((CogMethod *) header1))->objectHeader)) == (nullHeaderForMachineCodeMethod())), + ((((CogMethod *) header1))->methodHeader))); GIV(argumentCount) = (((usqInt) header) >> 25) & 15; assert(wasInMachineCode == (isMachineCodeFrame(GIV(framePointer)))); if (calledFromMachineCode) { @@ -14110,7 +14111,7 @@ assert((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(GIV(framePointer) + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -14298,9 +14299,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), selector); } else { @@ -14367,8 +14366,8 @@ ceInterpretMethodFromPICreceiver(sqInt aMethodObj, sqInt rcvr) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt firstBytecode; + sqInt header; sqInt methodHeader; - sqInt methodHeader1; CogMethod *pic; sqInt primBits; sqInt primitiveIndex; @@ -14393,19 +14392,21 @@ GIV(messageSelector) = (pic->selector); GIV(newMethod) = aMethodObj; /* begin primitiveIndexOfMethod:header: */ - /* begin headerOf: */ - methodHeader1 = longAt((aMethodObj + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); - methodHeader = (isCogMethodReference(methodHeader1) - ? (assert((((((CogMethod *) methodHeader1))->objectHeader)) == (nullHeaderForMachineCodeMethod())), - ((((CogMethod *) methodHeader1))->methodHeader)) - : methodHeader1); + /* begin methodHeaderOf: */ + assert(isCompiledMethod(aMethodObj)); + header = longAt((aMethodObj + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); + methodHeader = ((header & 1) + ? header + : (assert((((usqInt)header)) < (heapBase())), + assert((((((CogMethod *) header))->objectHeader)) == (nullHeaderForMachineCodeMethod())), + ((((CogMethod *) header))->methodHeader))); primitiveIndex = ((((sqInt) methodHeader)) < 0 - ? (methodHeader & (65536 << SmallIntegerShift) - ? ((firstBytecode = (aMethodObj + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerWord)) + BaseHeaderSize), - (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) - : 0) - : ((primBits = ((usqInt) methodHeader) >> 1), - (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); + ? (methodHeader & (65536 << SmallIntegerShift) + ? ((firstBytecode = (aMethodObj + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerOop)) + (BaseHeaderSize)), + (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) + : 0) + : ((primBits = (methodHeader >> 1)), + (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); /* begin functionPointerFor:inClass: */ primitiveFunctionPointer = ((void (*)(void)) ((primitiveIndex > MaxPrimitiveIndex ? 0 @@ -14425,8 +14426,8 @@ sqInt ccIndex1; CogMethod *cPIC; sqInt firstBytecode; + sqInt header; sqInt methodHeader; - sqInt methodHeader1; sqInt primBits; sqInt primitiveIndex; char *sp; @@ -14462,19 +14463,21 @@ } GIV(newMethod) = aMethodObj; /* begin primitiveIndexOfMethod:header: */ - /* begin headerOf: */ - methodHeader1 = longAt((aMethodObj + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); - methodHeader = (isCogMethodReference(methodHeader1) - ? (assert((((((CogMethod *) methodHeader1))->objectHeader)) == (nullHeaderForMachineCodeMethod())), - ((((CogMethod *) methodHeader1))->methodHeader)) - : methodHeader1); + /* begin methodHeaderOf: */ + assert(isCompiledMethod(aMethodObj)); + header = longAt((aMethodObj + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); + methodHeader = ((header & 1) + ? header + : (assert((((usqInt)header)) < (heapBase())), + assert((((((CogMethod *) header))->objectHeader)) == (nullHeaderForMachineCodeMethod())), + ((((CogMethod *) header))->methodHeader))); primitiveIndex = ((((sqInt) methodHeader)) < 0 - ? (methodHeader & (65536 << SmallIntegerShift) - ? ((firstBytecode = (aMethodObj + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerWord)) + BaseHeaderSize), - (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) - : 0) - : ((primBits = ((usqInt) methodHeader) >> 1), - (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); + ? (methodHeader & (65536 << SmallIntegerShift) + ? ((firstBytecode = (aMethodObj + ((LiteralStart + ((((usqInt) methodHeader) >> 1) & 0xFFFF)) * BytesPerOop)) + (BaseHeaderSize)), + (byteAt(firstBytecode + 1)) + ((byteAt(firstBytecode + 2)) << 8)) + : 0) + : ((primBits = (methodHeader >> 1)), + (primBits & 0x1FF) + ((((usqInt) primBits) >> 19) & 512))); /* begin functionPointerFor:inClass: */ primitiveFunctionPointer = ((void (*)(void)) ((primitiveIndex > MaxPrimitiveIndex ? 0 @@ -14583,7 +14586,7 @@ ctxtOrNilOrZero = findMethodWithPrimitiveFromFPUpToContext(198, GIV(framePointer), home); if (ctxtOrNilOrZero == 0) { theMethod = longAt((home + BaseHeaderSize) + (MethodIndex << ShiftForWord)); - if ((primitiveIndexOfMethodheader(theMethod, headerOf(theMethod))) == 198) { + if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == 198) { unwindContextOrNilOrZero = home; goto l3; } @@ -14839,7 +14842,7 @@ assert((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(GIV(framePointer) + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -14903,9 +14906,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), selector); } else { @@ -14983,9 +14984,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), selector); } else { @@ -15110,9 +15109,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), selector); } else { @@ -15378,7 +15375,7 @@ ? (longAt(oop - BaseHeaderSize)) & AllButTypeMask : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))))); if (((((usqInt) (longAt(oop))) >> (instFormatFieldLSB())) & 15) >= 12) { - i = ((literalCountOfHeader(headerOf(oop))) + LiteralStart) - 1; + i = ((literalCountOfMethodHeader(methodHeaderOf(oop))) + LiteralStart) - 1; } else { if (((oop & 1) == 0) @@ -15958,7 +15955,7 @@ assert((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) >= (startOfMemory())); GIV(method) = longAt(GIV(framePointer) + FoxMethod); assert(isOopCompiledMethod(GIV(method))); - GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(headerOf(GIV(method))) + GIV(bytecodeSetSelector) = (headerIndicatesAlternateBytecodeSet(methodHeaderOf(GIV(method))) ? 256 : 0);
@@ -16130,9 +16127,7 @@ } methodHeader = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); if (!(isCogMethodReference(methodHeader))) { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), GIV(nilObj)); methodHeader = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord)); } @@ -16322,9 +16317,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), GIV(messageSelector)); } else { @@ -16357,7 +16350,7 @@ { sqInt lit;
- if (!((literalCountOfHeader(headerOf(methodObj))) > 0)) { + if (!((literalCountOfMethodHeader(methodHeaderOf(methodObj))) > 0)) { return null; } lit = longAt((methodObj + BaseHeaderSize) + ((0 + LiteralStart) << ShiftForWord)); @@ -16619,7 +16612,7 @@ if (functionPointer == primitiveExternalCall) { /* begin functionForPrimitiveExternalCall: */ setPostCompileHook(recordCallOffsetInof); - if (!((literalCountOfHeader(headerOf(methodObj))) > 0)) { + if (!((literalCountOfMethodHeader(methodHeaderOf(methodObj))) > 0)) { return ((void (*)(void)) primitiveExternalCall); }
@@ -16706,9 +16699,7 @@ } } else { - if ((((((sqInt) methodHeader)) < 0 - ? (((usqInt) methodHeader) >> 1) & 0xFFFF - : (((usqInt) methodHeader) >> 10) & 0xFF)) <= maxLiteralCountForCompile) { + if ((literalCountOfMethodHeader(methodHeader)) <= maxLiteralCountForCompile) { cogselector(GIV(newMethod), GIV(messageSelector)); } else { @@ -16740,19 +16731,7 @@
@@ Diff output truncated at 50000 characters. @@
vm-dev@lists.squeakfoundation.org