Revision: 3359 Author: eliot Date: 2015-05-27 10:09:50 -0700 (Wed, 27 May 2015) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.1328
Fix determination of the picInterpretAbortOffset on ARM in cogExtendPIC:CaseNMethod:tag:isMNUCase:.
Modified Paths: -------------- branches/Cog/nsspursrc/vm/cogit.h branches/Cog/nsspursrc/vm/cogitARMv5.c branches/Cog/nsspursrc/vm/cogitIA32.c branches/Cog/spursistasrc/vm/cogit.h branches/Cog/spursistasrc/vm/cogitARMv5.c branches/Cog/spursistasrc/vm/cogitIA32.c branches/Cog/spursrc/vm/cogit.h branches/Cog/spursrc/vm/cogitARMv5.c branches/Cog/spursrc/vm/cogitIA32.c branches/Cog/src/vm/cogit.h branches/Cog/src/vm/cogitARMv5.c branches/Cog/src/vm/cogitIA32.c
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nsspursrc/vm/cogit.h =================================================================== --- branches/Cog/nsspursrc/vm/cogit.h 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/nsspursrc/vm/cogit.h 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */
Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -729,6 +729,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -8928,13 +8929,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -10570,15 +10572,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -12993,6 +12988,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - ((pushLinkRegisterByteSize(backEnd)) + (callInstructionByteSize(backEnd))); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/nsspursrc/vm/cogitIA32.c =================================================================== --- branches/Cog/nsspursrc/vm/cogitIA32.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/nsspursrc/vm/cogitIA32.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -672,6 +672,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -7688,13 +7689,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -9300,15 +9302,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -11732,6 +11727,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - (callInstructionByteSize(backEnd)); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Tue May 26 10:20:52 PDT 2015 + Wed May 27 10:09:31 PDT 2015
Modified: branches/Cog/spursistasrc/vm/cogit.h =================================================================== --- branches/Cog/spursistasrc/vm/cogit.h 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursistasrc/vm/cogit.h 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */
Modified: branches/Cog/spursistasrc/vm/cogitARMv5.c =================================================================== --- branches/Cog/spursistasrc/vm/cogitARMv5.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursistasrc/vm/cogitARMv5.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -724,6 +724,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -8849,13 +8850,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -9756,7 +9758,7 @@ { sqInt classIndex; sqInt i; - usqInt pc; + sqInt pc;
pc = (((((usqInt)cPIC)) + firstCPICCaseOffset) + cPICCaseSize) - (jumpLongConditionalByteSize(backEnd)); for (i = 2; i <= ((cPIC->cPICNumCases)); i += 1) { @@ -10426,15 +10428,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -12700,6 +12695,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - ((pushLinkRegisterByteSize(backEnd)) + (callInstructionByteSize(backEnd))); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/spursistasrc/vm/cogitIA32.c =================================================================== --- branches/Cog/spursistasrc/vm/cogitIA32.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursistasrc/vm/cogitIA32.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -666,6 +666,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -7597,13 +7598,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -9144,15 +9146,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -11427,6 +11422,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - (callInstructionByteSize(backEnd)); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/spursrc/vm/cogit.h =================================================================== --- branches/Cog/spursrc/vm/cogit.h 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursrc/vm/cogit.h 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */
Modified: branches/Cog/spursrc/vm/cogitARMv5.c =================================================================== --- branches/Cog/spursrc/vm/cogitARMv5.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursrc/vm/cogitARMv5.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -719,6 +719,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -8485,13 +8486,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -10078,15 +10080,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -12357,6 +12352,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - ((pushLinkRegisterByteSize(backEnd)) + (callInstructionByteSize(backEnd))); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/spursrc/vm/cogitIA32.c =================================================================== --- branches/Cog/spursrc/vm/cogitIA32.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/spursrc/vm/cogitIA32.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -661,6 +661,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -7233,13 +7234,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -8796,15 +8798,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -11084,6 +11079,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - (callInstructionByteSize(backEnd)); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/src/vm/cogit.h =================================================================== --- branches/Cog/src/vm/cogit.h 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/src/vm/cogit.h 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */
Modified: branches/Cog/src/vm/cogitARMv5.c =================================================================== --- branches/Cog/src/vm/cogitARMv5.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/src/vm/cogitARMv5.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -720,6 +720,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -8523,13 +8524,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -9939,15 +9941,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -12385,6 +12380,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - ((pushLinkRegisterByteSize(backEnd)) + (callInstructionByteSize(backEnd))); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
Modified: branches/Cog/src/vm/cogitIA32.c =================================================================== --- branches/Cog/src/vm/cogitIA32.c 2015-05-26 20:40:31 UTC (rev 3358) +++ branches/Cog/src/vm/cogitIA32.c 2015-05-27 17:09:50 UTC (rev 3359) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + CCodeGenerator VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 from - StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 + StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1328 uuid: c1e2ed6b-28c4-448f-88b8-4c7a3ad53b78 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -661,6 +661,7 @@ sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver); sqInt pcisWithinMethod(char *address, CogMethod *cogMethod); static sqInt picAbortDiscriminatorValue(void); +static sqInt picInterpretAbortOffset(void); static PrimitiveDescriptor * primitiveGeneratorOrNil(void); void printCogMethodFor(void *address); void printTrampolineTable(void); @@ -7270,13 +7271,14 @@ target = (((sqInt)(cogMethodOf(caseNMethod)))) + cmNoCheckEntryOffset; } else { + operand = caseNMethod; if (isMNUCase) { (cPIC->cpicHasMNUCase = 1); + target = (((sqInt)cPIC)) + (sizeof(CogMethod)); } - operand = caseNMethod; - target = (((sqInt)cPIC)) + ((isMNUCase - ? sizeof(CogMethod) - : (interpretOffset()) - (callInstructionByteSize(backEnd)))); + else { + target = (((sqInt)cPIC)) + (picInterpretAbortOffset()); + } } /* begin CmpCw:R: */ genoperandoperand(CmpCwR, caseNTag, TempReg); @@ -8656,15 +8658,8 @@ firstCPICCaseOffset = ((endCPICCase0->address)) - methodZoneBase; cPICCaseSize = ((endCPICCase1->address)) - ((endCPICCase0->address)); cPICEndSize = closedPICSize - (((numPICCases - 1) * cPICCaseSize) + firstCPICCaseOffset); - - /* self cCode: '' - inSmalltalk: - [| end | - end := self outputInstructionsAt: methodZoneBase + headerSize. - self disassembleFrom: methodZoneBase + headerSize to: end - 1. - self halt] */ - closedPICSize = roundUpLength(closedPICSize); + assert(((picInterpretAbort->address)) == (((methodLabel->address)) + (picInterpretAbortOffset()))); }
@@ -11111,6 +11106,18 @@ }
+/* Answer the start of the abort sequence for invoking the interpreter in a + closed PIC. + */ + + /* Cogit>>#picInterpretAbortOffset */ +static sqInt +picInterpretAbortOffset(void) +{ + return (interpretOffset()) - (callInstructionByteSize(backEnd)); +} + + /* If there is a generator for the current primitive then answer it; otherwise answer nil. */
vm-dev@lists.squeakfoundation.org