Revision: 3393 Author: eliot Date: 2015-06-29 16:59:01 -0700 (Mon, 29 Jun 2015) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.1401 Spur: Provide a limit to the size of old space on Spur. Access maxOldSpaceSize via vmParameterAt: 67 & command line parameter -maxoldspace. Cogit: Simplify pushRemoteTemp register management to be able to improve further the overall register management. Have optStatus hold onto the sim stack entry it is holding, if any. Sista Cogit: fixed trinaryInlined primitive which was forcing a reg to be ReceiverResult reg when it shouldn't. Modified Paths: -------------- branches/Cog/nsspursrc/vm/cogit.h branches/Cog/nsspursrc/vm/cogitARMv5.c branches/Cog/nsspursrc/vm/cogitIA32.c branches/Cog/nsspursrc/vm/cointerp.c branches/Cog/nsspursrc/vm/cointerp.h branches/Cog/nsspursrc/vm/gcc3x-cointerp.c branches/Cog/nsspurstack64src/vm/gcc3x-interp.c branches/Cog/nsspurstack64src/vm/interp.c branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c branches/Cog/nsspurstacksrc/vm/interp.c branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c branches/Cog/platforms/unix/vm/sqUnixMain.c branches/Cog/platforms/win32/vm/sqWin32Main.c branches/Cog/platforms/win32/vm/sqWin32Window.c branches/Cog/spursistasrc/vm/cogit.h branches/Cog/spursistasrc/vm/cogitARMv5.c branches/Cog/spursistasrc/vm/cogitIA32.c branches/Cog/spursistasrc/vm/cointerp.c branches/Cog/spursistasrc/vm/cointerp.h branches/Cog/spursistasrc/vm/gcc3x-cointerp.c branches/Cog/spursrc/vm/cogit.h branches/Cog/spursrc/vm/cogitARMv5.c branches/Cog/spursrc/vm/cogitIA32.c branches/Cog/spursrc/vm/cointerp.c branches/Cog/spursrc/vm/cointerp.h branches/Cog/spursrc/vm/gcc3x-cointerp.c branches/Cog/spurstack64src/vm/gcc3x-interp.c branches/Cog/spurstack64src/vm/interp.c branches/Cog/spurstacksrc/vm/gcc3x-interp.c branches/Cog/spurstacksrc/vm/interp.c branches/Cog/src/vm/cogit.h branches/Cog/src/vm/cogitARMv5.c branches/Cog/src/vm/cogitIA32.c 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 Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h Modified: branches/Cog/nsspursrc/vm/cogit.h =================================================================== --- branches/Cog/nsspursrc/vm/cogit.h 2015-06-28 19:15:19 UTC (rev 3392) +++ branches/Cog/nsspursrc/vm/cogit.h 2015-06-29 23:59:01 UTC (rev 3393) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + CCodeGenerator VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a */ Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-06-28 19:15:19 UTC (rev 3392) +++ branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-06-29 23:59:01 UTC (rev 3393) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + CCodeGenerator VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a from - StackToRegisterMappingCogit VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + StackToRegisterMappingCogit VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -1157,6 +1157,7 @@ static sqInt genSpecialSelectorComparison(void); static sqInt genSpecialSelectorEqualsEquals(void); static sqInt genSpecialSelectorEqualsEqualsWithForwarders(void); +static sqInt genStaticallyResolvedSpecialSelectorComparison(void); static sqInt genStorePopLiteralVariable(sqInt popBoolean, sqInt litVarIndex) NoDbgRegParms; static sqInt genStorePopMaybeContextReceiverVariable(sqInt popBoolean, sqInt slotIndex) NoDbgRegParms; static sqInt genStorePopReceiverVariable(sqInt popBoolean, sqInt slotIndex) NoDbgRegParms; @@ -1207,6 +1208,7 @@ static CogSimStackEntry ssTopDescriptor(void); static CogSimStackEntry * ssValue(sqInt n) NoDbgRegParms; static sqInt tryCollapseTempVectorInitializationOfSize(sqInt slots) NoDbgRegParms; +static void updateSimSpillBase(void); static sqInt v3or4PushNilSizenumInitialNils(sqInt aMethodObj, sqInt numInitialNils) NoDbgRegParms; static sqInt v3or4NumPushNils(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms; @@ -23563,13 +23565,11 @@ ensureReceiverResultRegContainsSelf(void) { if (needsFrame) { - if (!(((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf))))) { + if (!((optStatus.isReceiverResultRegLive))) { ssAllocateRequiredReg(ReceiverResultReg); storeToReg((&simSelf), ReceiverResultReg); } (optStatus.isReceiverResultRegLive = 1); - (optStatus.ssEntry = (&simSelf)); } else { assert((((simSelf.type)) == SSRegister) @@ -24434,6 +24434,7 @@ startpc = bytecodePC + (((generatorAt(byte0))->numBytes)); addBlockStartAtnumArgsnumCopiedspan(startpc, (numArgs = (byte1 & 7) + ((extA % 16) * 8)), (numCopied = ((((usqInt) byte1) >> 3) & 7) + ((extA / 16) * 8)), byte2 + (extB << 8)); extA = (extB = 0); + /* begin genInlineClosure:numArgs:numCopied: */ assert(getActiveContextAllocatesInMachineCode()); (optStatus.isReceiverResultRegLive = 0); ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); @@ -24442,19 +24443,9 @@ reg = ssStorePoptoPreferredReg(1, TempReg); genStoreSourceRegslotIndexintoNewObjectInDestReg(reg, (ClosureFirstCopiedValueIndex + numCopied) - i, ReceiverResultReg); } - return ssPushRegister(ReceiverResultReg); + ssPushRegister(ReceiverResultReg); - if (numCopied > 0) { - ssFlushTo(simStackPtr); - } - (optStatus.isReceiverResultRegLive = 0); - ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); - - genCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(startpc + 1, numArgs, numCopied, methodOrBlockNumArgs, methodNeedsLargeContext(methodObj), inBlock); - if (numCopied > 0) { - ssPop(numCopied); - } - return ssPushRegister(ReceiverResultReg); + return 0; } @@ -25714,6 +25705,7 @@ assert(needsFrame); startpc = bytecodePC + (((generatorAt(byte0))->numBytes)); addBlockStartAtnumArgsnumCopiedspan(startpc, (numArgs = byte1 & 15), (numCopied = ((usqInt) byte1) >> 4), (byte2 << 8) + byte3); + /* begin genInlineClosure:numArgs:numCopied: */ assert(getActiveContextAllocatesInMachineCode()); (optStatus.isReceiverResultRegLive = 0); ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); @@ -25722,19 +25714,9 @@ reg = ssStorePoptoPreferredReg(1, TempReg); genStoreSourceRegslotIndexintoNewObjectInDestReg(reg, (ClosureFirstCopiedValueIndex + numCopied) - i, ReceiverResultReg); } - return ssPushRegister(ReceiverResultReg); + ssPushRegister(ReceiverResultReg); - if (numCopied > 0) { - ssFlushTo(simStackPtr); - } - (optStatus.isReceiverResultRegLive = 0); - ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); - - genCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(startpc + 1, numArgs, numCopied, methodOrBlockNumArgs, methodNeedsLargeContext(methodObj), inBlock); - if (numCopied > 0) { - ssPop(numCopied); - } - return ssPushRegister(ReceiverResultReg); + return 0; } @@ -25883,8 +25865,7 @@ static sqInt genPushReceiverBytecode(void) { - if (((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf)))) { + if ((optStatus.isReceiverResultRegLive)) { return ssPushRegister(ReceiverResultReg); } return ssPushDesc(simSelf); @@ -25922,14 +25903,23 @@ genPushRemoteTempLongBytecode(void) { sqInt offset; + sqInt regMask; + sqInt remoteTempReg; + sqInt tempVectReg; - ssAllocateRequiredRegand(ClassReg, SendNumArgsReg); + tempVectReg = allocateRegNotConflictingWith(0); /* begin MoveMw:r:R: */ offset = frameOffsetOfTemporary(byte2); /* begin gen:quickConstant:operand:operand: */ - checkQuickConstantforInstruction(offset, genoperandoperandoperand(MoveMwrR, offset, FPReg, ClassReg)); - genLoadSlotsourceRegdestReg(byte1, ClassReg, SendNumArgsReg); - return ssPushRegister(SendNumArgsReg); + checkQuickConstantforInstruction(offset, genoperandoperandoperand(MoveMwrR, offset, FPReg, tempVectReg)); + /* begin availableRegOrNilNotConflictingWith: */ + regMask = registerMaskFor(tempVectReg); + remoteTempReg = availableRegisterOrNilFor(backEnd, (liveRegisters()) | regMask); + if (!(remoteTempReg)) { + remoteTempReg = tempVectReg; + } + genLoadSlotsourceRegdestReg(byte1, tempVectReg, remoteTempReg); + return ssPushRegister(remoteTempReg); } @@ -25955,11 +25945,8 @@ genReturnReceiver(void) { if (needsFrame) { - if (!(((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf))))) { - /* begin MoveMw:r:R: */ - /* begin gen:quickConstant:operand:operand: */ - checkQuickConstantforInstruction(FoxMFReceiver, genoperandoperandoperand(MoveMwrR, FoxMFReceiver, FPReg, ReceiverResultReg)); + if (!((optStatus.isReceiverResultRegLive))) { + storeToReg((&simSelf), ReceiverResultReg); } } return genUpArrowReturn(); @@ -26434,9 +26421,7 @@ sqInt postBranchPC1; BytecodeDescriptor *primDescriptor; BytecodeDescriptor *primDescriptor1; - sqInt rcvrInt; sqInt rcvrIsInt; - sqInt result; sqInt target; sqInt targetBytecodePC; sqInt targetBytecodePC1; @@ -26447,39 +26432,10 @@ argIsInt = ((((ssTop())->type)) == SSConstant) && ((((argInt = ((ssTop())->constant))) & 1)); rcvrIsInt = ((((ssValue(1))->type)) == SSConstant) - && ((((rcvrInt = ((ssValue(1))->constant))) & 1)); + && (((((ssValue(1))->constant)) & 1)); if (argIsInt && (rcvrIsInt)) { - ; - - switch ((primDescriptor->opcode)) { - case JumpLess: - result = rcvrInt < argInt; - break; - case JumpLessOrEqual: - result = rcvrInt <= argInt; - break; - case JumpGreater: - result = rcvrInt > argInt; - break; - case JumpGreaterOrEqual: - result = rcvrInt >= argInt; - break; - case JumpZero: - result = rcvrInt == argInt; - break; - case JumpNonZero: - result = rcvrInt != argInt; - break; - default: - error("Case not found and no otherwise clause"); - } - annotateBytecodeIfAnnotated(ssValue(1)); - annotateBytecodeIfAnnotated(ssTop()); - ssPop(2); - return ssPushAnnotatedConstant((result - ? trueObject() - : falseObject())); + return genStaticallyResolvedSpecialSelectorComparison(); } /* begin extractMaybeBranchDescriptorInto: */ primDescriptor1 = generatorAt(byte0); @@ -26857,6 +26813,53 @@ } +/* Assumes both operands are ints */ + + /* StackToRegisterMappingCogit>>#genStaticallyResolvedSpecialSelectorComparison */ +static sqInt +genStaticallyResolvedSpecialSelectorComparison(void) +{ + sqInt argInt; + BytecodeDescriptor *primDescriptor; + sqInt rcvrInt; + sqInt result; + + primDescriptor = generatorAt(byte0); + argInt = ((ssTop())->constant); + rcvrInt = ((ssValue(1))->constant); + + + switch ((primDescriptor->opcode)) { + case JumpLess: + result = rcvrInt < argInt; + break; + case JumpLessOrEqual: + result = rcvrInt <= argInt; + break; + case JumpGreater: + result = rcvrInt > argInt; + break; + case JumpGreaterOrEqual: + result = rcvrInt >= argInt; + break; + case JumpZero: + result = rcvrInt == argInt; + break; + case JumpNonZero: + result = rcvrInt != argInt; + break; + default: + error("Case not found and no otherwise clause"); + } + annotateBytecodeIfAnnotated(ssValue(1)); + annotateBytecodeIfAnnotated(ssTop()); + ssPop(2); + return ssPushAnnotatedConstant((result + ? trueObject() + : falseObject())); +} + + /* The only reason we assert needsFrame here is that in a frameless method ReceiverResultReg must and does contain only self, but the ceStoreCheck trampoline expects the target of the store to be in ReceiverResultReg. So @@ -27187,30 +27190,34 @@ sqInt rThird1; sqInt rTop; sqInt rTop1; + sqInt thirdIsReceiver; sqInt topRegistersMask; rNext1 = 0; rThird1 = 0; rTop1 = 0; + needsStoreCheck = !(isUnannotatableConstant(ssTop())); /* begin allocateRegForStackTopThreeEntriesInto:thirdIsReceiver: */ + thirdIsReceiver = (prim == 0) + && (needsStoreCheck); topRegistersMask = 0; if (((((ssTop())->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssTop())->registerr)) != ReceiverResultReg))) { topRegistersMask = registerMaskFor((rTop1 = ((ssTop())->registerr))); } if (((((ssValue(1))->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssValue(1))->registerr)) != ReceiverResultReg))) { topRegistersMask = topRegistersMask | (registerMaskFor((rNext1 = ((ssValue(1))->registerr)))); } if (((((ssValue(2))->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssValue(2))->registerr)) == ReceiverResultReg))) { topRegistersMask = topRegistersMask | (registerMaskFor((rThird1 = ((ssValue(2))->registerr)))); } if (!(rThird1)) { - if (prim == 0) { + if (thirdIsReceiver) { /* Free ReceiverResultReg if it was not free */ @@ -27237,7 +27244,6 @@ assert((rr != ra1) && ((rr != ra2) && (ra1 != ra2))); - needsStoreCheck = !(isUnannotatableConstant(ssTop())); popToReg(ssTop(), ra2); ssPop(1); popToReg(ssTop(), ra1); @@ -27421,12 +27427,13 @@ CogSimStackEntry *desc; sqInt i; - (optStatus.isReceiverResultRegLive = 0); (simSelf.type = SSBaseOffset); (simSelf.spilled = 1); (simSelf.annotateUse = 0); (simSelf.registerr = FPReg); (simSelf.offset = FoxMFReceiver); + (optStatus.isReceiverResultRegLive = 0); + (optStatus.ssEntry = (&simSelf)); /* N.B. Includes num args */ @@ -28178,15 +28185,16 @@ CogSimStackEntry *desc; sqInt index; + /* begin ssFlushUpThrough: */ for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) { - desc = simStackAt(index); - if ((((desc->type)) == SSBaseOffset) - && ((((desc->registerr)) == ReceiverResultReg) - && (((desc->offset)) == (slotOffsetOfInstVarIndex(slotIndex))))) { + if (((((simStackAt(index))->type)) == SSBaseOffset) + && (((((simStackAt(index))->registerr)) == ReceiverResultReg) + && ((((simStackAt(index))->offset)) == (slotOffsetOfInstVarIndex(slotIndex))))) { ssFlushTo(index); - return; + goto l1; } } +l1: /* end ssFlushUpThrough: */; } @@ -28201,15 +28209,16 @@ CogSimStackEntry *desc; sqInt index; - for (index = (simStackPtr - 1); index >= simSpillBase; index += -1) { - desc = simStackAt(index); - if ((((desc->type)) == SSBaseOffset) - && ((((desc->registerr)) == FPReg) - && (((desc->offset)) == (frameOffsetOfTemporary(tempIndex))))) { + /* begin ssFlushUpThrough: */ + for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) { + if (((((simStackAt(index))->type)) == SSBaseOffset) + && (((((simStackAt(index))->registerr)) == FPReg) + && ((((simStackAt(index))->offset)) == (frameOffsetOfTemporary(tempIndex))))) { ssFlushTo(index); - return; + goto l1; } } +l1: /* end ssFlushUpThrough: */; } /* StackToRegisterMappingCogit>>#ssPop: */ @@ -28229,9 +28238,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSConstant); (cascade0->annotateUse = 1); @@ -28248,9 +28255,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSBaseOffset); (cascade0->spilled = 0); @@ -28268,9 +28273,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSConstant); (cascade0->spilled = 0); @@ -28291,9 +28294,7 @@ (simStackEntry.annotateUse = 0); (simStackEntry.bcptr = bytecodePC); simStack[(simStackPtr += 1)] = simStackEntry; - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); return 0; } @@ -28304,9 +28305,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSRegister); (cascade0->spilled = 0); @@ -28449,6 +28448,15 @@ return 1; } + /* StackToRegisterMappingCogit>>#updateSimSpillBase */ +static void +updateSimSpillBase(void) +{ + if (simSpillBase > simStackPtr) { + simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); + } +} + /* StackToRegisterMappingCogit>>#v3or4PushNilSize:numInitialNils: */ static sqInt v3or4PushNilSizenumInitialNils(sqInt aMethodObj, sqInt numInitialNils) Modified: branches/Cog/nsspursrc/vm/cogitIA32.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitIA32.c 2015-06-28 19:15:19 UTC (rev 3392) +++ branches/Cog/nsspursrc/vm/cogitIA32.c 2015-06-29 23:59:01 UTC (rev 3393) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + CCodeGenerator VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a from - StackToRegisterMappingCogit VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + StackToRegisterMappingCogit VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -1078,6 +1078,7 @@ static sqInt genSpecialSelectorComparison(void); static sqInt genSpecialSelectorEqualsEquals(void); static sqInt genSpecialSelectorEqualsEqualsWithForwarders(void); +static sqInt genStaticallyResolvedSpecialSelectorComparison(void); static sqInt genStorePopLiteralVariable(sqInt popBoolean, sqInt litVarIndex) NoDbgRegParms; static sqInt genStorePopMaybeContextReceiverVariable(sqInt popBoolean, sqInt slotIndex) NoDbgRegParms; static sqInt genStorePopReceiverVariable(sqInt popBoolean, sqInt slotIndex) NoDbgRegParms; @@ -1128,6 +1129,7 @@ static CogSimStackEntry ssTopDescriptor(void); static CogSimStackEntry * ssValue(sqInt n) NoDbgRegParms; static sqInt tryCollapseTempVectorInitializationOfSize(sqInt slots) NoDbgRegParms; +static void updateSimSpillBase(void); static sqInt v3or4PushNilSizenumInitialNils(sqInt aMethodObj, sqInt numInitialNils) NoDbgRegParms; static sqInt v3or4NumPushNils(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms; @@ -23140,13 +23142,11 @@ ensureReceiverResultRegContainsSelf(void) { if (needsFrame) { - if (!(((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf))))) { + if (!((optStatus.isReceiverResultRegLive))) { ssAllocateRequiredReg(ReceiverResultReg); storeToReg((&simSelf), ReceiverResultReg); } (optStatus.isReceiverResultRegLive = 1); - (optStatus.ssEntry = (&simSelf)); } else { assert((((simSelf.type)) == SSRegister) @@ -24111,6 +24111,7 @@ startpc = bytecodePC + (((generatorAt(byte0))->numBytes)); addBlockStartAtnumArgsnumCopiedspan(startpc, (numArgs = (byte1 & 7) + ((extA % 16) * 8)), (numCopied = ((((usqInt) byte1) >> 3) & 7) + ((extA / 16) * 8)), byte2 + (extB << 8)); extA = (extB = 0); + /* begin genInlineClosure:numArgs:numCopied: */ assert(getActiveContextAllocatesInMachineCode()); (optStatus.isReceiverResultRegLive = 0); ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); @@ -24119,19 +24120,9 @@ reg = ssStorePoptoPreferredReg(1, TempReg); genStoreSourceRegslotIndexintoNewObjectInDestReg(reg, (ClosureFirstCopiedValueIndex + numCopied) - i, ReceiverResultReg); } - return ssPushRegister(ReceiverResultReg); + ssPushRegister(ReceiverResultReg); - if (numCopied > 0) { - ssFlushTo(simStackPtr); - } - (optStatus.isReceiverResultRegLive = 0); - ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); - - genCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(startpc + 1, numArgs, numCopied, methodOrBlockNumArgs, methodNeedsLargeContext(methodObj), inBlock); - if (numCopied > 0) { - ssPop(numCopied); - } - return ssPushRegister(ReceiverResultReg); + return 0; } @@ -25458,6 +25449,7 @@ assert(needsFrame); startpc = bytecodePC + (((generatorAt(byte0))->numBytes)); addBlockStartAtnumArgsnumCopiedspan(startpc, (numArgs = byte1 & 15), (numCopied = ((usqInt) byte1) >> 4), (byte2 << 8) + byte3); + /* begin genInlineClosure:numArgs:numCopied: */ assert(getActiveContextAllocatesInMachineCode()); (optStatus.isReceiverResultRegLive = 0); ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); @@ -25466,19 +25458,9 @@ reg = ssStorePoptoPreferredReg(1, TempReg); genStoreSourceRegslotIndexintoNewObjectInDestReg(reg, (ClosureFirstCopiedValueIndex + numCopied) - i, ReceiverResultReg); } - return ssPushRegister(ReceiverResultReg); + ssPushRegister(ReceiverResultReg); - if (numCopied > 0) { - ssFlushTo(simStackPtr); - } - (optStatus.isReceiverResultRegLive = 0); - ssAllocateCallRegandand(ReceiverResultReg, SendNumArgsReg, ClassReg); - - genCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(startpc + 1, numArgs, numCopied, methodOrBlockNumArgs, methodNeedsLargeContext(methodObj), inBlock); - if (numCopied > 0) { - ssPop(numCopied); - } - return ssPushRegister(ReceiverResultReg); + return 0; } @@ -25639,8 +25621,7 @@ static sqInt genPushReceiverBytecode(void) { - if (((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf)))) { + if ((optStatus.isReceiverResultRegLive)) { return ssPushRegister(ReceiverResultReg); } return ssPushDesc(simSelf); @@ -25679,16 +25660,25 @@ { AbstractInstruction *anInstruction; sqInt offset; + sqInt regMask; + sqInt remoteTempReg; + sqInt tempVectReg; - ssAllocateRequiredRegand(ClassReg, SendNumArgsReg); + tempVectReg = allocateRegNotConflictingWith(0); /* begin MoveMw:r:R: */ offset = frameOffsetOfTemporary(byte2); /* begin gen:quickConstant:operand:operand: */ /* begin checkQuickConstant:forInstruction: */ - anInstruction = genoperandoperandoperand(MoveMwrR, offset, FPReg, ClassReg); + anInstruction = genoperandoperandoperand(MoveMwrR, offset, FPReg, tempVectReg); anInstruction; - genLoadSlotsourceRegdestReg(byte1, ClassReg, SendNumArgsReg); - return ssPushRegister(SendNumArgsReg); + /* begin availableRegOrNilNotConflictingWith: */ + regMask = registerMaskFor(tempVectReg); + remoteTempReg = availableRegisterOrNilFor(backEnd, (liveRegisters()) | regMask); + if (!(remoteTempReg)) { + remoteTempReg = tempVectReg; + } + genLoadSlotsourceRegdestReg(byte1, tempVectReg, remoteTempReg); + return ssPushRegister(remoteTempReg); } @@ -25713,16 +25703,9 @@ static sqInt genReturnReceiver(void) { - AbstractInstruction *anInstruction; - if (needsFrame) { - if (!(((optStatus.isReceiverResultRegLive)) - && (((optStatus.ssEntry)) == ((&simSelf))))) { - /* begin MoveMw:r:R: */ - /* begin gen:quickConstant:operand:operand: */ - /* begin checkQuickConstant:forInstruction: */ - anInstruction = genoperandoperandoperand(MoveMwrR, FoxMFReceiver, FPReg, ReceiverResultReg); - anInstruction; + if (!((optStatus.isReceiverResultRegLive))) { + storeToReg((&simSelf), ReceiverResultReg); } } return genUpArrowReturn(); @@ -26237,9 +26220,7 @@ sqInt postBranchPC1; BytecodeDescriptor *primDescriptor; BytecodeDescriptor *primDescriptor1; - sqInt rcvrInt; sqInt rcvrIsInt; - sqInt result; sqInt target; sqInt targetBytecodePC; sqInt targetBytecodePC1; @@ -26250,39 +26231,10 @@ argIsInt = ((((ssTop())->type)) == SSConstant) && ((((argInt = ((ssTop())->constant))) & 1)); rcvrIsInt = ((((ssValue(1))->type)) == SSConstant) - && ((((rcvrInt = ((ssValue(1))->constant))) & 1)); + && (((((ssValue(1))->constant)) & 1)); if (argIsInt && (rcvrIsInt)) { - ; - - switch ((primDescriptor->opcode)) { - case JumpLess: - result = rcvrInt < argInt; - break; - case JumpLessOrEqual: - result = rcvrInt <= argInt; - break; - case JumpGreater: - result = rcvrInt > argInt; - break; - case JumpGreaterOrEqual: - result = rcvrInt >= argInt; - break; - case JumpZero: - result = rcvrInt == argInt; - break; - case JumpNonZero: - result = rcvrInt != argInt; - break; - default: - error("Case not found and no otherwise clause"); - } - annotateBytecodeIfAnnotated(ssValue(1)); - annotateBytecodeIfAnnotated(ssTop()); - ssPop(2); - return ssPushAnnotatedConstant((result - ? trueObject() - : falseObject())); + return genStaticallyResolvedSpecialSelectorComparison(); } /* begin extractMaybeBranchDescriptorInto: */ primDescriptor1 = generatorAt(byte0); @@ -26689,6 +26641,53 @@ } +/* Assumes both operands are ints */ + + /* StackToRegisterMappingCogit>>#genStaticallyResolvedSpecialSelectorComparison */ +static sqInt +genStaticallyResolvedSpecialSelectorComparison(void) +{ + sqInt argInt; + BytecodeDescriptor *primDescriptor; + sqInt rcvrInt; + sqInt result; + + primDescriptor = generatorAt(byte0); + argInt = ((ssTop())->constant); + rcvrInt = ((ssValue(1))->constant); + + + switch ((primDescriptor->opcode)) { + case JumpLess: + result = rcvrInt < argInt; + break; + case JumpLessOrEqual: + result = rcvrInt <= argInt; + break; + case JumpGreater: + result = rcvrInt > argInt; + break; + case JumpGreaterOrEqual: + result = rcvrInt >= argInt; + break; + case JumpZero: + result = rcvrInt == argInt; + break; + case JumpNonZero: + result = rcvrInt != argInt; + break; + default: + error("Case not found and no otherwise clause"); + } + annotateBytecodeIfAnnotated(ssValue(1)); + annotateBytecodeIfAnnotated(ssTop()); + ssPop(2); + return ssPushAnnotatedConstant((result + ? trueObject() + : falseObject())); +} + + /* The only reason we assert needsFrame here is that in a frameless method ReceiverResultReg must and does contain only self, but the ceStoreCheck trampoline expects the target of the store to be in ReceiverResultReg. So @@ -27026,30 +27025,34 @@ sqInt rThird1; sqInt rTop; sqInt rTop1; + sqInt thirdIsReceiver; sqInt topRegistersMask; rNext1 = 0; rThird1 = 0; rTop1 = 0; + needsStoreCheck = !(isUnannotatableConstant(ssTop())); /* begin allocateRegForStackTopThreeEntriesInto:thirdIsReceiver: */ + thirdIsReceiver = (prim == 0) + && (needsStoreCheck); topRegistersMask = 0; if (((((ssTop())->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssTop())->registerr)) != ReceiverResultReg))) { topRegistersMask = registerMaskFor((rTop1 = ((ssTop())->registerr))); } if (((((ssValue(1))->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssValue(1))->registerr)) != ReceiverResultReg))) { topRegistersMask = topRegistersMask | (registerMaskFor((rNext1 = ((ssValue(1))->registerr)))); } if (((((ssValue(2))->type)) == SSRegister) - && ((!(prim == 0)) + && ((!thirdIsReceiver) || ((((ssValue(2))->registerr)) == ReceiverResultReg))) { topRegistersMask = topRegistersMask | (registerMaskFor((rThird1 = ((ssValue(2))->registerr)))); } if (!(rThird1)) { - if (prim == 0) { + if (thirdIsReceiver) { /* Free ReceiverResultReg if it was not free */ @@ -27076,7 +27079,6 @@ assert((rr != ra1) && ((rr != ra2) && (ra1 != ra2))); - needsStoreCheck = !(isUnannotatableConstant(ssTop())); popToReg(ssTop(), ra2); ssPop(1); popToReg(ssTop(), ra1); @@ -27262,12 +27264,13 @@ CogSimStackEntry *desc; sqInt i; - (optStatus.isReceiverResultRegLive = 0); (simSelf.type = SSBaseOffset); (simSelf.spilled = 1); (simSelf.annotateUse = 0); (simSelf.registerr = FPReg); (simSelf.offset = FoxMFReceiver); + (optStatus.isReceiverResultRegLive = 0); + (optStatus.ssEntry = (&simSelf)); /* N.B. Includes num args */ @@ -28032,15 +28035,16 @@ CogSimStackEntry *desc; sqInt index; + /* begin ssFlushUpThrough: */ for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) { - desc = simStackAt(index); - if ((((desc->type)) == SSBaseOffset) - && ((((desc->registerr)) == ReceiverResultReg) - && (((desc->offset)) == (slotOffsetOfInstVarIndex(slotIndex))))) { + if (((((simStackAt(index))->type)) == SSBaseOffset) + && (((((simStackAt(index))->registerr)) == ReceiverResultReg) + && ((((simStackAt(index))->offset)) == (slotOffsetOfInstVarIndex(slotIndex))))) { ssFlushTo(index); - return; + goto l1; } } +l1: /* end ssFlushUpThrough: */; } @@ -28055,15 +28059,16 @@ CogSimStackEntry *desc; sqInt index; - for (index = (simStackPtr - 1); index >= simSpillBase; index += -1) { - desc = simStackAt(index); - if ((((desc->type)) == SSBaseOffset) - && ((((desc->registerr)) == FPReg) - && (((desc->offset)) == (frameOffsetOfTemporary(tempIndex))))) { + /* begin ssFlushUpThrough: */ + for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) { + if (((((simStackAt(index))->type)) == SSBaseOffset) + && (((((simStackAt(index))->registerr)) == FPReg) + && ((((simStackAt(index))->offset)) == (frameOffsetOfTemporary(tempIndex))))) { ssFlushTo(index); - return; + goto l1; } } +l1: /* end ssFlushUpThrough: */; } /* StackToRegisterMappingCogit>>#ssPop: */ @@ -28083,9 +28088,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSConstant); (cascade0->annotateUse = 1); @@ -28102,9 +28105,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSBaseOffset); (cascade0->spilled = 0); @@ -28122,9 +28123,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSConstant); (cascade0->spilled = 0); @@ -28145,9 +28144,7 @@ (simStackEntry.annotateUse = 0); (simStackEntry.bcptr = bytecodePC); simStack[(simStackPtr += 1)] = simStackEntry; - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); return 0; } @@ -28158,9 +28155,7 @@ CogSimStackEntry * cascade0; ssPush(1); - if (simSpillBase > simStackPtr) { - simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); - } + updateSimSpillBase(); cascade0 = ssTop(); (cascade0->type = SSRegister); (cascade0->spilled = 0); @@ -28303,6 +28298,15 @@ return 1; } + /* StackToRegisterMappingCogit>>#updateSimSpillBase */ +static void +updateSimSpillBase(void) +{ + if (simSpillBase > simStackPtr) { + simSpillBase = ((simStackPtr < 0) ? 0 : simStackPtr); + } +} + /* StackToRegisterMappingCogit>>#v3or4PushNilSize:numInitialNils: */ static sqInt v3or4PushNilSizenumInitialNils(sqInt aMethodObj, sqInt numInitialNils) Modified: branches/Cog/nsspursrc/vm/cointerp.c =================================================================== --- branches/Cog/nsspursrc/vm/cointerp.c 2015-06-28 19:15:19 UTC (rev 3392) +++ branches/Cog/nsspursrc/vm/cointerp.c 2015-06-29 23:59:01 UTC (rev 3393) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a from - CoInterpreter VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab + CoInterpreter VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1388 uuid: 5946eb20-1cae-4cba-98b5-467aa146ffab " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1401 uuid: 036f0933-639a-49dd-8a1d-a03bcdcb0a0a " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -1032,7 +1032,7 @@ extern usqLong fullGC(void) NeverInline; static float getHeapGrowthToSizeGCRatio(void); static sqInt goodContextSize(sqInt oop) NoDbgRegParms; -static usqInt growOldSpaceByAtLeast(sqInt minAmmount) NoDbgRegParms; +static sqInt growOldSpaceByAtLeast(sqInt minAmmount) NoDbgRegParms; extern usqLong headerForSlotsformatclassIndex(sqInt numSlots, sqInt formatField, sqInt classIndex); static sqInt hiddenRootSlots(void); extern sqInt identityHashHalfWordMask(void); @@ -1597,8 +1597,8 @@ _iss sqInt weaklingStack; _iss usqInt newSpaceStart; _iss sqInt lkupClassTag; +_iss SpurSegmentInfo * segments; _iss sqInt trueObj; -_iss SpurSegmentInfo * segments; _iss sqInt falseObj; _iss sqInt hiddenRootsObj; _iss usqInt scavengeThreshold; @@ -1791,6 +1791,7 @@ sqInt extraVMMemory; sqInt checkForLeaks; sqInt desiredCogCodeSize; +unsigned long maxOldSpaceSize; char * breakSelector; usqInt heapBase; void * showSurfaceFn; @@ -2409,7 +2410,7 @@ /*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1 }; char expensiveAsserts = 0; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1388"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1401"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace; @@ -2456,6 +2457,7 @@ #define rememberedSetSize() GIV(rememberedSetSize) #define endOfMemory() GIV(endOfMemory) #define freeStart() GIV(freeStart) +#define maxOldSpaceSize() maxOldSpaceSize #define memory() GIV(memory) #define newSpaceLimit() GIV(newSpaceLimit) #define oldSpaceStart() GIV(oldSpaceStart) @@ -18289,7 +18291,7 @@ static sqInt checkForAndFollowForwardedPrimitiveState(void) { DECL_MAYBE_SQ_GLOBAL_STRUCT - sqInt accessorDepth; + signed char accessorDepth; sqInt firstBytecode; sqInt found; sqInt found1; @@ -36329,7 +36331,7 @@ primitiveGrowMemoryByAtLeast(void) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt ammount; - usqInt segSize; + sqInt segSize; char *sp; ammount = longAt(GIV(stackPointer)); @@ -51911,13 +51913,17 @@ Answer the size of the new segment, or nil if the attempt failed. */ /* SpurMemoryManager>>#growOldSpaceByAtLeast: */ -static usqInt +static sqInt growOldSpaceByAtLeast(sqInt minAmmount) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt address; - sqInt ammount; + unsigned long ammount; sqInt bytes; + unsigned long headroom; + sqInt i; SpurSegmentInfo *segInfo; + usqInt total; + usqInt total1; /* statGrowMemory counts attempts, not successes. */ @@ -51934,26 +51940,47 @@ /* and grow by at least growHeadroom. */ ammount = 1 << (highBit(ammount - 1)); + + /* Now apply the maxOldSpaceSize limit, if one is in effect. */ + ammount = ((ammount < GIV(growHeadroom)) ? GIV(growHeadroom) : ammount); - return ((segInfo = addSegmentOfSize(ammount)), - (!(segInfo == null) - ? (/* begin assimilateNewSegment: */ - ((((segInfo->segSize)) + ((segInfo->segStart))) >= GIV(endOfMemory) - ? (GIV(freeOldSpaceStart) = (GIV(endOfMemory) = (((segInfo->segSize)) + ((segInfo->segStart))) - (2 * BaseHeaderSize))) - : 0), - sqMakeMemoryNotExecutableFromTo((segInfo->segStart), ((segInfo->segSize)) + ((segInfo->segStart))), - /* begin addFreeChunkWithBytes:at: */ - (bytes = ((segInfo->segSize)) - (2 * BaseHeaderSize)), - (address = (segInfo->segStart)), - freeChunkWithBytesat(bytes, address), - (GIV(totalFreeOldSpace) += bytes), - assert((addressAfter(objectStartingAt((segInfo->segStart)))) == ((segLimit(segInfo)) - (bridgeSize()))), - /* begin checkFreeSpace */ - assert(bitsSetInFreeSpaceMaskForAllFreeLists()), - assert(GIV(totalFreeOldSpace) == (totalFreeListBytes())), - checkSegments(), - (segInfo->segSize)) - : 0)); + if (maxOldSpaceSize > 0) { + /* begin totalBytesInSegments */ + total1 = 0; + for (i = 0; i < GIV(numSegments); i += 1) { + total1 += ((GIV(segments)[i]).segSize); + } + total = total1; + if (total >= maxOldSpaceSize) { + return null; + } + headroom = maxOldSpaceSize - total; + if (headroom < ammount) { + if (headroom < (minAmmount + ((BaseHeaderSize * 2) + (2 * BaseHeaderSize)))) { + return null; + } + ammount = headroom; + } + } + return (addSegmentOfSize(ammount) + ? totalBytesInSegments(maxOldSpaceSize( /* begin assimilateNewSegment: */ + if ((((segInfo->segSize)) + ((segInfo->segStart))) >= GIV(endOfMemory)) { + GIV(freeOldSpaceStart) = (GIV(endOfMemory) = (((segInfo->segSize)) + ((segInfo->segStart))) - (2 * BaseHeaderSize)); + } + sqMakeMemoryNotExecutableFromTo((segInfo->segStart), ((segInfo->segSize)) + ((segInfo->segStart))); + /* begin addFreeChunkWithBytes:at: */ + bytes = ((segInfo->segSize)) - (2 * BaseHeaderSize); + address = (segInfo->segStart); + freeChunkWithBytesat(bytes, address); + GIV(totalFreeOldSpace) += bytes; + assert((addressAfter(objectStartingAt((segInfo->segStart)))) == ((segLimit(segInfo)) - (bridgeSize()))); + /* begin checkFreeSpace */ + assert(bitsSetInFreeSpaceMaskForAllFreeLists()); + assert(GIV(totalFreeOldSpace) == (totalFreeListBytes())); + checkSegments(); + (segInfo->segSize); +)) + : 0); } @@ -60576,7 +60603,7 @@ usqInt prevFree; usqInt prevFreeChunk; usqInt prevPrevFree; - sqInt prevPrevFreeChunk; + usqInt prevPrevFreeChunk; sqInt slotBytes; sqInt slotBytes1; usqInt there; @@ -65109,7 +65136,7 @@ bridgeFromto(SpurSegmentInfo *aSegment, SpurSegmentInfo *nextSegmentOrNil) { usqInt bridgeSpan; - usqInt clifton; + sqInt clifton; usqInt segEnd; segEnd = ((aSegment->segSize)) + ((aSegment->segStart)); @@ -65350,7 +65377,7 @@ sqInt largeChild; sqInt newEndOfMemory; sqInt next; - sqInt node; + usqInt node; SpurSegmentInfo *seg; sqInt smallChild; sqInt treeNode; @@ -82627,7 +82654,7 @@ 38 milliseconds taken by current IGC (read-only) 39 Number of finalization signals for Weak Objects pending when current IGC/FGC completed (read-only) - 40 BytesPerWord for this image + 40 BytesPerOop for this image 41 imageFormatVersion for the VM 42 number of stack pages in use 43 desired number of stack pages (stored in image file header, max 65535) @@ -82657,7 +82684,9 @@ 64 the number of methods that currently have jitted machine-code 65 whether the VM supports MULTIPLE_BYTECODE_SETS or not. 66 the byte size of a stack page - 67 - 69 reserved for more Cog-related info + 67 the max allowed size of old space (Spur only; nil otherwise; 0 implies + no limit except that of the underlying platform) + 68 - 69 reserved for more Cog-related info 70 the vmProxyMajorVersion (the interpreterProxy VM_MAJOR_VERSION) 71 the vmProxyMinorVersion (the interpreterProxy VM_MINOR_VERSION) Note: Thanks to Ian Piumarta for this primitive. */ @@ -82703,6 +82732,7 @@ sqInt valuePointer29; sqInt valuePointer3; sqInt valuePointer30; + sqInt valuePointer31; sqInt valuePointer4; sqInt valuePointer5; sqInt valuePointer6; @@ -82715,45 +82745,45 @@ if (GIV(argumentCount) == 0) { result = instantiateClassindexableSize(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassArray << (shiftForWord()))), paramsArraySize); /* begin storePointer:ofObject:withValue: */ - valuePointer3 = positive64BitIntegerFor(totalBytesInSegments()); + valuePointer4 = positive64BitIntegerFor(totalBytesInSegments()); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer3 & 3) == 0) - && (oopisLessThan(valuePointer3, GIV(newSpaceLimit)))) { + if (((valuePointer4 & 3) == 0) + && (oopisLessThan(valuePointer4, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (0 << (shiftForWord())), valuePointer3); + longAtput((result + BaseHeaderSize) + (0 << (shiftForWord())), valuePointer4); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer4 = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1); + valuePointer5 = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (1 << (shiftForWord())), valuePointer4); + longAtput((result + BaseHeaderSize) + (1 << (shiftForWord())), valuePointer5); /* begin storePointer:ofObject:withValue: */ - valuePointer5 = positive64BitIntegerFor((newSpaceCapacity()) + (totalBytesInSegments())); + valuePointer6 = positive64BitIntegerFor((newSpaceCapacity()) + (totalBytesInSegments())); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer5 & 3) == 0) - && (oopisLessThan(valuePointer5, GIV(newSpaceLimit)))) { + if (((valuePointer6 & 3) == 0) + && (oopisLessThan(valuePointer6, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (2 << (shiftForWord())), valuePointer5); + longAtput((result + BaseHeaderSize) + (2 << (shiftForWord())), valuePointer6); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer6 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * BytesPerOop)))) << 1) | 1); + valuePointer7 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * BytesPerOop)))) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (5 << (shiftForWord())), valuePointer6); + longAtput((result + BaseHeaderSize) + (5 << (shiftForWord())), valuePointer7); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (6 << (shiftForWord())), ((GIV(statFullGCs) << 1) | 1)); @@ -82761,13 +82791,13 @@ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (7 << (shiftForWord())), ((((GIV(statFullGCUsecs) + 500) / 1000) << 1) | 1)); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer7 = (((GIV(statScavenges)) << 1) | 1); + valuePointer8 = (((GIV(statScavenges)) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (8 << (shiftForWord())), valuePointer7); + longAtput((result + BaseHeaderSize) + (8 << (shiftForWord())), valuePointer8); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer8 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1); + valuePointer9 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (9 << (shiftForWord())), valuePointer8); + longAtput((result + BaseHeaderSize) + (9 << (shiftForWord())), valuePointer9); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (10 << (shiftForWord())), ((GIV(statTenures) << 1) | 1)); @@ -82777,9 +82807,9 @@ longAtput((result + BaseHeaderSize) + (i << (shiftForWord())), ConstZero); } /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer9 = (((rootTableCount()) << 1) | 1); + valuePointer10 = (((rootTableCount()) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (20 << (shiftForWord())), valuePointer9); + longAtput((result + BaseHeaderSize) + (20 << (shiftForWord())), valuePointer10); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (21 << (shiftForWord())), ((GIV(statRootTableOverflows) << 1) | 1)); @@ -82793,9 +82823,9 @@ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (24 << (shiftForWord())), ((GIV(growHeadroom) << 1) | 1)); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer10 = (((ioHeartbeatMilliseconds()) << 1) | 1); + valuePointer11 = (((ioHeartbeatMilliseconds()) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (25 << (shiftForWord())), valuePointer10); + longAtput((result + BaseHeaderSize) + (25 << (shiftForWord())), valuePointer11); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (26 << (shiftForWord())), ((GIV(statMarkCount) << 1) | 1)); @@ -82836,9 +82866,9 @@ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (39 << (shiftForWord())), ((BytesPerWord << 1) | 1)); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer11 = (((imageFormatVersion()) << 1) | 1); + valuePointer12 = (((imageFormatVersion()) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (40 << (shiftForWord())), valuePointer11); + longAtput((result + BaseHeaderSize) + (40 << (shiftForWord())), valuePointer12); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (41 << (shiftForWord())), ((GIV(numStackPages) << 1) | 1)); @@ -82846,22 +82876,22 @@ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (42 << (shiftForWord())), ((desiredNumStackPages << 1) | 1)); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer12 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1); + valuePointer13 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (43 << (shiftForWord())), valuePointer12); + longAtput((result + BaseHeaderSize) + (43 << (shiftForWord())), valuePointer13); /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(result))); longAtput((result + BaseHeaderSize) + (44 << (shiftForWord())), ((desiredEdenBytes << 1) | 1)); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer13 = getCogCodeSize(); + valuePointer14 = getCogCodeSize(); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (45 << (shiftForWord())), valuePointer13); + longAtput((result + BaseHeaderSize) + (45 << (shiftForWord())), valuePointer14); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer14 = getDesiredCogCodeSize(); + valuePointer15 = getDesiredCogCodeSize(); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (46 << (shiftForWord())), valuePointer14); + longAtput((result + BaseHeaderSize) + (46 << (shiftForWord())), valuePointer15); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer15 = (((((((GIV(processHasThreadId) + valuePointer16 = (((((((GIV(processHasThreadId) ? 1 : 0)) + ((GIV(flagInterpretedMethods) ? 2 @@ -82871,15 +82901,15 @@ ? 8 : 0))) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (47 << (shiftForWord())), valuePointer15); + longAtput((result + BaseHeaderSize) + (47 << (shiftForWord())), valuePointer16); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer16 = (((ioGetMaxExtSemTableSize()) << 1) | 1); + valuePointer17 = (((ioGetMaxExtSemTableSize()) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (48 << (shiftForWord())), valuePointer16); + longAtput((result + BaseHeaderSize) + (48 << (shiftForWord())), valuePointer17); /* begin storePointerUnchecked:ofObject:withValue: */ - valuePointer17 = (((rootTableCapacity()) << 1) | 1); + valuePointer18 = (((rootTableCapacity()) << 1) | 1); assert(!(isForwarded(result))); - longAtput((result + BaseHeaderSize) + (51 << (shiftForWord())), valuePointer17); + longAtput((result + BaseHeaderSize) + (51 << (shiftForWord())), valuePointer18); /* begin storePointerUnchecked:ofObject:withValue: */ valuePointer = (((numSegments()) << 1) | 1); assert(!(isForwarded(result))); @@ -82906,129 +82936,134 @@ longAtput((result + BaseHeaderSize) + (54 << (shiftForWord())), valuePointer2); /* begin storePointer:ofObject:withValue: */ - valuePointer18 = positive64BitIntegerFor(GIV(statProcessSwitch)); + valuePointer19 = positive64BitIntegerFor(GIV(statProcessSwitch)); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer18 & 3) == 0) - && (oopisLessThan(valuePointer18, GIV(newSpaceLimit)))) { + if (((valuePointer19 & 3) == 0) + && (oopisLessThan(valuePointer19, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (55 << (shiftForWord())), valuePointer18); + longAtput((result + BaseHeaderSize) + (55 << (shiftForWord())), valuePointer19); /* begin storePointer:ofObject:withValue: */ - valuePointer19 = positive64BitIntegerFor(GIV(statIOProcessEvents)); + valuePointer20 = positive64BitIntegerFor(GIV(statIOProcessEvents)); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer19 & 3) == 0) - && (oopisLessThan(valuePointer19, GIV(newSpaceLimit)))) { + if (((valuePointer20 & 3) == 0) + && (oopisLessThan(valuePointer20, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (56 << (shiftForWord())), valuePointer19); + longAtput((result + BaseHeaderSize) + (56 << (shiftForWord())), valuePointer20); /* begin storePointer:ofObject:withValue: */ - valuePointer20 = positive64BitIntegerFor(GIV(statForceInterruptCheck)); + valuePointer21 = positive64BitIntegerFor(GIV(statForceInterruptCheck)); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer20 & 3) == 0) - && (oopisLessThan(valuePointer20, GIV(newSpaceLimit)))) { + if (((valuePointer21 & 3) == 0) + && (oopisLessThan(valuePointer21, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (57 << (shiftForWord())), valuePointer20); + longAtput((result + BaseHeaderSize) + (57 << (shiftForWord())), valuePointer21); /* begin storePointer:ofObject:withValue: */ - valuePointer21 = positive64BitIntegerFor(GIV(statCheckForEvents)); + valuePointer22 = positive64BitIntegerFor(GIV(statCheckForEvents)); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer21 & 3) == 0) - && (oopisLessThan(valuePointer21, GIV(newSpaceLimit)))) { + if (((valuePointer22 & 3) == 0) + && (oopisLessThan(valuePointer22, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (58 << (shiftForWord())), valuePointer21); + longAtput((result + BaseHeaderSize) + (58 << (shiftForWord())), valuePointer22); /* begin storePointer:ofObject:withValue: */ - valuePointer22 = positive64BitIntegerFor(GIV(statStackOverflow)); + valuePointer23 = positive64BitIntegerFor(GIV(statStackOverflow)); assert(!(isForwarded(result))); if (isOldObject(result)) { /* most stores into young objects */ - if (((valuePointer22 & 3) == 0) - && (oopisLessThan(valuePointer22, GIV(newSpaceLimit)))) { + if (((valuePointer23 & 3) == 0) + && (oopisLessThan(valuePointer23, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) { remember(result); } } } - longAtput((result + BaseHeaderSize) + (59 << (shiftForWord())), valuePointer22); @@ Diff output truncated at 50000 characters. @@ |
Free forum by Nabble | Edit this page |