Revision: 3256 Author: eliot Date: 2015-02-13 18:19:04 -0800 (Fri, 13 Feb 2015) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.1064 Slang: Rescue translation of the non-64-bit Spur VMs by a) doing a better job of suoper expansions, handling expansions that are returning ifs as well as just returns correctly. b) transforming variable := expr ifTrue: [s1] ifFalse: [s2] into expr ifTrue: [variable := s1] ifFalse: [variable := s2] to allow inlining of s1 & s2. And take advantage of the better inlining in copyAndForward: General: Simplify primitiveDisplayString given isArray:. Refactor positive32BitIntegerFor: and signed32BitIntegerFor: in the realization that these reduce to essentially integerObjectOf: in 64-bit Spur. The idea is to inline if in 64-bit Spur but not if in the 32-bit VMs. Add notOption: processing to allow excluding noInlineSigned32BitIntegerFor: et al. Add hasSixtyFourBitImmediates to no longer assume that wordSize = 8 implies 64-bit immediates. Use positiveMachineIntegerFor: in place of positive32BitIntegerFor: in some plugins. Simplify two B3DAcceleratorPlugin prims given topRemappableOop and isArray: With these changes 64-bit Spur Stack Linux manages 3548 run, 3495 passes, 0 expected failures, 47 failures, 6 errors, 0 unexpected passes Builds: Nuke the newspeak.stack.v3 builds Modified Paths: -------------- branches/Cog/nscogsrc/plugins/B2DPlugin/B2DPlugin.c branches/Cog/nscogsrc/plugins/BitBltPlugin/BitBltPlugin.c branches/Cog/nscogsrc/plugins/FilePlugin/FilePlugin.c branches/Cog/nscogsrc/plugins/IA32ABI/IA32ABI.c branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c branches/Cog/nscogsrc/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c branches/Cog/nscogsrc/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c branches/Cog/nscogsrc/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c branches/Cog/nscogsrc/vm/cointerp.c branches/Cog/nscogsrc/vm/cointerp.h branches/Cog/nscogsrc/vm/gcc3x-cointerp.c branches/Cog/nsspursrc/vm/cointerp.c branches/Cog/nsspursrc/vm/cointerp.h branches/Cog/nsspursrc/vm/gcc3x-cointerp.c branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c branches/Cog/nsspurstacksrc/vm/interp.c branches/Cog/scripts/findUnofficialFiles branches/Cog/sistasrc/vm/cointerp.c branches/Cog/sistasrc/vm/cointerp.h branches/Cog/sistasrc/vm/gcc3x-cointerp.c branches/Cog/spursistasrc/vm/cointerp.c branches/Cog/spursistasrc/vm/cointerp.h branches/Cog/spursistasrc/vm/gcc3x-cointerp.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/plugins/B2DPlugin/B2DPlugin.c branches/Cog/src/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.c branches/Cog/src/plugins/BitBltPlugin/BitBltPlugin.c branches/Cog/src/plugins/BochsIA32Plugin/BochsIA32Plugin.c branches/Cog/src/plugins/FilePlugin/FilePlugin.c branches/Cog/src/plugins/GdbARMPlugin/GdbARMPlugin.c branches/Cog/src/plugins/IA32ABI/IA32ABI.c branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c branches/Cog/src/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c branches/Cog/src/plugins/UnicodePlugin/UnicodePlugin.c branches/Cog/src/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c branches/Cog/src/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.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 Added Paths: ----------- branches/Cog/scripts/mkvmarchives Removed Paths: ------------- branches/Cog/build.linux32x86/newspeak.stack.v3/ branches/Cog/build.macos32x86/newspeak.stack.v3/ branches/Cog/build.win32x86/newspeak.stack.v3/ Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h Modified: branches/Cog/nscogsrc/plugins/B2DPlugin/B2DPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/B2DPlugin/B2DPlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/B2DPlugin/B2DPlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.990 uuid: f4a22308-891c-4542-b6a4-10fe174bc82a + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - BalloonEnginePlugin VMMaker.oscog-eem.990 uuid: f4a22308-891c-4542-b6a4-10fe174bc82a + BalloonEnginePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "BalloonEnginePlugin VMMaker.oscog-eem.990 uuid: f4a22308-891c-4542-b6a4-10fe174bc82a " __DATE__ ; +static char __buildInfo[] = "BalloonEnginePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -836,9 +836,9 @@ static void * loadBBFn; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "B2DPlugin VMMaker.oscog-eem.990 (i)" + "B2DPlugin VMMaker.oscog-eem.1064 (i)" #else - "B2DPlugin VMMaker.oscog-eem.990 (e)" + "B2DPlugin VMMaker.oscog-eem.1064 (e)" #endif ; static int* objBuffer; @@ -9155,9 +9155,12 @@ return primitiveFailFor(GEFBadPoint); } /* begin loadBitmapFill:colormap:tile:from:along:normal:xIndex: */ - tileFlag1 = (tileFlag - ? 1 - : 0); + if (tileFlag) { + tileFlag1 = 1; + } + else { + tileFlag1 = 0; + } /* begin point1Get */ point1 = ((int *) (workBuffer + GWPoint1)); /* begin point2Get */ Modified: branches/Cog/nscogsrc/plugins/BitBltPlugin/BitBltPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/BitBltPlugin/BitBltPlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/BitBltPlugin/BitBltPlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.998 uuid: 20a6acb3-9a01-4219-b650-8966301ffe11 + SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - BitBltSimulation VMMaker.oscog-eem.998 uuid: 20a6acb3-9a01-4219-b650-8966301ffe11 + BitBltSimulation VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "BitBltSimulation VMMaker.oscog-eem.998 uuid: 20a6acb3-9a01-4219-b650-8966301ffe11 " __DATE__ ; +static char __buildInfo[] = "BitBltSimulation VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -269,9 +269,7 @@ #if !defined(SQUEAK_BUILTIN_PLUGIN) static sqInt (*byteSizeOf)(sqInt oop); -static sqInt (*classArray)(void); static sqInt (*failed)(void); -static sqInt (*fetchClassOf)(sqInt oop); static sqInt (*fetchIntegerofObject)(sqInt fieldIndex, sqInt objectPointer); static sqInt (*fetchLong32ofObject)(sqInt fieldIndex, sqInt oop); static sqInt (*fetchPointerofObject)(sqInt index, sqInt oop); @@ -280,6 +278,7 @@ static sqInt (*integerObjectOf)(sqInt value); static sqInt (*integerValueOf)(sqInt oop); static void * (*ioLoadFunctionFrom)(char *functionName, char *moduleName); +static sqInt (*isArray)(sqInt oop); static sqInt (*isBytes)(sqInt oop); static sqInt (*isIntegerObject)(sqInt objectPointer); static sqInt (*isPointers)(sqInt oop); @@ -302,9 +301,7 @@ static sqInt (*storeIntegerofObjectwithValue)(sqInt index, sqInt oop, sqInt integer); #else /* !defined(SQUEAK_BUILTIN_PLUGIN) */ extern sqInt byteSizeOf(sqInt oop); -extern sqInt classArray(void); extern sqInt failed(void); -extern sqInt fetchClassOf(sqInt oop); extern sqInt fetchIntegerofObject(sqInt fieldIndex, sqInt objectPointer); extern sqInt fetchLong32ofObject(sqInt fieldIndex, sqInt oop); extern sqInt fetchPointerofObject(sqInt index, sqInt oop); @@ -313,6 +310,7 @@ extern sqInt integerObjectOf(sqInt value); extern sqInt integerValueOf(sqInt oop); extern void * ioLoadFunctionFrom(char *functionName, char *moduleName); +extern sqInt isArray(sqInt oop); extern sqInt isBytes(sqInt oop); extern sqInt isIntegerObject(sqInt objectPointer); extern sqInt isPointers(sqInt oop); @@ -346,9 +344,9 @@ }; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "BitBltPlugin VMMaker.oscog-eem.998 (i)" + "BitBltPlugin VMMaker.oscog-eem.1064 (i)" #else - "BitBltPlugin VMMaker.oscog-eem.998 (e)" + "BitBltPlugin VMMaker.oscog-eem.1064 (e)" #endif ; static sqInt noHalftone; @@ -5033,12 +5031,18 @@ sqInt val; sqInt _return_value; - colorA = (BytesPerOop == 4 - ? positive32BitValueOf(stackValue(2)) - : positive64BitValueOf(stackValue(2))); - colorB = (BytesPerOop == 4 - ? positive32BitValueOf(stackValue(1)) - : positive64BitValueOf(stackValue(1))); + if (BytesPerOop == 4) { + colorA = positive32BitValueOf(stackValue(2)); + } + else { + colorA = positive64BitValueOf(stackValue(2)); + } + if (BytesPerOop == 4) { + colorB = positive32BitValueOf(stackValue(1)); + } + else { + colorB = positive64BitValueOf(stackValue(1)); + } testID = stackIntegerValue(0); rcvr = stackValue(3); if (failed()) { @@ -5157,39 +5161,32 @@ kernDelta = stackIntegerValue(0); xTable = stackObjectValue(1); glyphMap = stackObjectValue(2); - if (!(((fetchClassOf(xTable)) == (classArray())) - && ((fetchClassOf(glyphMap)) == (classArray())))) { - return primitiveFail(); - } - if (!((slotSizeOf(glyphMap)) == 256)) { - return primitiveFail(); - } - if (failed()) { - return null; - } - maxGlyph = (slotSizeOf(xTable)) - 2; stopIndex = stackIntegerValue(3); startIndex = stackIntegerValue(4); sourceString = stackObjectValue(5); - if (!(isBytes(sourceString))) { - return primitiveFail(); + bbObj = stackObjectValue(6); + if (failed()) { + return null; } - if (!((startIndex > 0) + if (!((isArray(xTable)) + && ((isArray(glyphMap)) + && (((slotSizeOf(glyphMap)) == 256) + && ((isBytes(sourceString)) + && ((startIndex > 0) && ((stopIndex > 0) - && (stopIndex <= (byteSizeOf(sourceString)))))) { + && ((stopIndex <= (byteSizeOf(sourceString))) + && ((loadBitBltFromwarping(bbObj, 0)) + && ((combinationRule != 30) + && (combinationRule != 0x1F))))))))))) { return primitiveFail(); } - bbObj = stackObjectValue(6); - if (!(loadBitBltFromwarping(bbObj, 0))) { - return primitiveFail(); - } - if ((combinationRule == 30) - || (combinationRule == 0x1F)) { - /* needs extra source alpha */ + /* See if we can go directly into copyLoopPixMap (usually we can) */ - return primitiveFail(); - } + maxGlyph = (slotSizeOf(xTable)) - 2; + + /* no point using slower version */ + quickBlt = (destBits != 0) && ((sourceBits != 0) && ((noSource == 0) @@ -6653,9 +6650,7 @@ #if !defined(SQUEAK_BUILTIN_PLUGIN) byteSizeOf = interpreterProxy->byteSizeOf; - classArray = interpreterProxy->classArray; failed = interpreterProxy->failed; - fetchClassOf = interpreterProxy->fetchClassOf; fetchIntegerofObject = interpreterProxy->fetchIntegerofObject; fetchLong32ofObject = interpreterProxy->fetchLong32ofObject; fetchPointerofObject = interpreterProxy->fetchPointerofObject; @@ -6664,6 +6659,7 @@ integerObjectOf = interpreterProxy->integerObjectOf; integerValueOf = interpreterProxy->integerValueOf; ioLoadFunctionFrom = interpreterProxy->ioLoadFunctionFrom; + isArray = interpreterProxy->isArray; isBytes = interpreterProxy->isBytes; isIntegerObject = interpreterProxy->isIntegerObject; isPointers = interpreterProxy->isPointers; Modified: branches/Cog/nscogsrc/plugins/FilePlugin/FilePlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/FilePlugin/FilePlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/FilePlugin/FilePlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - FilePlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + FilePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "FilePlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d " __DATE__ ; +static char __buildInfo[] = "FilePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -177,9 +177,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "FilePlugin VMMaker.oscog-eem.983 (i)" + "FilePlugin VMMaker.oscog-eem.1064 (i)" #else - "FilePlugin VMMaker.oscog-eem.983 (e)" + "FilePlugin VMMaker.oscog-eem.1064 (e)" #endif ; static void * sCCPfn; @@ -853,9 +853,12 @@ || (!(isWordsOrBytes(array)))) { return primitiveFailFor(PrimErrBadArgument); } - elementSize = (isWords(array) - ? 4 - : 1); + if (isWords(array)) { + elementSize = 4; + } + else { + elementSize = 1; + } if (!((startIndex >= 1) && (((startIndex + count) - 1) <= (slotSizeOf(array))))) { return primitiveFailFor(PrimErrBadIndex); @@ -1080,9 +1083,12 @@ || (!(isWordsOrBytes(array)))) { return primitiveFailFor(PrimErrBadArgument); } - elementSize = (isWords(array) - ? 4 - : 1); + if (isWords(array)) { + elementSize = 4; + } + else { + elementSize = 1; + } if (!((startIndex >= 1) && (((startIndex + count) - 1) <= (slotSizeOf(array))))) { return primitiveFailFor(PrimErrBadIndex); Modified: branches/Cog/nscogsrc/plugins/IA32ABI/IA32ABI.c =================================================================== --- branches/Cog/nscogsrc/plugins/IA32ABI/IA32ABI.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/IA32ABI/IA32ABI.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.1032 uuid: a3c915e6-d663-4d65-ab41-493c71498549 + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1032 uuid: a3c915e6-d663-4d65-ab41-493c71498549 + NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1032 uuid: a3c915e6-d663-4d65-ab41-493c71498549 " __DATE__ ; +static char __buildInfo[] = "NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -223,9 +223,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "IA32ABI VMMaker.oscog-eem.1032 (i)" + "IA32ABI VMMaker.oscog-eem.1064 (i)" #else - "IA32ABI VMMaker.oscog-eem.1032 (e)" + "IA32ABI VMMaker.oscog-eem.1064 (e)" #endif ; @@ -288,9 +288,12 @@ rcvr = stackValue(0); value = longAt((rcvr + BaseHeaderSize) + BytesPerOop); - valueOop = (BytesPerWord == 8 - ? positive64BitIntegerFor(value) - : positive32BitIntegerFor(value)); + if (BytesPerWord == 8) { + valueOop = positive64BitIntegerFor(value); + } + else { + valueOop = positive32BitIntegerFor(value); + } return methodReturnValue(valueOop); } @@ -704,9 +707,9 @@ || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -752,9 +755,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -793,9 +796,9 @@ || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -841,9 +844,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1086,9 +1089,9 @@ || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1131,9 +1134,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1168,9 +1171,9 @@ || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1211,9 +1214,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1251,9 +1254,9 @@ || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1299,9 +1302,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1337,9 +1340,9 @@ || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1382,9 +1385,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1408,9 +1411,12 @@ rcvr = stackValue(0); value = ((sqInt) (longAt(rcvr + BaseHeaderSize))); - valueOop = (BytesPerWord == 8 - ? signed64BitIntegerFor(value) - : signed32BitIntegerFor(value)); + if (BytesPerWord == 8) { + valueOop = signed64BitIntegerFor(value); + } + else { + valueOop = signed32BitIntegerFor(value); + } return methodReturnValue(valueOop); } @@ -1563,9 +1569,9 @@ || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1607,9 +1613,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1644,9 +1650,9 @@ || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1687,9 +1693,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1727,9 +1733,9 @@ || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1776,9 +1782,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1814,9 +1820,9 @@ || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) { return primitiveFailFor(PrimErrBadIndex); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; @@ -1858,9 +1864,9 @@ if (isOopImmutable(rcvr)) { return primitiveFailFor(PrimErrNoModification); } - if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0 - ? (rcvr + BaseHeaderSize) + BytesPerOop - : longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { + if ((((longAt(rcvr + BaseHeaderSize)) > 0 + ? (startAddr = (rcvr + BaseHeaderSize) + BytesPerOop) + : (startAddr = longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) { return primitiveFailFor(PrimErrBadReceiver); } addr = startAddr + byteOffset; Modified: branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c =================================================================== --- branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1048 uuid: 8c759c0d-f612-4018-8a05-45ec7f6af78f + SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - LargeIntegersPlugin VMMaker.oscog-eem.1048 uuid: 8c759c0d-f612-4018-8a05-45ec7f6af78f + LargeIntegersPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.1048 uuid: 8c759c0d-f612-4018-8a05-45ec7f6af78f " __DATE__ ; +static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -173,9 +173,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "LargeIntegers v1.5 VMMaker.oscog-eem.1048 (i)" + "LargeIntegers v1.5 VMMaker.oscog-eem.1064 (i)" #else - "LargeIntegers v1.5 VMMaker.oscog-eem.1048 (e)" + "LargeIntegers v1.5 VMMaker.oscog-eem.1064 (e)" #endif ; static const int orOpIndex = 1; @@ -731,9 +731,12 @@ dl = divLen - 1; ql = quoLen; dh = pDiv[dl - 1]; - dnh = (dl == 1 - ? 0 - : pDiv[dl - 2]); + if (dl == 1) { + dnh = 0; + } + else { + dnh = pDiv[dl - 2]; + } for (k = 1; k <= ql; k += 1) { /* maintain quo*arg+rem=self */ @@ -1557,9 +1560,12 @@ dl = divLen - 1; ql = quoLen; dh = pDiv[dl - 1]; - dnh = (dl == 1 - ? 0 - : pDiv[dl - 2]); + if (dl == 1) { + dnh = 0; + } + else { + dnh = pDiv[dl - 2]; + } for (k = 1; k <= ql; k += 1) { /* maintain quo*arg+rem=self */ @@ -2167,12 +2173,12 @@ if (len == 0) { return integerObjectOf(0); } - - /* SmallInteger minVal digitLength */ - - sLen = ((MinSmallInteger) < -1073741824 - ? 8 - : 4); + if ((MinSmallInteger) < -1073741824) { + sLen = 8; + } + else { + sLen = 4; + } if (len <= sLen) { /* SmallInteger minVal */ @@ -2244,9 +2250,15 @@ if (len == 0) { return integerObjectOf(0); } - sLen = ((MinSmallInteger) > 0x3FFFFFFF - ? 8 - : 4); + if ((MinSmallInteger) > 0x3FFFFFFF) { + + /* SmallInteger maxVal digitLength. */ + + sLen = 8; + } + else { + sLen = 4; + } if ((len <= sLen) && ((digitOfBytesat(aLargePositiveInteger, sLen)) <= (cDigitOfCSIat(MaxSmallInteger, sLen)))) { Modified: branches/Cog/nscogsrc/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,16 +1,16 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - MiscPrimitivePlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d - Bitmap * Graphics-bf.303 uuid: 59c75040-7563-4061-8425-81f4467d3eb8 - ByteArray * Collections.spur-bf.588 uuid: 80ef5d3c-140e-4225-98f4-354435f1372e - ByteString * Collections.spur-bf.588 uuid: 80ef5d3c-140e-4225-98f4-354435f1372e + MiscPrimitivePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 + Bitmap * Graphics-kfr.305 uuid: ad7be66f-dd0c-8443-b773-b96836359b05 + ByteArray * Collections.spur-mt.591, Collections.spur-eem.603 uuid: dd41c76b-9063-421b-87bc-4229ac3f5243 + ByteString * Collections.spur-mt.591, Collections.spur-eem.603 uuid: dd41c76b-9063-421b-87bc-4229ac3f5243 SampledSound Sound-bf.42 uuid: 01b2784a-0ad7-4a6b-a996-3388ab820acd */ -static char __buildInfo[] = "MiscPrimitivePlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d\n\ -Bitmap * Graphics-bf.303 uuid: 59c75040-7563-4061-8425-81f4467d3eb8\n\ -ByteArray * Collections.spur-bf.588 uuid: 80ef5d3c-140e-4225-98f4-354435f1372e\n\ -ByteString * Collections.spur-bf.588 uuid: 80ef5d3c-140e-4225-98f4-354435f1372e\n\ +static char __buildInfo[] = "MiscPrimitivePlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3\n\ +Bitmap * Graphics-kfr.305 uuid: ad7be66f-dd0c-8443-b773-b96836359b05\n\ +ByteArray * Collections.spur-mt.591, Collections.spur-eem.603 uuid: dd41c76b-9063-421b-87bc-4229ac3f5243\n\ +ByteString * Collections.spur-mt.591, Collections.spur-eem.603 uuid: dd41c76b-9063-421b-87bc-4229ac3f5243\n\ SampledSound Sound-bf.42 uuid: 01b2784a-0ad7-4a6b-a996-3388ab820acd " __DATE__ ; @@ -94,9 +94,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "MiscPrimitivePlugin VMMaker.oscog-eem.983 (i)" + "MiscPrimitivePlugin VMMaker.oscog-eem.1064 (i)" #else - "MiscPrimitivePlugin VMMaker.oscog-eem.983 (e)" + "MiscPrimitivePlugin VMMaker.oscog-eem.1064 (e)" #endif ; Modified: branches/Cog/nscogsrc/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - VMProfileLinuxSupportPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMProfileLinuxSupportPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d " __DATE__ ; +static char __buildInfo[] = "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -51,6 +51,7 @@ /*** Function Prototypes ***/ static int countnummodules(struct dl_phdr_info *info, size_t size, void *ignored); EXPORT(const char*) getModuleName(void); +static sqInt positiveMachineIntegerFor(unsigned long value); EXPORT(sqInt) primitiveDLSymInLibrary(void); EXPORT(sqInt) primitiveExecutableModules(void); EXPORT(sqInt) primitiveInterpretAddress(void); @@ -73,6 +74,7 @@ static sqInt (*nilObject)(void); static sqInt (*popRemappableOop)(void); static sqInt (*positive32BitIntegerFor)(sqInt integerValue); +static sqInt (*positive64BitIntegerFor)(sqLong integerValue); static sqInt (*primitiveFailFor)(sqInt reasonCode); static sqInt (*pushRemappableOop)(sqInt oop); static sqInt (*stackValue)(sqInt offset); @@ -90,6 +92,7 @@ extern sqInt nilObject(void); extern sqInt popRemappableOop(void); extern sqInt positive32BitIntegerFor(sqInt integerValue); +extern sqInt positive64BitIntegerFor(sqLong integerValue); extern sqInt primitiveFailFor(sqInt reasonCode); extern sqInt pushRemappableOop(sqInt oop); extern sqInt stackValue(sqInt offset); @@ -100,9 +103,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.983 (i)" + "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.1064 (i)" #else - "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.983 (e)" + "VMProfileLinuxSupportPlugin VMMaker.oscog-eem.1064 (e)" #endif ; static sqInt numModules; @@ -128,7 +131,15 @@ return moduleName; } +static sqInt +positiveMachineIntegerFor(unsigned long value) +{ + return (BytesPerWord == 8 + ? positive64BitIntegerFor(value) + : positive32BitIntegerFor(value)); +} + /* Answer the address of the symbol whose name is the first argument in the library whose name is the second argument, or nil if none. */ @@ -175,7 +186,9 @@ if (!ok) { return primitiveFailFor(PrimErrNotFound); } - return methodReturnValue(positive32BitIntegerFor(((unsigned long)addr))); + return methodReturnValue((BytesPerWord == 8 + ? positive64BitIntegerFor(((unsigned long)addr)) + : positive32BitIntegerFor(((unsigned long)addr)))); } @@ -217,8 +230,9 @@ { extern void interpret(); - - return methodReturnValue(positive32BitIntegerFor(((unsigned long)interpret))); + return methodReturnValue((BytesPerWord == 8 + ? positive64BitIntegerFor(((unsigned long)interpret)) + : positive32BitIntegerFor(((unsigned long)interpret)))); } static int @@ -313,6 +327,7 @@ nilObject = interpreterProxy->nilObject; popRemappableOop = interpreterProxy->popRemappableOop; positive32BitIntegerFor = interpreterProxy->positive32BitIntegerFor; + positive64BitIntegerFor = interpreterProxy->positive64BitIntegerFor; primitiveFailFor = interpreterProxy->primitiveFailFor; pushRemappableOop = interpreterProxy->pushRemappableOop; stackValue = interpreterProxy->stackValue; Modified: branches/Cog/nscogsrc/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMPluginCodeGenerator VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - VMProfileMacSupportPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d + VMProfileMacSupportPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "VMProfileMacSupportPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d " __DATE__ ; +static char __buildInfo[] = "VMProfileMacSupportPlugin VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; @@ -45,6 +45,7 @@ /*** Function Prototypes ***/ EXPORT(const char*) getModuleName(void); +static sqInt positiveMachineIntegerFor(unsigned long value); EXPORT(sqInt) primitiveDLSym(void); EXPORT(sqInt) primitiveExecutableModulesAndOffsets(void); EXPORT(sqInt) setInterpreter(struct VirtualMachine*anInterpreter); @@ -66,6 +67,7 @@ static sqInt (*popthenPush)(sqInt nItems, sqInt oop); static sqInt (*popRemappableOop)(void); static sqInt (*positive32BitIntegerFor)(sqInt integerValue); +static sqInt (*positive64BitIntegerFor)(sqLong integerValue); static sqInt (*primitiveFail)(void); static sqInt (*primitiveFailFor)(sqInt reasonCode); static sqInt (*pushRemappableOop)(sqInt oop); @@ -87,6 +89,7 @@ extern sqInt popthenPush(sqInt nItems, sqInt oop); extern sqInt popRemappableOop(void); extern sqInt positive32BitIntegerFor(sqInt integerValue); +extern sqInt positive64BitIntegerFor(sqLong integerValue); extern sqInt primitiveFail(void); extern sqInt primitiveFailFor(sqInt reasonCode); extern sqInt pushRemappableOop(sqInt oop); @@ -99,9 +102,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "VMProfileMacSupportPlugin VMMaker.oscog-eem.983 (i)" + "VMProfileMacSupportPlugin VMMaker.oscog-eem.1064 (i)" #else - "VMProfileMacSupportPlugin VMMaker.oscog-eem.983 (e)" + "VMProfileMacSupportPlugin VMMaker.oscog-eem.1064 (e)" #endif ; @@ -118,7 +121,15 @@ return moduleName; } +static sqInt +positiveMachineIntegerFor(unsigned long value) +{ + return (BytesPerWord == 8 + ? positive64BitIntegerFor(value) + : positive32BitIntegerFor(value)); +} + /* Answer the address of the argument in the current process or nil if none. */ EXPORT(sqInt) @@ -146,7 +157,9 @@ free(name); return methodReturnValue((addr == 0 ? nilObject() - : positive32BitIntegerFor(((unsigned long)addr)))); + : (BytesPerWord == 8 + ? positive64BitIntegerFor(((unsigned long)addr)) + : positive32BitIntegerFor(((unsigned long)addr))))); } @@ -209,13 +222,23 @@ return primitiveFail(); } storePointerofObjectwithValue((i * 4) + 1, topRemappableOop(), valueObj); - valueObj = positive32BitIntegerFor(start); + if (BytesPerWord == 8) { + valueObj = positive64BitIntegerFor(start); + } + else { + valueObj = positive32BitIntegerFor(start); + } if (failed()) { popRemappableOop(); return primitiveFail(); } storePointerofObjectwithValue((i * 4) + 2, topRemappableOop(), valueObj); - valueObj = positive32BitIntegerFor(size); + if (BytesPerWord == 8) { + valueObj = positive64BitIntegerFor(size); + } + else { + valueObj = positive32BitIntegerFor(size); + } if (failed()) { popRemappableOop(); return primitiveFail(); @@ -253,6 +276,7 @@ popthenPush = interpreterProxy->popthenPush; popRemappableOop = interpreterProxy->popRemappableOop; positive32BitIntegerFor = interpreterProxy->positive32BitIntegerFor; + positive64BitIntegerFor = interpreterProxy->positive64BitIntegerFor; primitiveFail = interpreterProxy->primitiveFail; primitiveFailFor = interpreterProxy->primitiveFailFor; pushRemappableOop = interpreterProxy->pushRemappableOop; Modified: branches/Cog/nscogsrc/vm/cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.c 2015-02-13 03:00:34 UTC (rev 3255) +++ branches/Cog/nscogsrc/vm/cointerp.c 2015-02-14 02:19:04 UTC (rev 3256) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1060 uuid: c43c476e-10ff-420e-a2eb-c17d4624e338 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 from - CoInterpreter VMMaker.oscog-eem.1060 uuid: c43c476e-10ff-420e-a2eb-c17d4624e338 + CoInterpreter VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1060 uuid: c43c476e-10ff-420e-a2eb-c17d4624e338 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1064 uuid: 9d9d2583-03e6-4b6b-9b24-51587933f8f3 " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -766,6 +766,7 @@ EXPORT(void) primitiveSubtractLargeIntegers(void); static void primitiveTestAndSetOwnershipOfCriticalSection(void); static void primitiveTestDisplayDepth(void); +static void primitiveTimesTwoPower(void); static void primitiveTruncated(void); static void primitiveUnloadModule(void); static void primitiveUpdateTimezone(void); @@ -914,7 +915,6 @@ sqInt falseObject(void); sqInt fetchByteofObject(sqInt byteIndex, sqInt oop); sqInt fetchClassOf(sqInt oop); -static sqInt fetchLong32ofFloatObject(sqInt fieldIndex, sqInt oop) NoDbgRegParms; sqInt fetchLong32ofObject(sqInt fieldIndex, sqInt oop); sqInt fetchPointerofObject(sqInt fieldIndex, sqInt oop); static void finalizeReference(usqInt oop) NoDbgRegParms; @@ -931,6 +931,7 @@ static sqInt fwdBlockValid(sqInt addr) NoDbgRegParms; static sqInt goodContextSize(sqInt oop) NoDbgRegParms; static sqInt hasForwardingBlock(sqInt objOop) NoDbgRegParms; +static sqInt hasSixtyFourBitImmediates(void); static sqInt headerWhileForwardingOf(sqInt oop) NoDbgRegParms; sqInt indexablePointersFormat(void); sqInt instanceSizeOf(sqInt classObj); @@ -1146,6 +1147,7 @@ static sqInt marriedContextpointsTostackDeltaForCurrentFrame(sqInt spouseContext, sqInt anOop, sqInt stackDeltaForCurrentFrame) NoDbgRegParms; static void marryContextInNewStackPageAndInitializeInterpreterRegisters(sqInt aContext) NoDbgRegParms; static sqInt marryFrameSP(char *theFP, char *theSP) NoDbgRegParms; +static sqInt maybeInlinePositive32BitIntegerFor(sqInt integerValue) NoDbgRegParms; static sqInt maybeSelectorOfMethod(sqInt methodObj) NoDbgRegParms; sqInt methodArgumentCount(void); sqInt methodArg(sqInt index); @@ -1159,6 +1161,7 @@ EXPORT(void) moduleUnloaded(char *aModuleName); static char * nameOfClass(sqInt classOop) NoDbgRegParms; static StackPage * newStackPage(void); +static sqInt noInlineSigned32BitIntegerFor(sqInt integerValue) NoDbgRegParms; static sqInt noInlineTemporaryin(sqInt offset, char *theFP) NoDbgRegParms; static sqInt noInlineTemporaryinput(sqInt offset, char *theFP, sqInt valueOop) NoDbgRegParms; static sqInt noMarkedContextsOnPage(StackPage *thePage) NoDbgRegParms; @@ -1365,17 +1368,18 @@ _iss sqInt profileProcess; _iss sqInt profileSemaphore; _iss usqInt fwdTableNext; -_iss sqInt longRunningPrimitiveCheckMethod; _iss sqInt profileMethod; _iss usqInt compStart; +_iss sqInt longRunningPrimitiveCheckMethod; +_iss sqInt weakRootCount; _iss sqInt extraRootCount; _iss sqInt growHeadroom; _iss sqInt statGrowMemory; _iss sqInt tempOop2; -_iss sqInt weakRootCount; _iss sqInt classNameIndex; _iss sqInt lastMethodCacheProbeWrite; _iss sqInt preemptionYields; +_iss sqInt cogCodeSize; _iss usqLong nextWakeupUsecs; _iss sqInt statMarkCount; _iss sqInt cogCompiledCodeCompactionCalledFor; @@ -1393,7 +1397,6 @@ _iss usqLong statCheckForEvents; _iss usqLong statGCEndUsecs; _iss sqInt statSweepCount; -_iss sqInt cogCodeSize; _iss usqInt compEnd; _iss sqInt externalPrimitiveTableFirstFreeIndex; _iss sqInt shrinkThreshold; @@ -1422,11 +1425,13 @@ _iss sqInt totalObjectCount; _iss sqInt fullScreenFlag; _iss usqInt gcBiasToGrowThreshold; +_iss sqInt imageFloatsBigEndian; _iss sqInt interruptKeycode; _iss sqInt interruptPending; _iss usqInt memory; _iss sqInt methodDictLinearSearchLimit; _iss usqLong nextPollUsecs; +_iss sqInt savedWindowSize; _iss usqLong statForceInterruptCheck; _iss usqLong statIGCDeltaUsecs; _iss sqInt statPendingFinalizationSignals; @@ -1439,22 +1444,20 @@ _iss sqInt gcBiasToGrow; _iss sqInt gcBiasToGrowGCLimit; _iss sqInt globalSessionID; -_iss sqInt imageFloatsBigEndian; +_iss usqLong longRunningPrimitiveGCUsecs; _iss sqInt longRunningPrimitiveSignalUndelivered; _iss sqInt maxExtSemTabSizeSet; -_iss sqInt savedWindowSize; _iss sqInt statCodeCompactionCount; _iss usqLong statCodeCompactionUsecs; _iss sqInt statRootTableCount; _iss sqInt statSurvivorCount; +_iss sqInt the2ndUnknownShort; _iss sqInt classByteArrayCompactIndex; _iss sqInt fullGCLock; _iss sqInt gcSemaphoreIndex; _iss sqInt imageHeaderFlags; -_iss usqLong longRunningPrimitiveGCUsecs; _iss sqInt overflowLimit; _iss StackPage * overflowedPage; -_iss sqInt the2ndUnknownShort; _iss long methodCache[MethodCacheSize + 1 /* 4097 */]; _iss sqInt atCache[AtCacheTotalSize + 1 /* 65 */]; _iss sqInt traceLog[TraceBufferSize /* 768 */]; @@ -1572,7 +1575,7 @@ /* 51 */ primitiveTruncated, /* 52 */ primitiveFractionalPart, /* 53 */ primitiveExponent, - /* 54 */ (void (*)(void))0, + /* 54 */ primitiveTimesTwoPower, /* 55 */ primitiveSquareRoot, /* 56 */ primitiveSine, /* 57 */ primitiveArctan, @@ -2096,7 +2099,7 @@ /* 575 */ (void (*)(void))0, 0 }; char expensiveAsserts = 0; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1060"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1064"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace; @@ -2434,9 +2437,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (0 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 0 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 0 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (0 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 0 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 0 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2453,9 +2459,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (1 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 1 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 1 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (1 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 1 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 1 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2472,9 +2481,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (2 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 2 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 2 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (2 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 2 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 2 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2491,9 +2503,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (3 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 3 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 3 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (3 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 3 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 3 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2510,9 +2525,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (4 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 4 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 4 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (4 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 4 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 4 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2529,9 +2547,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (5 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 5 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 5 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (5 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 5 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 5 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2548,9 +2569,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (6 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 6 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 6 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (6 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 6 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 6 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2567,9 +2591,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (7 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 7 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 7 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (7 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 7 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 7 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2586,9 +2613,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (8 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 8 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 8 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (8 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 8 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 8 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -2605,9 +2635,12 @@ /* begin pushTemporaryVariable: */ /* begin internalPush: */ - object = (9 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1))) - ? longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 9 /* currentBytecode bitAnd: 15 */) * BytesPerWord)) - : longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 9 /* currentBytecode bitAnd: 15 */) * BytesPerWord))); + if (9 /* currentBytecode bitAnd: 15 */ < ((frameNumArgs = byteAt((localFP + FoxIFrameFlags) + 1)))) { + object = longAt((localFP + FoxCallerSavedIP) + ((frameNumArgs - 9 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } + else { + object = longAt(((localFP + FoxIFReceiver) - BytesPerWord) + ((frameNumArgs - 9 /* currentBytecode bitAnd: 15 */) * BytesPerWord)); + } @@ Diff output truncated at 50000 characters. @@ |
Just so you know this has introduced a major regression since while sqInt val = integerArgument | integerReceiver; val >= 0 may be true, integerArgument | integerReceiver is never true, and so now when integerArgument | integerReceiver is inlined into maybeInlinePositive32BitIntegerFor: we get if (((integerArgument | integerReceiver) >= 0) && (((integerArgument | integerReceiver) ^ ((integerArgument | integerReceiver) << 1)) >= 0)) { which is sometimes true when (sqInt)(integerArgument | integerReceiver) >= 0 is false. So I will have broken the Cadence builds. Normal service may resume if I can figure this out. Looks like I need to propagate the type of the argument somehow to generate if (((sqInt)(integerArgument | integerReceiver) >= 0) && (((sqInt)(integerArgument | integerReceiver) ^ ((sqInt)(integerArgument | integerReceiver) << 1)) >= 0)) { or better still to introduce a temporary On Fri, Feb 13, 2015 at 6:19 PM, <[hidden email]> wrote:
best,
Eliot |
Free forum by Nabble | Edit this page |