Revision: 3553 Author: eliot Date: 2016-01-10 14:51:42 -0800 (Sun, 10 Jan 2016) Log Message: ----------- CogVm source as per VMMaker.oscog-eem.1630 Cogit: Fix the bug in ceCaptureStackPointers caused by pushing VarBasReg to save it offsetting the stack pointer. Eliminate all the maybe*VarBase methods since we have hasVarBaseRegister and the few clients can test that and hnce not have to divine if maybeSaveVarBase pushed something or not. On Mac IS X modify the stack alignment definitions to reflect documented Apple policy. Modified Paths: -------------- branches/Cog/nsspursrc/vm/cogit.h branches/Cog/nsspursrc/vm/cogitARMv5.c branches/Cog/nsspursrc/vm/cogitIA32.c branches/Cog/nsspursrc/vm/cogitMIPSEL.c branches/Cog/platforms/Cross/vm/sqCogStackAlignment.h branches/Cog/spur64src/vm/cogit.h branches/Cog/spur64src/vm/cogitX64.c branches/Cog/spursistasrc/vm/cogit.h branches/Cog/spursistasrc/vm/cogitARMv5.c branches/Cog/spursistasrc/vm/cogitIA32.c branches/Cog/spursistasrc/vm/cogitMIPSEL.c branches/Cog/spursrc/vm/cogit.h branches/Cog/spursrc/vm/cogitARMv5.c branches/Cog/spursrc/vm/cogitIA32.c branches/Cog/spursrc/vm/cogitMIPSEL.c branches/Cog/src/vm/cogit.h branches/Cog/src/vm/cogitARMv5.c branches/Cog/src/vm/cogitIA32.c branches/Cog/src/vm/cogitMIPSEL.c Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h Modified: branches/Cog/nsspursrc/vm/cogit.h =================================================================== --- branches/Cog/nsspursrc/vm/cogit.h 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/nsspursrc/vm/cogit.h 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitARMv5.c 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/nsspursrc/vm/cogitARMv5.c 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab from - StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -955,7 +955,6 @@ static sqInt endSizeOffset(void); static sqInt NoDbgRegParms literalInstructionInRange(AbstractInstruction *litInst); static AbstractInstruction * NoDbgRegParms locateLiteral(sqInt aLiteral); -static sqInt NoDbgRegParms mustDumpLiterals(sqInt currentOpcodeIndex); static sqInt resetForBlockCompile(void); static sqInt saveForBlockCompile(void); static sqInt compileBlockDispatch(void); @@ -10067,14 +10066,14 @@ sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ + /* begin MoveCq:R: */ quickConstant = varBaseAddress(); /* begin gen:quickConstant:operand: */ anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); if (usesOutOfLineLiteral(anInstruction)) { (anInstruction->dependent = locateLiteral(quickConstant)); } - ((AbstractInstruction *) backEnd); + genLoadStackPointers(backEnd); if (regArg3OrNone != NoReg) { /* begin PopR: */ @@ -10163,6 +10162,7 @@ sqInt fixupSize; sqInt opcodeSize; sqInt quickConstant; + sqInt quickConstant1; sqInt startAddress; /* begin allocateOpcodes:bytecodes: */ @@ -10174,32 +10174,42 @@ fixups = ((void *)((((usqInt)abstractOpcodes)) + opcodeSize)); zeroOpcodeIndex(); labelCounter = 0; + + /* Must happen first; value may be used in accessing any of the following addresses */ startAddress = methodZoneBase; - /* begin maybeSaveVarBase */ + /* begin PushR: */ genoperand(PushR, VarBaseReg); - ((AbstractInstruction *) backEnd); - /* begin maybeEstablishVarBase */ - quickConstant = varBaseAddress(); + /* begin MoveCq:R: */ + quickConstant1 = varBaseAddress(); /* begin gen:quickConstant:operand: */ - anInstruction1 = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); + anInstruction1 = genoperandoperand(MoveCqR, quickConstant1, VarBaseReg); if (usesOutOfLineLiteral(anInstruction1)) { - (anInstruction1->dependent = locateLiteral(quickConstant)); + (anInstruction1->dependent = locateLiteral(quickConstant1)); } - ((AbstractInstruction *) backEnd); + if (captureFramePointer) { /* begin MoveR:Aw: */ address = cFramePointerAddress(); /* begin gen:operand:literal: */ checkLiteralforInstruction(address, genoperandoperand(MoveRAw, FPReg, address)); } + /* begin MoveR:R: */ + genoperandoperand(MoveRR, SPReg, TempReg); + /* begin AddCq:R: */ + quickConstant = 0 + BytesPerWord; + /* begin gen:quickConstant:operand: */ + anInstruction = genoperandoperand(AddCqR, quickConstant, TempReg); + if (usesOutOfLineLiteral(anInstruction)) { + (anInstruction->dependent = locateLiteral(quickConstant)); + } /* begin MoveR:Aw: */ address1 = cStackPointerAddress(); /* begin gen:operand:literal: */ - checkLiteralforInstruction(address1, genoperandoperand(MoveRAw, SPReg, address1)); + checkLiteralforInstruction(address1, genoperandoperand(MoveRAw, TempReg, address1)); - /* begin maybeRestoreVarBase */ + /* begin PopR: */ genoperand(PopR, VarBaseReg); - ((AbstractInstruction *) backEnd); + /* begin RetN: */ genoperand(RetN, 0); outputInstructionsForGeneratedRuntimeAt(startAddress); @@ -16169,7 +16179,6 @@ jumpNotSI = genJumpNotSmallInteger(Arg0Reg); genShiftAwaySmallIntegerTagsInScratchReg(ClassReg); genRemoveSmallIntegerTagsInScratchReg(Arg1Reg); - /* begin MulR:R: */ genMulRR(backEnd, Arg1Reg, ClassReg); /* begin JumpOverflow: */ jumpOvfl = genConditionalBranchoperand(JumpOverflow, ((sqInt)0)); @@ -21984,14 +21993,6 @@ return litInst; } - /* OutOfLineLiteralsManager>>#mustDumpLiterals: */ -static sqInt NoDbgRegParms -mustDumpLiterals(sqInt currentOpcodeIndex) -{ - return (currentOpcodeIndex >= firstOpcodeIndex) - && ((currentOpcodeIndex - firstOpcodeIndex) >= (outOfLineLiteralOpcodeLimit(backEnd()))); -} - /* OutOfLineLiteralsManager>>#resetForBlockCompile */ static sqInt resetForBlockCompile(void) @@ -23445,14 +23446,14 @@ sqInt reg; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ + /* begin MoveCq:R: */ quickConstant = varBaseAddress(); /* begin gen:quickConstant:operand: */ - anInstruction6 = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); - if (usesOutOfLineLiteral(anInstruction6)) { - (anInstruction6->dependent = locateLiteral(quickConstant)); + anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); + if (usesOutOfLineLiteral(anInstruction)) { + (anInstruction->dependent = locateLiteral(quickConstant)); } - ((AbstractInstruction *) backEnd); + if (profiling) { /* Test nextProfileTick for being non-zero and call checkProfileTick: if so. @@ -23508,9 +23509,9 @@ checkLiteralforInstruction(address8, genoperandoperand(MoveAwR, address8, reg)); genLoadStackPointers(backEnd); /* begin MoveMw:r:R: */ - anInstruction4 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); - if (usesOutOfLineLiteral(anInstruction4)) { - (anInstruction4->dependent = locateLiteral(0)); + anInstruction5 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); + if (usesOutOfLineLiteral(anInstruction5)) { + (anInstruction5->dependent = locateLiteral(0)); } /* begin RetN: */ @@ -24798,7 +24799,8 @@ (fixup->targetInstruction = abstractInstructionAt(nextOpcodeIndex)); } /* begin maybeDumpLiterals: */ - if ((mustDumpLiterals(opcodeIndex)) + if (((opcodeIndex >= firstOpcodeIndex) + && ((opcodeIndex - firstOpcodeIndex) >= (outOfLineLiteralOpcodeLimit(backEnd())))) || ((isUnconditionalBranch(descriptor)) || ((descriptor->isReturn)))) { dumpLiterals(!((isUnconditionalBranch(descriptor)) @@ -25439,14 +25441,14 @@ sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ + /* begin MoveCq:R: */ quickConstant = varBaseAddress(); /* begin gen:quickConstant:operand: */ anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); if (usesOutOfLineLiteral(anInstruction)) { (anInstruction->dependent = locateLiteral(quickConstant)); } - ((AbstractInstruction *) backEnd); + genLoadStackPointers(backEnd); /* begin PopR: */ genoperand(PopR, ClassReg); Modified: branches/Cog/nsspursrc/vm/cogitIA32.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitIA32.c 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/nsspursrc/vm/cogitIA32.c 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab from - StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -929,8 +929,7 @@ static sqInt genLongUnconditionalForwardJump(void); static sqInt NoDbgRegParms genLookupForPerformNumArgs(sqInt numArgs); static AbstractInstruction * NoDbgRegParms genMoveConstantR(sqInt constant, sqInt reg); -static AbstractInstruction * NoDbgRegParms genMoveFalseR(sqInt reg); -static sqInt NoDbgRegParms genMoveTrueR(sqInt reg); +static AbstractInstruction * NoDbgRegParms genMoveTrueR(sqInt reg); static sqInt NoDbgRegParms genMustBeBooleanTrampolineForcalled(sqInt boolean, char *trampolineName); static void NoDbgRegParms genPrimReturnEnterCogCodeEnilopmart(sqInt profiling); static sqInt genPushClosureTempsBytecode(void); @@ -3148,7 +3147,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset15) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset15) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset15) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpLongNonZero: @@ -3188,7 +3187,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset17) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset17) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset17) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case Jump: @@ -3253,7 +3252,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset19) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset19) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset19) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpNonNegative: @@ -3291,7 +3290,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset110) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset110) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset110) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpOverflow: @@ -3329,7 +3328,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset111) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset111) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset111) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpNoOverflow: @@ -3367,7 +3366,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset112) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset112) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset112) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpCarry: @@ -3407,7 +3406,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset113) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset113) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset113) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpNoCarry: @@ -3447,7 +3446,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset114) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset114) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset114) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpLess: @@ -3485,7 +3484,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset115) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset115) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset115) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpGreaterOrEqual: @@ -3523,7 +3522,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset116) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset116) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset116) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpGreater: @@ -3561,7 +3560,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset117) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset117) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset117) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpLessOrEqual: @@ -3599,7 +3598,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset118) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset118) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset118) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpAbove: @@ -3638,7 +3637,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset119) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset119) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset119) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpBelowOrEqual: @@ -3677,7 +3676,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset120) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset120) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset120) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpFPOrdered: @@ -3715,7 +3714,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset121) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset121) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset121) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case JumpFPUnordered: @@ -3753,7 +3752,7 @@ ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) offset122) >> 8) & 0xFF); ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset122) >> 16) & 0xFF); ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset122) >> 24) & 0xFF); - ((usqInt) (((self_in_dispatchConcretize->machineCodeSize) = 6))); + ((self_in_dispatchConcretize->machineCodeSize) = 6); return; case RetN: @@ -9211,13 +9210,13 @@ static void (*genEnilopmartForandandforCallcalled(sqInt regArg1, sqInt regArg2OrNone, sqInt regArg3OrNone, sqInt forCall, char *trampolineName))(void) { + AbstractInstruction *anInstruction; sqInt endAddress; sqInt enilopmart; + sqInt quickConstant; sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); genLoadStackPointers(backEnd); if (regArg3OrNone != NoReg) { /* begin PopR: */ @@ -9294,9 +9293,11 @@ AbstractInstruction *anInstruction1; AbstractInstruction *anInstruction2; AbstractInstruction *anInstruction3; + AbstractInstruction *anInstruction4; sqInt fixupSize; sqInt opcodeSize; sqInt quickConstant; + sqInt quickConstant1; sqInt startAddress; /* begin allocateOpcodes:bytecodes: */ @@ -9308,16 +9309,14 @@ fixups = ((void *)((((usqInt)abstractOpcodes)) + opcodeSize)); zeroOpcodeIndex(); labelCounter = 0; + + /* Must happen first; value may be used in accessing any of the following addresses */ startAddress = methodZoneBase; - /* begin maybeSaveVarBase */ - ((AbstractInstruction *) backEnd); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); if (captureFramePointer) { /* begin MoveR:Aw: */ address = cFramePointerAddress(); /* begin gen:operand:literal: */ - anInstruction1 = genoperandoperand(MoveRAw, FPReg, address); + anInstruction2 = genoperandoperand(MoveRAw, FPReg, address); } /* begin MoveR:R: */ genoperandoperand(MoveRR, SPReg, TempReg); @@ -9326,12 +9325,10 @@ /* begin gen:quickConstant:operand: */ anInstruction = genoperandoperand(AddCqR, quickConstant, TempReg); /* begin MoveR:Aw: */ - address2 = cStackPointerAddress(); + address1 = cStackPointerAddress(); /* begin gen:operand:literal: */ - anInstruction3 = genoperandoperand(MoveRAw, TempReg, address2); + anInstruction3 = genoperandoperand(MoveRAw, TempReg, address1); - /* begin maybeRestoreVarBase */ - ((AbstractInstruction *) backEnd); /* begin RetN: */ genoperand(RetN, 0); outputInstructionsForGeneratedRuntimeAt(startAddress); @@ -9554,12 +9551,12 @@ generateMapAtstart(sqInt addressOrNull, sqInt startAddress) { unsigned char annotation; - usqInt delta; + sqInt delta; sqInt i; AbstractInstruction *instruction; sqInt length; - usqInt location; - usqInt mapEntry; + sqInt location; + sqInt mapEntry; sqInt maxDelta; usqInt mcpc; @@ -10912,7 +10909,8 @@ literal = literalBeforeFollowingAddress(backEnd, mcpc); mappedLiteral = remapObject(literal); if (mappedLiteral != literal) { - storeLiteralbeforeFollowingAddress(backEnd, mappedLiteral, mcpc); + /* begin storeLiteral:atAnnotatedAddress:using: */ + storeLiteralbeforeFollowingAddress(((AbstractInstruction *) backEnd), mappedLiteral, mcpc); codeModified = 1; } } @@ -12624,7 +12622,8 @@ if (couldBeObject(literal)) { mappedLiteral = remapObject(literal); if (literal != mappedLiteral) { - storeLiteralbeforeFollowingAddress(backEnd, mappedLiteral, ((usqInt)mcpc)); + /* begin storeLiteral:atAnnotatedAddress:using: */ + storeLiteralbeforeFollowingAddress(((AbstractInstruction *) backEnd), mappedLiteral, ((usqInt)mcpc)); codeModified = 1; } if ((hasYoungPtr != 0) @@ -14594,7 +14593,7 @@ /* FP jumps are a little weird */ jumpCond = jumpOpcodeGenerator(0); - /* begin genMoveFalseR: */ + /* begin genMoveConstant:R: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -14607,7 +14606,7 @@ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ genoperand(RetN, 0); - jmpTarget(jumpCond, genMoveConstantR(trueObject(), ReceiverResultReg)); + jmpTarget(jumpCond, genMoveTrueR(ReceiverResultReg)); /* begin genPrimReturn */ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ @@ -15378,7 +15377,7 @@ /* begin CmpR:R: */ genoperandoperand(CmpRR, Arg0Reg, ReceiverResultReg); jumpTrue = genConditionalBranchoperand(jumpOpcode, 0); - /* begin genMoveFalseR: */ + /* begin genMoveConstant:R: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -15391,7 +15390,7 @@ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ genoperand(RetN, 0); - jmpTarget(jumpTrue, genMoveConstantR(trueObject(), ReceiverResultReg)); + jmpTarget(jumpTrue, genMoveTrueR(ReceiverResultReg)); /* begin genPrimReturn */ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ @@ -15446,7 +15445,7 @@ /* FP jumps are a little weird */ jumpCond = jumpFPOpcodeGenerator(0); - /* begin genMoveFalseR: */ + /* begin genMoveConstant:R: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -15459,7 +15458,7 @@ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ genoperand(RetN, 0); - jmpTarget(jumpCond, genMoveConstantR(trueObject(), ReceiverResultReg)); + jmpTarget(jumpCond, genMoveTrueR(ReceiverResultReg)); /* begin genPrimReturn */ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ @@ -18558,7 +18557,7 @@ /* begin JumpNonZero: */ jumpCmp = genConditionalBranchoperand(JumpNonZero, ((sqInt)0)); } - /* begin genMoveConstant:R: */ + /* begin genMoveTrueR: */ constant = trueObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -18571,7 +18570,7 @@ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ genoperand(RetN, 0); - jmpTarget(jumpCmp, genMoveFalseR(ReceiverResultReg)); + jmpTarget(jumpCmp, genMoveConstantR(falseObject(), ReceiverResultReg)); /* begin genPrimReturn */ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ @@ -20772,24 +20771,8 @@ anInstruction)); } - /* SimpleStackBasedCogit>>#genMoveFalseR: */ -static AbstractInstruction * NoDbgRegParms -genMoveFalseR(sqInt reg) -{ - AbstractInstruction *anInstruction; - sqInt constant; - - /* begin genMoveConstant:R: */ - constant = falseObject(); - return (shouldAnnotateObjectReference(constant) - ? annotateobjRef(gMoveCwR(constant, reg), constant) - : (/* begin MoveCq:R: */ - (anInstruction = genoperandoperand(MoveCqR, constant, reg)), - anInstruction)); -} - /* SimpleStackBasedCogit>>#genMoveTrueR: */ -static sqInt NoDbgRegParms +static AbstractInstruction * NoDbgRegParms genMoveTrueR(sqInt reg) { AbstractInstruction *anInstruction; @@ -20846,6 +20829,7 @@ AbstractInstruction *anInstruction15; AbstractInstruction *anInstruction16; AbstractInstruction *anInstruction17; + AbstractInstruction *anInstruction18; AbstractInstruction *anInstruction2; AbstractInstruction *anInstruction3; AbstractInstruction *anInstruction4; @@ -20858,11 +20842,10 @@ AbstractInstruction *continuePostSample; AbstractInstruction *jmpFail; AbstractInstruction *jmpSample; + sqInt quickConstant; sqInt reg; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); if (profiling) { /* Test nextProfileTick for being non-zero and call checkProfileTick: if so. @@ -20870,11 +20853,11 @@ /* begin MoveAw:R: */ address = nextProfileTickAddress(); /* begin gen:literal:operand: */ - anInstruction = genoperandoperand(MoveAwR, address, TempReg); + anInstruction1 = genoperandoperand(MoveAwR, address, TempReg); /* begin MoveAw:R: */ address1 = (nextProfileTickAddress()) + BytesPerWord; /* begin gen:literal:operand: */ - anInstruction1 = genoperandoperand(MoveAwR, address1, ClassReg); + anInstruction2 = genoperandoperand(MoveAwR, address1, ClassReg); /* begin OrR:R: */ genoperandoperand(OrRR, TempReg, ClassReg); @@ -20887,21 +20870,21 @@ /* begin MoveAw:R: */ address6 = primFailCodeAddress(); /* begin gen:literal:operand: */ - anInstruction12 = genoperandoperand(MoveAwR, address6, TempReg); + anInstruction13 = genoperandoperand(MoveAwR, address6, TempReg); flag("ask concrete code gen if move sets condition codes?"); /* begin CmpCq:R: */ - anInstruction13 = genoperandoperand(CmpCqR, 0, TempReg); + anInstruction14 = genoperandoperand(CmpCqR, 0, TempReg); /* begin JumpNonZero: */ jmpFail = genConditionalBranchoperand(JumpNonZero, ((sqInt)0)); /* begin MoveAw:R: */ address5 = instructionPointerAddress(); /* begin gen:literal:operand: */ - anInstruction7 = genoperandoperand(MoveAwR, address5, ClassReg); + anInstruction8 = genoperandoperand(MoveAwR, address5, ClassReg); genLoadStackPointers(backEnd); /* begin MoveMw:r:R: */ - anInstruction8 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); + anInstruction9 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); /* begin MoveR:Mw:r: */ - anInstruction9 = genoperandoperandoperand(MoveRMwr, ClassReg, 0, SPReg); + anInstruction10 = genoperandoperandoperand(MoveRMwr, ClassReg, 0, SPReg); /* begin RetN: */ genoperand(RetN, 0); @@ -20909,16 +20892,16 @@ /* begin MoveAw:R: */ address7 = cStackPointerAddress(); /* begin gen:literal:operand: */ - anInstruction14 = genoperandoperand(MoveAwR, address7, SPReg); + anInstruction15 = genoperandoperand(MoveAwR, address7, SPReg); compileCallFornumArgsargargargargresultRegsaveRegs(ceActivateFailingPrimitiveMethod, 1, SendNumArgsReg, null, null, null, NoReg, 0); /* begin MoveAw:R: */ address8 = instructionPointerAddress(); reg = ClassReg; /* begin gen:literal:operand: */ - anInstruction15 = genoperandoperand(MoveAwR, address8, reg); + anInstruction16 = genoperandoperand(MoveAwR, address8, reg); genLoadStackPointers(backEnd); /* begin MoveMw:r:R: */ - anInstruction11 = genoperandoperandoperand(MoveMwrR, BytesPerWord, SPReg, ReceiverResultReg); + anInstruction12 = genoperandoperandoperand(MoveMwrR, BytesPerWord, SPReg, ReceiverResultReg); /* begin PushR: */ genoperand(PushR, ClassReg); @@ -20932,8 +20915,8 @@ /* begin CallFullRT: */ callTarget = (unsigned long)ceCheckProfileTick; /* begin annotateCall: */ - anInstruction17 = genoperand(CallFull, callTarget); - abstractInstruction = anInstruction17; + anInstruction18 = genoperand(CallFull, callTarget); + abstractInstruction = anInstruction18; (abstractInstruction->annotation = IsRelativeCall); @@ -22805,14 +22788,14 @@ static void (*genCallPICEnilopmartNumArgs(sqInt numArgs))(void) { + AbstractInstruction *anInstruction; sqInt endAddress; sqInt enilopmart; + sqInt quickConstant; sqInt reg; sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); genLoadStackPointers(backEnd); /* begin PopR: */ genoperand(PopR, ClassReg); Modified: branches/Cog/nsspursrc/vm/cogitMIPSEL.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitMIPSEL.c 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/nsspursrc/vm/cogitMIPSEL.c 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab from - StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -756,11 +756,11 @@ static sqInt NoDbgRegParms computeMaximumSize(AbstractInstruction * self_in_computeMaximumSize); static usqInt NoDbgRegParms concretizeAddCheckOverflowCqR(AbstractInstruction * self_in_concretizeAddCheckOverflowCqR); static usqInt NoDbgRegParms concretizeAddCheckOverflowRR(AbstractInstruction * self_in_concretizeAddCheckOverflowRR); -static usqInt NoDbgRegParms concretizeAddCqR(AbstractInstruction * self_in_concretizeAddCqR); +static sqInt NoDbgRegParms concretizeAddCqR(AbstractInstruction * self_in_concretizeAddCqR); static usqInt NoDbgRegParms concretizeAddCwR(AbstractInstruction * self_in_concretizeAddCwR); static usqInt NoDbgRegParms concretizeAddRR(AbstractInstruction * self_in_concretizeAddRR); static AbstractInstruction * NoDbgRegParms concretizeAlignmentNops(AbstractInstruction * self_in_concretizeAlignmentNops); -static usqInt NoDbgRegParms concretizeAndCqR(AbstractInstruction * self_in_concretizeAndCqR); +static sqInt NoDbgRegParms concretizeAndCqR(AbstractInstruction * self_in_concretizeAndCqR); static usqInt NoDbgRegParms concretizeAndCqRR(AbstractInstruction * self_in_concretizeAndCqRR); static usqInt NoDbgRegParms concretizeAndCwR(AbstractInstruction * self_in_concretizeAndCwR); static usqInt NoDbgRegParms concretizeAndRR(AbstractInstruction * self_in_concretizeAndRR); @@ -779,7 +779,7 @@ static usqInt NoDbgRegParms concretizeBrUnsignedGreaterRR(AbstractInstruction * self_in_concretizeBrUnsignedGreaterRR); static usqInt NoDbgRegParms concretizeBrUnsignedLessEqualRR(AbstractInstruction * self_in_concretizeBrUnsignedLessEqualRR); static usqInt NoDbgRegParms concretizeBrUnsignedLessRR(AbstractInstruction * self_in_concretizeBrUnsignedLessRR); -static usqInt NoDbgRegParms concretizeCall(AbstractInstruction * self_in_concretizeCall); +static sqInt NoDbgRegParms concretizeCall(AbstractInstruction * self_in_concretizeCall); static usqInt NoDbgRegParms concretizeCallFull(AbstractInstruction * self_in_concretizeCallFull); static sqInt NoDbgRegParms concretizeCmpCqR(AbstractInstruction * self_in_concretizeCmpCqR); static sqInt NoDbgRegParms concretizeCmpCwR(AbstractInstruction * self_in_concretizeCmpCwR); @@ -829,12 +829,12 @@ static usqInt NoDbgRegParms concretizeMulCheckOverflowRR(AbstractInstruction * self_in_concretizeMulCheckOverflowRR); static usqInt NoDbgRegParms concretizeNegateR(AbstractInstruction * self_in_concretizeNegateR); static usqInt NoDbgRegParms concretizeNop(AbstractInstruction * self_in_concretizeNop); -static usqInt NoDbgRegParms concretizeOrCqR(AbstractInstruction * self_in_concretizeOrCqR); +static sqInt NoDbgRegParms concretizeOrCqR(AbstractInstruction * self_in_concretizeOrCqR); static usqInt NoDbgRegParms concretizeOrCwR(AbstractInstruction * self_in_concretizeOrCwR); static usqInt NoDbgRegParms concretizeOrRR(AbstractInstruction * self_in_concretizeOrRR); static usqInt NoDbgRegParms concretizePopR(AbstractInstruction * self_in_concretizePopR); static usqInt NoDbgRegParms concretizePrefetchAw(AbstractInstruction * self_in_concretizePrefetchAw); -static usqInt NoDbgRegParms concretizePushCq(AbstractInstruction * self_in_concretizePushCq); +static sqInt NoDbgRegParms concretizePushCq(AbstractInstruction * self_in_concretizePushCq); static usqInt NoDbgRegParms concretizePushCw(AbstractInstruction * self_in_concretizePushCw); static usqInt NoDbgRegParms concretizePushR(AbstractInstruction * self_in_concretizePushR); static usqInt NoDbgRegParms concretizeRetN(AbstractInstruction * self_in_concretizeRetN); @@ -1037,7 +1037,7 @@ static sqInt NoDbgRegParms genGetClassIndexOfNonImminto(sqInt sourceReg, sqInt destReg); static sqInt NoDbgRegParms genGetClassObjectOfClassIndexintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); static sqInt NoDbgRegParms genGetClassObjectOfintoscratchReginstRegIsReceiver(sqInt instReg, sqInt destReg, sqInt scratchReg, sqInt instRegIsReceiver); -static sqInt NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); +static AbstractInstruction * NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); static sqInt NoDbgRegParms genGetCompactClassIndexNonImmOfinto(sqInt instReg, sqInt destReg); static sqInt NoDbgRegParms genGetDoubleValueOfinto(sqInt srcReg, sqInt destFPReg); static sqInt NoDbgRegParms genGetFormatOfinto(sqInt srcReg, sqInt destReg); @@ -4843,7 +4843,7 @@ { sqInt classTag; usqInt classTagPC; - usqInt entryPoint; + sqInt entryPoint; sqInt errors; sqInt i; usqInt methodObjPC; @@ -5337,13 +5337,18 @@ static void (*genEnilopmartForandandforCallcalled(sqInt regArg1, sqInt regArg2OrNone, sqInt regArg3OrNone, sqInt forCall, char *trampolineName))(void) { + AbstractInstruction *anInstruction; sqInt endAddress; sqInt enilopmart; + sqInt quickConstant; sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); + /* begin MoveCq:R: */ + quickConstant = varBaseAddress(); + /* begin gen:quickConstant:operand: */ + anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); + genLoadStackPointers(backEnd); if (regArg3OrNone != NoReg) { /* begin PopR: */ @@ -5433,8 +5438,11 @@ AbstractInstruction *anInstruction1; AbstractInstruction *anInstruction2; AbstractInstruction *anInstruction3; + AbstractInstruction *anInstruction4; sqInt fixupSize; sqInt opcodeSize; + sqInt quickConstant; + sqInt quickConstant1; sqInt startAddress; /* begin allocateOpcodes:bytecodes: */ @@ -5446,24 +5454,36 @@ fixups = ((void *)((((usqInt)abstractOpcodes)) + opcodeSize)); zeroOpcodeIndex(); labelCounter = 0; + + /* Must happen first; value may be used in accessing any of the following addresses */ startAddress = methodZoneBase; - /* begin maybeSaveVarBase */ - ((AbstractInstruction *) backEnd); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); + /* begin PushR: */ + genoperand(PushR, VarBaseReg); + /* begin MoveCq:R: */ + quickConstant1 = varBaseAddress(); + /* begin gen:quickConstant:operand: */ + anInstruction1 = genoperandoperand(MoveCqR, quickConstant1, VarBaseReg); + if (captureFramePointer) { /* begin MoveR:Aw: */ address = cFramePointerAddress(); /* begin gen:operand:literal: */ - anInstruction1 = genoperandoperand(MoveRAw, FPReg, address); + anInstruction2 = genoperandoperand(MoveRAw, FPReg, address); } + /* begin MoveR:R: */ + genoperandoperand(MoveRR, SPReg, TempReg); + /* begin AddCq:R: */ + quickConstant = 0 + BytesPerWord; + /* begin gen:quickConstant:operand: */ + anInstruction = genoperandoperand(AddCqR, quickConstant, TempReg); /* begin MoveR:Aw: */ address1 = cStackPointerAddress(); /* begin gen:operand:literal: */ - anInstruction2 = genoperandoperand(MoveRAw, SPReg, address1); + anInstruction3 = genoperandoperand(MoveRAw, TempReg, address1); - /* begin maybeRestoreVarBase */ - ((AbstractInstruction *) backEnd); + /* begin PopR: */ + genoperand(PopR, VarBaseReg); + /* begin RetN: */ genoperand(RetN, 0); outputInstructionsForGeneratedRuntimeAt(startAddress); @@ -5686,12 +5706,12 @@ generateMapAtstart(sqInt addressOrNull, sqInt startAddress) { unsigned char annotation; - usqInt delta; + sqInt delta; sqInt i; AbstractInstruction *instruction; sqInt length; - usqInt location; - usqInt mapEntry; + sqInt location; + sqInt mapEntry; sqInt maxDelta; usqInt mcpc; @@ -10942,7 +10962,7 @@ } /* CogMIPSELCompiler>>#concretizeAddCqR */ -static usqInt NoDbgRegParms +static sqInt NoDbgRegParms concretizeAddCqR(AbstractInstruction * self_in_concretizeAddCqR) { sqInt aWord; @@ -11018,7 +11038,7 @@ } /* CogMIPSELCompiler>>#concretizeAndCqR */ -static usqInt NoDbgRegParms +static sqInt NoDbgRegParms concretizeAndCqR(AbstractInstruction * self_in_concretizeAndCqR) { sqInt aWord; @@ -11596,7 +11616,7 @@ the method zone. */ /* CogMIPSELCompiler>>#concretizeCall */ -static usqInt NoDbgRegParms +static sqInt NoDbgRegParms concretizeCall(AbstractInstruction * self_in_concretizeCall) { return concretizeCallFull(self_in_concretizeCall); @@ -12465,7 +12485,7 @@ } /* CogMIPSELCompiler>>#concretizeOrCqR */ -static usqInt NoDbgRegParms +static sqInt NoDbgRegParms concretizeOrCqR(AbstractInstruction * self_in_concretizeOrCqR) { sqInt aWord; @@ -12567,7 +12587,7 @@ } /* CogMIPSELCompiler>>#concretizePushCq */ -static usqInt NoDbgRegParms +static sqInt NoDbgRegParms concretizePushCq(AbstractInstruction * self_in_concretizePushCq) { return concretizePushCw(self_in_concretizePushCq); @@ -15497,6 +15517,7 @@ jumpNotSI = genJumpNotSmallInteger(Arg0Reg); genShiftAwaySmallIntegerTagsInScratchReg(ClassReg); genRemoveSmallIntegerTagsInScratchReg(Arg1Reg); + /* begin MulR:R: */ genMulRR(backEnd, Arg1Reg, ClassReg); /* begin JumpOverflow: */ jumpOvfl = genConditionalBranchoperand(JumpOverflow, ((sqInt)0)); @@ -18353,7 +18374,7 @@ } /* CogObjectRepresentationForSpur>>#genGetClassTagOf:into:scratchReg: */ -static sqInt NoDbgRegParms +static AbstractInstruction * NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg) { return genGetInlineCacheClassTagFromintoforEntry(instReg, destReg, 1); @@ -21024,6 +21045,7 @@ AbstractInstruction *anInstruction15; AbstractInstruction *anInstruction16; AbstractInstruction *anInstruction17; + AbstractInstruction *anInstruction18; AbstractInstruction *anInstruction2; AbstractInstruction *anInstruction3; AbstractInstruction *anInstruction4; @@ -21037,11 +21059,15 @@ AbstractInstruction * inst; AbstractInstruction *jmpFail; AbstractInstruction *jmpSample; + sqInt quickConstant; sqInt reg; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); + /* begin MoveCq:R: */ + quickConstant = varBaseAddress(); + /* begin gen:quickConstant:operand: */ + anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); + if (profiling) { /* Test nextProfileTick for being non-zero and call checkProfileTick: if so. @@ -21049,11 +21075,11 @@ /* begin MoveAw:R: */ address = nextProfileTickAddress(); /* begin gen:literal:operand: */ - anInstruction = genoperandoperand(MoveAwR, address, TempReg); + anInstruction1 = genoperandoperand(MoveAwR, address, TempReg); /* begin MoveAw:R: */ address1 = (nextProfileTickAddress()) + BytesPerWord; /* begin gen:literal:operand: */ - anInstruction1 = genoperandoperand(MoveAwR, address1, ClassReg); + anInstruction2 = genoperandoperand(MoveAwR, address1, ClassReg); /* begin OrR:R: */ genoperandoperand(OrRR, TempReg, ClassReg); @@ -21066,19 +21092,19 @@ /* begin MoveAw:R: */ address6 = primFailCodeAddress(); /* begin gen:literal:operand: */ - anInstruction12 = genoperandoperand(MoveAwR, address6, TempReg); + anInstruction13 = genoperandoperand(MoveAwR, address6, TempReg); flag("ask concrete code gen if move sets condition codes?"); /* begin CmpCq:R: */ - anInstruction13 = genoperandoperand(CmpCqR, 0, TempReg); + anInstruction14 = genoperandoperand(CmpCqR, 0, TempReg); /* begin JumpNonZero: */ jmpFail = genConditionalBranchoperand(JumpNonZero, ((sqInt)0)); genLoadStackPointers(backEnd); /* begin MoveMw:r:R: */ - anInstruction5 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); + anInstruction6 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); /* begin MoveAw:R: */ address4 = instructionPointerAddress(); /* begin gen:literal:operand: */ - anInstruction6 = genoperandoperand(MoveAwR, address4, LinkReg); + anInstruction7 = genoperandoperand(MoveAwR, address4, LinkReg); /* begin RetN: */ genoperand(RetN, BytesPerWord); @@ -21087,16 +21113,16 @@ /* begin MoveAw:R: */ address7 = cStackPointerAddress(); /* begin gen:literal:operand: */ - anInstruction14 = genoperandoperand(MoveAwR, address7, SPReg); + anInstruction15 = genoperandoperand(MoveAwR, address7, SPReg); compileCallFornumArgsargargargargresultRegsaveRegs(ceActivateFailingPrimitiveMethod, 1, SendNumArgsReg, null, null, null, NoReg, 0); /* begin MoveAw:R: */ address8 = instructionPointerAddress(); reg = LinkReg; /* begin gen:literal:operand: */ - anInstruction15 = genoperandoperand(MoveAwR, address8, reg); + anInstruction16 = genoperandoperand(MoveAwR, address8, reg); genLoadStackPointers(backEnd); /* begin MoveMw:r:R: */ - anInstruction10 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); + anInstruction11 = genoperandoperandoperand(MoveMwrR, 0, SPReg, ReceiverResultReg); /* begin RetN: */ genoperand(RetN, BytesPerWord); @@ -21110,7 +21136,7 @@ /* begin CallFullRT: */ callTarget = (unsigned long)ceCheckProfileTick; /* begin CallFull: */ - anInstruction16 = genoperand(CallFull, callTarget); + anInstruction17 = genoperand(CallFull, callTarget); /* begin PopR: */ @@ -22985,14 +23011,19 @@ static void (*genCallPICEnilopmartNumArgs(sqInt numArgs))(void) { + AbstractInstruction *anInstruction; sqInt endAddress; sqInt enilopmart; + sqInt quickConstant; sqInt reg; sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ - ((AbstractInstruction *) backEnd); + /* begin MoveCq:R: */ + quickConstant = varBaseAddress(); + /* begin gen:quickConstant:operand: */ + anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); + genLoadStackPointers(backEnd); /* begin PopR: */ genoperand(PopR, ClassReg); Modified: branches/Cog/platforms/Cross/vm/sqCogStackAlignment.h =================================================================== --- branches/Cog/platforms/Cross/vm/sqCogStackAlignment.h 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/platforms/Cross/vm/sqCogStackAlignment.h 2016-01-10 22:51:42 UTC (rev 3553) @@ -37,8 +37,22 @@ * __m256 is passed on stack) byte boundary. In other words, the value * (%rsp + 8) is always a multiple of 16 (32) when control is transferred to * the function entry point. + * However, + * https://developer.apple.com/library/mac/documentation/DeveloperTools/ + * Conceptual/LowLevelABI/140-x86-64_Function_Calling_Conventions/x86_64.html + * claims + * "The OS X x86-64 function calling conventions are the same as the function + * calling conventions described in System V Application Binary Interface AMD64 + * Architecture Processor Supplement, found at + * http://people.freebsd.org/~obrien/amd64-elf-abi.pdf. See that document for + * details." + * and that document states: + * "The end of the input argument area shall be aligned on a 16 byte boundary. + * In other words, the value (%rsp ? 8) is always a multiple of 16 when control + * is transferred to the function entry point. The stack pointer, %rsp, always + * points to the end of the latest allocated stack frame." */ -# if __APPLE__ && __MACH__ /* i.e. the __m256 regime */ +# if __APPLE__ && __MACH__ && 0/* i.e. the __m256 regime */ # define STACK_ALIGN_BYTES 32 # define STACK_FP_ALIGNMENT 16 /* aligned sp - retpc - saved fp */ # else Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Sun Jan 10 13:47:59 PST 2016 + Sun Jan 10 14:48:56 PST 2016 Modified: branches/Cog/spur64src/vm/cogit.h =================================================================== --- branches/Cog/spur64src/vm/cogit.h 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/spur64src/vm/cogit.h 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ Modified: branches/Cog/spur64src/vm/cogitX64.c =================================================================== --- branches/Cog/spur64src/vm/cogitX64.c 2016-01-10 21:49:21 UTC (rev 3552) +++ branches/Cog/spur64src/vm/cogitX64.c 2016-01-10 22:51:42 UTC (rev 3553) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + CCodeGenerator VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab from - StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 + StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1629 uuid: e706b773-41e5-482b-aa41-bacdf83d47e7 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1630 uuid: 2ed025ea-f400-4440-8e8b-5aa46d06c9ab " __DATE__ ; char *__cogitBuildInfo = __buildInfo; @@ -782,7 +782,7 @@ static sqInt NoDbgRegParms genGetClassIndexOfNonImminto(sqInt sourceReg, sqInt destReg); static sqInt NoDbgRegParms genGetClassObjectOfClassIndexintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); static sqInt NoDbgRegParms genGetClassObjectOfintoscratchReginstRegIsReceiver(sqInt instReg, sqInt destReg, sqInt scratchReg, sqInt instRegIsReceiver); -static sqInt NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); +static AbstractInstruction * NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg); static sqInt NoDbgRegParms genGetCompactClassIndexNonImmOfinto(sqInt instReg, sqInt destReg); static sqInt NoDbgRegParms genGetDoubleValueOfinto(sqInt srcReg, sqInt destFPReg); static sqInt NoDbgRegParms genGetFormatOfinto(sqInt srcReg, sqInt destReg); @@ -912,6 +912,7 @@ static sqInt genLongUnconditionalForwardJump(void); static sqInt NoDbgRegParms genLookupForPerformNumArgs(sqInt numArgs); static AbstractInstruction * NoDbgRegParms genMoveConstantR(sqInt constant, sqInt reg); +static AbstractInstruction * NoDbgRegParms genMoveFalseR(sqInt reg); static sqInt NoDbgRegParms genMoveTrueR(sqInt reg); static sqInt NoDbgRegParms genMustBeBooleanTrampolineForcalled(sqInt boolean, char *trampolineName); static void NoDbgRegParms genPrimReturnEnterCogCodeEnilopmart(sqInt profiling); @@ -5016,11 +5017,11 @@ sqInt size; zeroOpcodeIndex(); - /* begin maybeEstablishVarBase */ + /* begin MoveCq:R: */ quickConstant = varBaseAddress(); /* begin gen:quickConstant:operand: */ anInstruction = genoperandoperand(MoveCqR, quickConstant, VarBaseReg); - ((AbstractInstruction *) backEnd); + genLoadStackPointers(backEnd); if (regArg3OrNone != NoReg) { /* begin PopR: */ @@ -5113,35 +5114,36 @@ fixups = ((void *)((((usqInt)abstractOpcodes)) + opcodeSize)); zeroOpcodeIndex(); labelCounter = 0; + + /* Must happen first; value may be used in accessing any of the following addresses */ startAddress = methodZoneBase; - /* begin maybeSaveVarBase */ + /* begin PushR: */ genoperand(PushR, VarBaseReg); - ((AbstractInstruction *) backEnd); - /* begin maybeEstablishVarBase */ + /* begin MoveCq:R: */ quickConstant1 = varBaseAddress(); /* begin gen:quickConstant:operand: */ - anInstruction4 = genoperandoperand(MoveCqR, quickConstant1, VarBaseReg); - ((AbstractInstruction *) backEnd); + anInstruction1 = genoperandoperand(MoveCqR, quickConstant1, VarBaseReg); + if (captureFramePointer) { /* begin MoveR:Aw: */ address = cFramePointerAddress(); /* begin gen:operand:literal: */ - anInstruction1 = genoperandoperand(MoveRAw, FPReg, address); + anInstruction2 = genoperandoperand(MoveRAw, FPReg, address); } /* begin MoveR:R: */ genoperandoperand(MoveRR, SPReg, TempReg); /* begin AddCq:R: */ - quickConstant = leafCallStackPointerDelta(backEnd); + quickConstant = (leafCallStackPointerDelta(backEnd)) + BytesPerWord; /* begin gen:quickConstant:operand: */ anInstruction = genoperandoperand(AddCqR, quickConstant, TempReg); /* begin MoveR:Aw: */ - address2 = cStackPointerAddress(); + address1 = cStackPointerAddress(); /* begin gen:operand:literal: */ - anInstruction3 = genoperandoperand(MoveRAw, TempReg, address2); + anInstruction3 = genoperandoperand(MoveRAw, TempReg, address1); - /* begin maybeRestoreVarBase */ + /* begin PopR: */ genoperand(PopR, VarBaseReg); - ((AbstractInstruction *) backEnd); + /* begin RetN: */ genoperand(RetN, 0); outputInstructionsForGeneratedRuntimeAt(startAddress); @@ -6047,6 +6049,8 @@ ((methodLabel->operands))[0] = 0; ((methodLabel->operands))[1] = 0; callerSavedRegMask = callerSavedRegisterMask(backEnd); + assert(((registerMaskFor(VarBaseReg)) & callerSavedRegMask) == 0); + /* begin allocateLiterals: */ } @@ -9779,7 +9783,7 @@ /* FP jumps are a little weird */ jumpCond = jumpOpcodeGenerator(0); - /* begin genMoveConstant:R: */ + /* begin genMoveFalseR: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -10657,7 +10661,7 @@ /* begin CmpR:R: */ genoperandoperand(CmpRR, Arg0Reg, ReceiverResultReg); jumpTrue = genConditionalBranchoperand(jumpOpcode, 0); - /* begin genMoveConstant:R: */ + /* begin genMoveFalseR: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -10725,7 +10729,7 @@ /* FP jumps are a little weird */ jumpCond = jumpFPOpcodeGenerator(0); - /* begin genMoveConstant:R: */ + /* begin genMoveFalseR: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -12094,7 +12098,7 @@ /* FP jumps are a little weird */ jumpCond = jumpOpcodeGenerator(0); - /* begin genMoveConstant:R: */ + /* begin genMoveFalseR: */ constant = falseObject(); if (shouldAnnotateObjectReference(constant)) { annotateobjRef(gMoveCwR(constant, ReceiverResultReg), constant); @@ -12950,7 +12954,7 @@ } /* CogObjectRepresentationForSpur>>#genGetClassTagOf:into:scratchReg: */ -static sqInt NoDbgRegParms +static AbstractInstruction * NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg) { return genGetInlineCacheClassTagFromintoforEntry(instReg, destReg, 1); @@ -13332,7 +13336,7 @@ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ genoperand(RetN, 0); - jmpTarget(jumpCmp, genMoveConstantR(falseObject(), ReceiverResultReg)); + jmpTarget(jumpCmp, genMoveFalseR(ReceiverResultReg)); /* begin genPrimReturn */ assert(methodOrBlockNumArgs <= (numRegArgs())); /* begin RetN: */ @@ Diff output truncated at 50000 characters. @@ |
and this implies that the production x86_64 VM on Mac OS X is functional. There is still no FFI, Alien or otherwise, so this is still insufficient for anything other than pure Smalltalk hacking. But this is an important milestone and I should be able to release it for people to play with later next week.
On Sun, Jan 10, 2016 at 2:51 PM, <[hidden email]> wrote:
_,,,^..^,,,_ best, Eliot |
Ya! Sent from my iPhone
smime.p7s (3K) Download Attachment |
In reply to this post by Eliot Miranda-2
cool!
|
amazing work Eliot, well done :) On Mon, Jan 11, 2016 at 1:11 PM Esteban Lorenzano <[hidden email]> wrote:
|
In reply to this post by Eliot Miranda-2
On 11-01-16 00:02, Eliot Miranda wrote: > and this implies that the production x86_64 VM on Mac OS X is > functional. There is still no FFI, Alien or otherwise, so this is still > insufficient for anything other than pure Smalltalk hacking. But this > is an important milestone and I should be able to release it for people > to play with later next week. Yes!! Great news. Stephan |
In reply to this post by Eliot Miranda-2
On Mon, Jan 11, 2016 at 7:02 AM, Eliot Miranda <[hidden email]> wrote: > > and this implies that the production x86_64 VM on Mac OS X is functional. There is still no FFI, Alien or otherwise, so this is still insufficient for anything other than pure Smalltalk hacking. But this is an important milestone and I should be able to release it for people to play with later next week. oh no! now I'm going to have to reinstall my Linux system to 64-bit ;) great news. cheers -ben |
Free forum by Nabble | Edit this page |