Revision: 3678 Author: eliot Date: 2016-04-22 11:26:57 -0700 (Fri, 22 Apr 2016) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.1833
Cogit: - split compileAbstractInstruction in sub methods to understand what is going on.
- Fix a bug in genUpArrowReturn (deadCode should be set to true for non local return). Fixing this allow to simplify compileAbstractInstruction
64-bit Cogit: is32BitSignedImmediate: & isSignExtendedFourByteValue: are the same; we only need one. Fix PushCq for fully 64-bit quick constants (eg immediate floats).
Plugins: Generate integer type checking as C macros rather than direct/indirect interpreterProxy function call in plugins. Merge the LargeIntegersPlugin acceleration for type checking again (VMMaker.oscog-nice.1823).
This remove the need for (compatibility broken) platforms/Cross/vm/sqVirtualMemory.[ch] rev 3673 which can now safely be reverted.
Fix primAlienReplace to use positiveMachineIntegerValueOf: instead of positive32BitValueOf:.
Modified Paths: -------------- branches/Cog/nsspur64src/vm/cogit.h branches/Cog/nsspur64src/vm/cogitX64.c branches/Cog/nsspur64src/vm/cointerp.c branches/Cog/nsspur64src/vm/cointerp.h branches/Cog/nsspur64src/vm/gcc3x-cointerp.c 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/nsspursrc/vm/cointerp.c branches/Cog/nsspursrc/vm/cointerp.h branches/Cog/nsspursrc/vm/gcc3x-cointerp.c branches/Cog/nsspurstack64src/vm/gcc3x-interp.c branches/Cog/nsspurstack64src/vm/interp.c branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c branches/Cog/nsspurstacksrc/vm/interp.c branches/Cog/spur64src/vm/cogit.h branches/Cog/spur64src/vm/cogitX64.c branches/Cog/spur64src/vm/cointerp.c branches/Cog/spur64src/vm/cointerp.h branches/Cog/spur64src/vm/gcc3x-cointerp.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/spursistasrc/vm/cointerp.c branches/Cog/spursistasrc/vm/cointerp.h branches/Cog/spursistasrc/vm/gcc3x-cointerp.c branches/Cog/spursrc/vm/cogit.h branches/Cog/spursrc/vm/cogitARMv5.c branches/Cog/spursrc/vm/cogitIA32.c branches/Cog/spursrc/vm/cogitMIPSEL.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/ADPCMCodecPlugin/ADPCMCodecPlugin.c branches/Cog/src/plugins/B2DPlugin/B2DPlugin.c branches/Cog/src/plugins/BitBltPlugin/BitBltPlugin.c branches/Cog/src/plugins/FilePlugin/FilePlugin.c branches/Cog/src/plugins/FloatArrayPlugin/FloatArrayPlugin.c branches/Cog/src/plugins/IA32ABI/IA32ABI.c branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c branches/Cog/src/plugins/Matrix2x3Plugin/Matrix2x3Plugin.c branches/Cog/src/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c branches/Cog/src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c branches/Cog/src/plugins/Squeak3D/Squeak3D.c branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c branches/Cog/src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c branches/Cog/src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.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 branches/Cog/src/vm/cointerp.c branches/Cog/src/vm/cointerp.h branches/Cog/src/vm/cointerpmt.c branches/Cog/src/vm/cointerpmt.h branches/Cog/src/vm/gcc3x-cointerp.c branches/Cog/src/vm/gcc3x-cointerpmt.c branches/Cog/stacksrc/vm/gcc3x-interp.c branches/Cog/stacksrc/vm/interp.c
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nsspur64src/vm/cogit.h =================================================================== --- branches/Cog/nsspur64src/vm/cogit.h 2016-04-21 23:51:51 UTC (rev 3677) +++ branches/Cog/nsspur64src/vm/cogit.h 2016-04-22 18:26:57 UTC (rev 3678) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CCodeGenerator VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a */
Modified: branches/Cog/nsspur64src/vm/cogitX64.c =================================================================== --- branches/Cog/nsspur64src/vm/cogitX64.c 2016-04-21 23:51:51 UTC (rev 3677) +++ branches/Cog/nsspur64src/vm/cogitX64.c 2016-04-22 18:26:57 UTC (rev 3678) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CCodeGenerator VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a from - StackToRegisterMappingCogit VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + StackToRegisterMappingCogit VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a */ -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -598,6 +598,7 @@ static AbstractInstruction * lastOpcode(void); extern void linkNSSendCacheclassTagenclosingObjecttargetcaller(NSSendCache *nsSendCache, sqInt classTag, sqInt enclosingObject, CogMethod *targetMethod, CogMethod *callingMethod); extern void linkSendAtintooffsetreceiver(sqInt callSiteReturnAddress, CogMethod *sendingMethod, CogMethod *targetMethod, sqInt theEntryOffset, sqInt receiver); +static BytecodeDescriptor * loadBytesAndGetDescriptor(void); static void NoDbgRegParms loadSubsequentBytesForDescriptorat(BytecodeDescriptor *descriptor, sqInt pc); static AbstractInstruction * NoDbgRegParms gMoveAwR(sqInt address, sqInt reg); static AbstractInstruction * NoDbgRegParms gMoveCwR(sqInt wordConstant, sqInt reg); @@ -902,6 +903,7 @@ static sqInt NoDbgRegParms cmpC32RTempByteSize(AbstractInstruction * self_in_cmpC32RTempByteSize); static sqInt NoDbgRegParms computeMaximumSize(AbstractInstruction * self_in_computeMaximumSize); static sqInt NoDbgRegParms computeShiftRRSize(AbstractInstruction * self_in_computeShiftRRSize); +static sqInt NoDbgRegParms computeSizeOfPushCw(AbstractInstruction * self_in_computeSizeOfPushCw); static usqInt NoDbgRegParms concretizeArithCqRWithROraxOpcode(AbstractInstruction * self_in_concretizeArithCqRWithROraxOpcode, sqInt regOpcode, sqInt raxOpcode); static usqInt NoDbgRegParms concretizeFill32(AbstractInstruction * self_in_concretizeFill32); static usqInt NoDbgRegParms concretizeMoveRX32rR(AbstractInstruction * self_in_concretizeMoveRX32rR); @@ -931,7 +933,6 @@ static sqInt NoDbgRegParms isCallPrecedingReturnPC(AbstractInstruction * self_in_isCallPrecedingReturnPC, sqInt mcpc); static sqInt NoDbgRegParms isJumpAt(AbstractInstruction * self_in_isJumpAt, sqInt pc); static sqInt NoDbgRegParms isQuick(AbstractInstruction * self_in_isQuick, unsigned long operand); -static sqInt NoDbgRegParms isSignExtendedFourByteValue(AbstractInstruction * self_in_isSignExtendedFourByteValue, sqInt unsigned64BitValue); static sqInt NoDbgRegParms isWithinMwOffsetRange(AbstractInstruction * self_in_isWithinMwOffsetRange, sqInt anAddress); static AbstractInstruction * NoDbgRegParms jmpTarget(AbstractInstruction * self_in_jmpTarget, AbstractInstruction *anAbstractInstruction); static sqInt NoDbgRegParms jumpLongByteSize(AbstractInstruction * self_in_jumpLongByteSize); @@ -1147,6 +1148,7 @@ static void NoDbgRegParms initSimStackForFramelessBlock(sqInt startpc); static void NoDbgRegParms initSimStackForFramelessMethod(sqInt startpc); static sqInt liveRegisters(void); +static sqInt NoDbgRegParms mapDeadDescriptorIfNeeded(BytecodeDescriptor *descriptor); static void NoDbgRegParms marshallAbsentReceiverSendArguments(sqInt numArgs); static void NoDbgRegParms marshallSendArguments(sqInt numArgs); static sqInt NoDbgRegParms mergeWithFixupIfRequired(BytecodeFixup *fixup); @@ -1270,6 +1272,7 @@ static sqInt cPICEndSize; static sqInt cPICPrototype; static sqInt deadCode; +static sqInt debugBytecodePointers; static sqInt debugFixupBreaks; static sqInt debugOpcodeIndices; unsigned long debugPrimCallStackOffset; @@ -2233,7 +2236,7 @@ if (isQuick(self_in_computeSizeOfArithCqR, ((self_in_computeSizeOfArithCqR->operands))[0])) { return 4; } - if (isSignExtendedFourByteValue(self_in_computeSizeOfArithCqR, ((self_in_computeSizeOfArithCqR->operands))[0])) { + if (is32BitSignedImmediate(self_in_computeSizeOfArithCqR, ((self_in_computeSizeOfArithCqR->operands))[0])) { return ((((self_in_computeSizeOfArithCqR->operands))[1]) == RAX ? 6 : 7); @@ -5920,12 +5923,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;
@@ -7067,6 +7070,18 @@ flushICacheFromto(processor, (((usqInt)callSiteReturnAddress)) - extent, ((usqInt)callSiteReturnAddress)); }
+ /* Cogit>>#loadBytesAndGetDescriptor */ +static BytecodeDescriptor * +loadBytesAndGetDescriptor(void) +{ + BytecodeDescriptor *descriptor; + + byte0 = (fetchByteofObject(bytecodePC, methodObj)) + bytecodeSetOffset; + descriptor = generatorAt(byte0); + loadSubsequentBytesForDescriptorat(descriptor, bytecodePC); + return descriptor; +} + /* Cogit>>#loadSubsequentBytesForDescriptor:at: */ static void NoDbgRegParms loadSubsequentBytesForDescriptorat(BytecodeDescriptor *descriptor, sqInt pc) @@ -17021,7 +17036,7 @@ if (isQuick(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0])) { return 4; } - if (isSignExtendedFourByteValue(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0])) { + if (is32BitSignedImmediate(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0])) { return ((((self_in_computeMaximumSize->operands))[1]) == RAX ? 6 : 7); @@ -17240,12 +17255,12 @@ case PushCq: return (isQuick(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0]) ? 2 - : 5); + : (is32BitSignedImmediate(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0]) + ? 5 + : computeSizeOfPushCw(self_in_computeMaximumSize)));
case PushCw: - return (inCurrentCompilation(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0]) - ? 9 - : 12); + return computeSizeOfPushCw(self_in_computeMaximumSize);
case PrefetchAw: return (isAddressRelativeToVarBase(self_in_computeMaximumSize, ((self_in_computeMaximumSize->operands))[0]) @@ -17277,7 +17292,16 @@ : (3 + 3) + 3)); }
+ /* CogX64Compiler>>#computeSizeOfPushCw */ +static sqInt NoDbgRegParms +computeSizeOfPushCw(AbstractInstruction * self_in_computeSizeOfPushCw) +{ + return (inCurrentCompilation(self_in_computeSizeOfPushCw, ((self_in_computeSizeOfPushCw->operands))[0]) + ? 9 + : 12); +}
+ /* Will get inlined into concretizeAt: switch. */
/* CogX64Compiler>>#concretizeArithCqRWithRO:raxOpcode: */ @@ -17296,7 +17320,7 @@ ((self_in_concretizeArithCqRWithROraxOpcode->machineCode))[3] = (value & 0xFF); return ((self_in_concretizeArithCqRWithROraxOpcode->machineCodeSize) = 4); } - if (isSignExtendedFourByteValue(self_in_concretizeArithCqRWithROraxOpcode, value)) { + if (is32BitSignedImmediate(self_in_concretizeArithCqRWithROraxOpcode, value)) { if (reg == RAX) { ((self_in_concretizeArithCqRWithROraxOpcode->machineCode))[1] = raxOpcode; ((self_in_concretizeArithCqRWithROraxOpcode->machineCode))[2] = (value & 0xFF); @@ -17637,7 +17661,7 @@ unsigned long offset15; unsigned long offset16; unsigned long offset17; - sqInt offset18; + unsigned long offset18; sqInt offset19; unsigned long offset2; sqInt offset20; @@ -17659,6 +17683,7 @@ sqInt offset35; sqInt offset36; sqInt offset37; + sqInt offset38; unsigned long offset4; unsigned long offset5; unsigned long offset6; @@ -17740,6 +17765,7 @@ unsigned long value5; unsigned long value6; unsigned long value7; + unsigned long value8; unsigned long word;
@@ -17894,12 +17920,12 @@ } assert(jumpTarget12 != 0); jumpTarget3 = jumpTarget12; - offset22 = (((int) jumpTarget3)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset23 = (((int) jumpTarget3)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset22) + ? isQuick(self_in_dispatchConcretize, offset23) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 4); - ((self_in_dispatchConcretize->machineCode))[1] = (offset22 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset23 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -17934,12 +17960,12 @@ } assert(jumpTarget13 != 0); jumpTarget4 = jumpTarget13; - offset23 = (((int) jumpTarget4)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset24 = (((int) jumpTarget4)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset23) + ? isQuick(self_in_dispatchConcretize, offset24) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 5); - ((self_in_dispatchConcretize->machineCode))[1] = (offset23 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset24 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -17999,12 +18025,12 @@ } assert(jumpTarget14 != 0); jumpTarget5 = jumpTarget14; - offset24 = (((int) jumpTarget5)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset25 = (((int) jumpTarget5)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset24) + ? isQuick(self_in_dispatchConcretize, offset25) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 8); - ((self_in_dispatchConcretize->machineCode))[1] = (offset24 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset25 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18037,12 +18063,12 @@ } assert(jumpTarget15 != 0); jumpTarget6 = jumpTarget15; - offset25 = (((int) jumpTarget6)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset26 = (((int) jumpTarget6)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset25) + ? isQuick(self_in_dispatchConcretize, offset26) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 9); - ((self_in_dispatchConcretize->machineCode))[1] = (offset25 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset26 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18075,12 +18101,12 @@ } assert(jumpTarget16 != 0); jumpTarget7 = jumpTarget16; - offset26 = (((int) jumpTarget7)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset27 = (((int) jumpTarget7)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset26) + ? isQuick(self_in_dispatchConcretize, offset27) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112); - ((self_in_dispatchConcretize->machineCode))[1] = (offset26 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset27 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18113,12 +18139,12 @@ } assert(jumpTarget17 != 0); jumpTarget8 = jumpTarget17; - offset27 = (((int) jumpTarget8)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset28 = (((int) jumpTarget8)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset27) + ? isQuick(self_in_dispatchConcretize, offset28) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 1); - ((self_in_dispatchConcretize->machineCode))[1] = (offset27 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset28 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18153,12 +18179,12 @@ } assert(jumpTarget18 != 0); jumpTarget9 = jumpTarget18; - offset28 = (((int) jumpTarget9)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset29 = (((int) jumpTarget9)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset28) + ? isQuick(self_in_dispatchConcretize, offset29) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 2); - ((self_in_dispatchConcretize->machineCode))[1] = (offset28 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset29 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18193,12 +18219,12 @@ } assert(jumpTarget19 != 0); jumpTarget10 = jumpTarget19; - offset29 = (((int) jumpTarget10)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset30 = (((int) jumpTarget10)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset29) + ? isQuick(self_in_dispatchConcretize, offset30) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 3); - ((self_in_dispatchConcretize->machineCode))[1] = (offset29 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset30 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18231,12 +18257,12 @@ } assert(jumpTarget110 != 0); jumpTarget20 = jumpTarget110; - offset30 = (((int) jumpTarget20)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset31 = (((int) jumpTarget20)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset30) + ? isQuick(self_in_dispatchConcretize, offset31) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 12); - ((self_in_dispatchConcretize->machineCode))[1] = (offset30 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset31 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18269,12 +18295,12 @@ } assert(jumpTarget119 != 0); jumpTarget29 = jumpTarget119; - offset31 = (((int) jumpTarget29)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset32 = (((int) jumpTarget29)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset31) + ? isQuick(self_in_dispatchConcretize, offset32) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 13); - ((self_in_dispatchConcretize->machineCode))[1] = (offset31 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset32 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18307,12 +18333,12 @@ } assert(jumpTarget120 != 0); jumpTarget30 = jumpTarget120; - offset32 = (((int) jumpTarget30)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset33 = (((int) jumpTarget30)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset32) + ? isQuick(self_in_dispatchConcretize, offset33) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 15); - ((self_in_dispatchConcretize->machineCode))[1] = (offset32 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset33 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18345,12 +18371,12 @@ } assert(jumpTarget121 != 0); jumpTarget31 = jumpTarget121; - offset33 = (((int) jumpTarget31)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset34 = (((int) jumpTarget31)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset33) + ? isQuick(self_in_dispatchConcretize, offset34) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 14); - ((self_in_dispatchConcretize->machineCode))[1] = (offset33 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset34 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18384,12 +18410,12 @@ } assert(jumpTarget122 != 0); jumpTarget32 = jumpTarget122; - offset34 = (((int) jumpTarget32)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset35 = (((int) jumpTarget32)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset34) + ? isQuick(self_in_dispatchConcretize, offset35) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 7); - ((self_in_dispatchConcretize->machineCode))[1] = (offset34 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset35 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18423,12 +18449,12 @@ } assert(jumpTarget123 != 0); jumpTarget33 = jumpTarget123; - offset35 = (((int) jumpTarget33)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset36 = (((int) jumpTarget33)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset35) + ? isQuick(self_in_dispatchConcretize, offset36) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 6); - ((self_in_dispatchConcretize->machineCode))[1] = (offset35 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset36 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18461,12 +18487,12 @@ } assert(jumpTarget124 != 0); jumpTarget34 = jumpTarget124; - offset36 = (((int) jumpTarget34)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset37 = (((int) jumpTarget34)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset36) + ? isQuick(self_in_dispatchConcretize, offset37) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 11); - ((self_in_dispatchConcretize->machineCode))[1] = (offset36 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset37 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18499,12 +18525,12 @@ } assert(jumpTarget125 != 0); jumpTarget35 = jumpTarget125; - offset37 = (((int) jumpTarget35)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); + offset38 = (((int) jumpTarget35)) - (((int) (((self_in_dispatchConcretize->address)) + 2))); if ((((self_in_dispatchConcretize->machineCodeSize)) == 0 - ? isQuick(self_in_dispatchConcretize, offset37) + ? isQuick(self_in_dispatchConcretize, offset38) : ((self_in_dispatchConcretize->machineCodeSize)) == 2)) { ((self_in_dispatchConcretize->machineCode))[0] = (112 + 10); - ((self_in_dispatchConcretize->machineCode))[1] = (offset37 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[1] = (offset38 & 0xFF); ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } @@ -18594,7 +18620,7 @@ ((self_in_dispatchConcretize->machineCodeSize) = 4); return; } - if (isSignExtendedFourByteValue(self_in_dispatchConcretize, value)) { + if (is32BitSignedImmediate(self_in_dispatchConcretize, value)) { if (reg3 == RAX) { ((self_in_dispatchConcretize->machineCode))[1] = 169; ((self_in_dispatchConcretize->machineCode))[2] = (value & 0xFF); @@ -19089,53 +19115,53 @@ ((self_in_dispatchConcretize->operands))[1] = RBX; ((self_in_dispatchConcretize->operands))[2] = save1; /* begin concretizeMoveMwrR */ - offset17 = ((self_in_dispatchConcretize->operands))[0]; + offset18 = ((self_in_dispatchConcretize->operands))[0]; srcReg12 = ((self_in_dispatchConcretize->operands))[1]; destReg13 = ((self_in_dispatchConcretize->operands))[2]; ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, destReg13, 0, srcReg12)); ((self_in_dispatchConcretize->machineCode))[1] = 139; if ((srcReg12 != RSP) && (srcReg12 != R12)) { - if ((offset17 == 0) + if ((offset18 == 0) && ((srcReg12 != RBP) && (srcReg12 != R13))) { ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegInd, srcReg12, destReg13)); (self_in_dispatchConcretize->machineCodeSize) = 3; goto l1; } - if (isQuick(self_in_dispatchConcretize, offset17)) { + if (isQuick(self_in_dispatchConcretize, offset18)) { ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegRegDisp8, srcReg12, destReg13)); - ((self_in_dispatchConcretize->machineCode))[3] = (offset17 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3] = (offset18 & 0xFF); (self_in_dispatchConcretize->machineCodeSize) = 4; goto l1; } ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegRegDisp32, srcReg12, destReg13)); - ((self_in_dispatchConcretize->machineCode))[3] = (offset17 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset17) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset17) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) offset17) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3] = (offset18 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset18) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset18) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) offset18) >> 24) & 0xFF); (self_in_dispatchConcretize->machineCodeSize) = 7; goto l1; } - if (offset17 == 0) { + if (offset18 == 0) { ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegInd, srcReg12, destReg13)); ((self_in_dispatchConcretize->machineCode))[3] = (sib(self_in_dispatchConcretize, SIB1, 4, srcReg12)); (self_in_dispatchConcretize->machineCodeSize) = 4; goto l1; } - if (isQuick(self_in_dispatchConcretize, offset17)) { + if (isQuick(self_in_dispatchConcretize, offset18)) { ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegRegDisp8, srcReg12, destReg13)); ((self_in_dispatchConcretize->machineCode))[3] = (sib(self_in_dispatchConcretize, SIB1, 4, srcReg12)); - ((self_in_dispatchConcretize->machineCode))[4] = (offset17 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = (offset18 & 0xFF); (self_in_dispatchConcretize->machineCodeSize) = 5; goto l1; } ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegRegDisp32, srcReg12, destReg13)); ((self_in_dispatchConcretize->machineCode))[3] = (sib(self_in_dispatchConcretize, SIB1, 4, srcReg12)); - ((self_in_dispatchConcretize->machineCode))[4] = (offset17 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset17) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) offset17) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[7] = ((((usqInt) offset17) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = (offset18 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset18) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) offset18) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7] = ((((usqInt) offset18) >> 24) & 0xFF); (self_in_dispatchConcretize->machineCodeSize) = 8; l1: /* end concretizeMoveMwrR */; ((self_in_dispatchConcretize->operands))[0] = save0; @@ -19146,23 +19172,23 @@ } reg18 = ((self_in_dispatchConcretize->operands))[1]; if (reg18 == RAX) { - offset18 = 0; + offset19 = 0; } else { ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, 0, 0, reg18)); ((self_in_dispatchConcretize->machineCode))[1] = (144 + (reg18 % 8)); - offset18 = 2; + offset19 = 2; } - ((self_in_dispatchConcretize->machineCode))[0 + offset18] = 72; - ((self_in_dispatchConcretize->machineCode))[1 + offset18] = 161; - ((self_in_dispatchConcretize->machineCode))[2 + offset18] = (addressOperand & 0xFF); - ((self_in_dispatchConcretize->machineCode))[3 + offset18] = ((((usqInt) addressOperand) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4 + offset18] = ((((usqInt) addressOperand) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5 + offset18] = ((((usqInt) addressOperand) >> 24) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6 + offset18] = ((((usqInt) addressOperand) >> 32) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[7 + offset18] = ((((usqInt) addressOperand) >> 40) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[8 + offset18] = ((((usqInt) addressOperand) >> 48) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[9 + offset18] = ((((usqInt) addressOperand) >> 56) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[0 + offset19] = 72; + ((self_in_dispatchConcretize->machineCode))[1 + offset19] = 161; + ((self_in_dispatchConcretize->machineCode))[2 + offset19] = (addressOperand & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3 + offset19] = ((((usqInt) addressOperand) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4 + offset19] = ((((usqInt) addressOperand) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5 + offset19] = ((((usqInt) addressOperand) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6 + offset19] = ((((usqInt) addressOperand) >> 32) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7 + offset19] = ((((usqInt) addressOperand) >> 40) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[8 + offset19] = ((((usqInt) addressOperand) >> 48) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[9 + offset19] = ((((usqInt) addressOperand) >> 56) & 0xFF); if (reg18 == RAX) { ((self_in_dispatchConcretize->machineCodeSize) = 10); return; @@ -19242,23 +19268,23 @@ return; } if (reg19 == RAX) { - offset19 = 0; + offset20 = 0; } else { ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, 0, 0, reg19)); ((self_in_dispatchConcretize->machineCode))[1] = (144 + (reg19 % 8)); - offset19 = 2; + offset20 = 2; } - ((self_in_dispatchConcretize->machineCode))[0 + offset19] = 72; - ((self_in_dispatchConcretize->machineCode))[1 + offset19] = 163; - ((self_in_dispatchConcretize->machineCode))[2 + offset19] = (addressOperand1 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[3 + offset19] = ((((usqInt) addressOperand1) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4 + offset19] = ((((usqInt) addressOperand1) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5 + offset19] = ((((usqInt) addressOperand1) >> 24) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6 + offset19] = ((((usqInt) addressOperand1) >> 32) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[7 + offset19] = ((((usqInt) addressOperand1) >> 40) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[8 + offset19] = ((((usqInt) addressOperand1) >> 48) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[9 + offset19] = ((((usqInt) addressOperand1) >> 56) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[0 + offset20] = 72; + ((self_in_dispatchConcretize->machineCode))[1 + offset20] = 163; + ((self_in_dispatchConcretize->machineCode))[2 + offset20] = (addressOperand1 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3 + offset20] = ((((usqInt) addressOperand1) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4 + offset20] = ((((usqInt) addressOperand1) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5 + offset20] = ((((usqInt) addressOperand1) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6 + offset20] = ((((usqInt) addressOperand1) >> 32) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7 + offset20] = ((((usqInt) addressOperand1) >> 40) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[8 + offset20] = ((((usqInt) addressOperand1) >> 48) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[9 + offset20] = ((((usqInt) addressOperand1) >> 56) & 0xFF); if (reg19 == RAX) { ((self_in_dispatchConcretize->machineCodeSize) = 10); return; @@ -19341,23 +19367,23 @@ } reg20 = ((self_in_dispatchConcretize->operands))[1]; if (reg20 == RAX) { - offset20 = 0; + offset21 = 0; } else { ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, 0, 0, reg20)); ((self_in_dispatchConcretize->machineCode))[1] = (144 + (reg20 % 8)); - offset20 = 2; + offset21 = 2; } - ((self_in_dispatchConcretize->machineCode))[0 + offset20] = 72; - ((self_in_dispatchConcretize->machineCode))[1 + offset20] = 160; - ((self_in_dispatchConcretize->machineCode))[2 + offset20] = (addressOperand2 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[3 + offset20] = ((((usqInt) addressOperand2) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4 + offset20] = ((((usqInt) addressOperand2) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5 + offset20] = ((((usqInt) addressOperand2) >> 24) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6 + offset20] = ((((usqInt) addressOperand2) >> 32) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[7 + offset20] = ((((usqInt) addressOperand2) >> 40) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[8 + offset20] = ((((usqInt) addressOperand2) >> 48) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[9 + offset20] = ((((usqInt) addressOperand2) >> 56) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[0 + offset21] = 72; + ((self_in_dispatchConcretize->machineCode))[1 + offset21] = 160; + ((self_in_dispatchConcretize->machineCode))[2 + offset21] = (addressOperand2 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3 + offset21] = ((((usqInt) addressOperand2) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4 + offset21] = ((((usqInt) addressOperand2) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5 + offset21] = ((((usqInt) addressOperand2) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6 + offset21] = ((((usqInt) addressOperand2) >> 32) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7 + offset21] = ((((usqInt) addressOperand2) >> 40) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[8 + offset21] = ((((usqInt) addressOperand2) >> 48) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[9 + offset21] = ((((usqInt) addressOperand2) >> 56) & 0xFF); if (reg20 == RAX) { ((self_in_dispatchConcretize->machineCodeSize) = 10); return; @@ -19437,23 +19463,23 @@ return; } if (reg21 == RAX) { - offset21 = 0; + offset22 = 0; } else { ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, 0, 0, reg21)); ((self_in_dispatchConcretize->machineCode))[1] = (144 + (reg21 % 8)); - offset21 = 2; + offset22 = 2; } - ((self_in_dispatchConcretize->machineCode))[0 + offset21] = 72; - ((self_in_dispatchConcretize->machineCode))[1 + offset21] = 162; - ((self_in_dispatchConcretize->machineCode))[2 + offset21] = (addressOperand3 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[3 + offset21] = ((((usqInt) addressOperand3) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4 + offset21] = ((((usqInt) addressOperand3) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[5 + offset21] = ((((usqInt) addressOperand3) >> 24) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[6 + offset21] = ((((usqInt) addressOperand3) >> 32) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[7 + offset21] = ((((usqInt) addressOperand3) >> 40) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[8 + offset21] = ((((usqInt) addressOperand3) >> 48) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[9 + offset21] = ((((usqInt) addressOperand3) >> 56) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[0 + offset22] = 72; + ((self_in_dispatchConcretize->machineCode))[1 + offset22] = 162; + ((self_in_dispatchConcretize->machineCode))[2 + offset22] = (addressOperand3 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3 + offset22] = ((((usqInt) addressOperand3) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4 + offset22] = ((((usqInt) addressOperand3) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5 + offset22] = ((((usqInt) addressOperand3) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6 + offset22] = ((((usqInt) addressOperand3) >> 32) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7 + offset22] = ((((usqInt) addressOperand3) >> 40) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[8 + offset22] = ((((usqInt) addressOperand3) >> 48) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[9 + offset22] = ((((usqInt) addressOperand3) >> 56) & 0xFF); if (reg21 == RAX) { ((self_in_dispatchConcretize->machineCodeSize) = 10); return; @@ -20041,16 +20067,15 @@ ((self_in_dispatchConcretize->machineCodeSize) = 2); return; } - assert(isSignExtendedFourByteValue(self_in_dispatchConcretize, value4)); - ((self_in_dispatchConcretize->machineCode))[0] = 104; - ((self_in_dispatchConcretize->machineCode))[1] = (value4 & 0xFF); - ((self_in_dispatchConcretize->machineCode))[2] = ((((usqInt) value4) >> 8) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) value4) >> 16) & 0xFF); - ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) value4) >> 24) & 0xFF); - ((self_in_dispatchConcretize->machineCodeSize) = 5); - return; - - case PushCw: + if (is32BitSignedImmediate(self_in_dispatchConcretize, value4)) { + ((self_in_dispatchConcretize->machineCode))[0] = 104; + ((self_in_dispatchConcretize->machineCode))[1] = (value4 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[2] = ((((usqInt) value4) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) value4) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) value4) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCodeSize) = 5); + return; + } /* begin concretizePushCw */ value7 = ((self_in_dispatchConcretize->operands))[0]; if ((addressIsInInstructions(((AbstractInstruction *) value7))) @@ -20088,6 +20113,44 @@ ((self_in_dispatchConcretize->machineCodeSize) = 12); return;
+ case PushCw: + /* begin concretizePushCw */ + value8 = ((self_in_dispatchConcretize->operands))[0]; + if ((addressIsInInstructions(((AbstractInstruction *) value8))) + || ((((AbstractInstruction *) value8)) == (methodLabel()))) { + value8 = ((((AbstractInstruction *) value8))->address); + } + if (addressIsInCurrentCompilation(value8)) { + offset17 = value8 - (((self_in_dispatchConcretize->address)) + 7); + ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, RISCTempReg, 0, 0)); + ((self_in_dispatchConcretize->machineCode))[1] = 141; + ((self_in_dispatchConcretize->machineCode))[2] = (modRMRO(self_in_dispatchConcretize, ModRegInd, 5, RISCTempReg)); + ((self_in_dispatchConcretize->machineCode))[3] = (offset17 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) offset17) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) offset17) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) offset17) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7] = 65; + ((self_in_dispatchConcretize->machineCode))[8] = (72 + RISCTempReg); + ((self_in_dispatchConcretize->machineCodeSize) = 9); + return; + } + ((self_in_dispatchConcretize->machineCode))[0] = (rexRxb(self_in_dispatchConcretize, RISCTempReg, 0, RISCTempReg)); + ((self_in_dispatchConcretize->machineCode))[1] = (184 + (RISCTempReg & 7)); + ((self_in_dispatchConcretize->machineCode))[2] = (value8 & 0xFF); + ((self_in_dispatchConcretize->machineCode))[3] = ((((usqInt) value8) >> 8) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[4] = ((((usqInt) value8) >> 16) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[5] = ((((usqInt) value8) >> 24) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[6] = ((((usqInt) value8) >> 32) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[7] = ((((usqInt) value8) >> 40) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[8] = ((((usqInt) value8) >> 48) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[9] = ((((usqInt) value8) >> 56) & 0xFF); + ((self_in_dispatchConcretize->machineCode))[10] = 65; + ((self_in_dispatchConcretize->machineCode))[11] = (72 + RISCTempReg); + assert(RISCTempReg >= 8); + assert((modRMRO(self_in_dispatchConcretize, ModReg, 0, 0)) > 87); + ((self_in_dispatchConcretize->machineCodeSize) = 12); + return; + case PrefetchAw: concretizePrefetchAw(self_in_dispatchConcretize); return; @@ -20626,6 +20689,11 @@ } }
+ +/* Top 32 bits all the same as the bottom 32 bits' sign bit implies we can + use a sign-extended 4 byte offset. + */ + /* CogX64Compiler>>#is32BitSignedImmediate: */ static sqInt NoDbgRegParms is32BitSignedImmediate(AbstractInstruction * self_in_is32BitSignedImmediate, sqInt a64BitUnsignedOperand) @@ -20686,17 +20754,6 @@ }
-/* Top 32 bits all the same as the bottom 32 bits' sign bit implies we can - use a sign-extended 4 byte offset. */ - - /* CogX64Compiler>>#isSignExtendedFourByteValue: */ -static sqInt NoDbgRegParms -isSignExtendedFourByteValue(AbstractInstruction * self_in_isSignExtendedFourByteValue, sqInt unsigned64BitValue) -{ - return (((((sqInt) unsigned64BitValue) >> 32) + 1) ^ 1) == ((((usqInt) unsigned64BitValue) >> 0x1F) & 1); -} - - /* Answer if an address can be accessed using the offset in a MoveMw:r:R: or similar instruction. We assume this is true for 32-bit processors and expect 64-bit processors @@ -24432,8 +24489,6 @@ static sqInt NoDbgRegParms compileAbstractInstructionsFromthrough(sqInt start, sqInt end) { - AbstractInstruction *abstractInstruction; - sqInt debugBytecodePointers; BytecodeDescriptor *descriptor; BytecodeFixup *fixup; sqInt generateBranchAround; @@ -24443,45 +24498,26 @@
traceSimStack(); bytecodePC = start; - nExts = 0; + nExts = (result = 0); descriptor = null; deadCode = 0; while (1) { - - /* If there's no fixup following a return there's no jump to that code and it is dead. */ fixup = fixupAt(bytecodePC - initialPC); - if ((descriptor != null) - && ((descriptor->isReturn))) { - deadCode = 1; - } mergeWithFixupIfRequired(fixup); - byte0 = (fetchByteofObject(bytecodePC, methodObj)) + bytecodeSetOffset; - descriptor = generatorAt(byte0); - loadSubsequentBytesForDescriptorat(descriptor, bytecodePC); + /* begin assertCorrectSimStackPtr */ + descriptor = loadBytesAndGetDescriptor(); nextOpcodeIndex = opcodeIndex; - if (deadCode) { - - /* insert nops for dead code that is mapped so that bc to mc mapping is not many to one */ - if (((descriptor->isMapped)) - || (inBlock - && ((descriptor->isMappedInBlock)))) { - /* begin annotateBytecode: */ - abstractInstruction = gen(Nop); - (abstractInstruction->annotation = HasBytecodePC); - } - result = 0; - } - else { - result = ((descriptor->generator))(); - } + result = (deadCode + ? mapDeadDescriptorIfNeeded(descriptor) + : ((descriptor->generator))()); + /* begin assertExtsAreConsumed: */ if (!((descriptor->isExtension))) { - - /* extended bytecodes must consume their extensions */ assert((extA == 0) && (extB == 0)); } traceDescriptor(descriptor); traceSimStack(); + /* begin patchFixupTargetIfNeeded:nextOpcodeIndex: */ if ((((((usqInt)((fixup->targetInstruction)))) >= NeedsNonMergeFixupFlag) && ((((usqInt)((fixup->targetInstruction)))) <= NeedsMergeFixupFlag))) {
/* There is a fixup for this bytecode. It must point to the first generated @@ -27172,6 +27208,9 @@ AbstractInstruction *abstractInstruction1; sqInt offset;
+ + /* can't fall through */ + deadCode = 1; if (inBlock) { assert(needsFrame); /* begin CallRT: */ @@ -27198,9 +27237,6 @@ : 0); genoperand(RetN, offset); } - - /* can't fall through */ - deadCode = 1; return 0; }
@@ -27363,6 +27399,27 @@ return regsSet; }
+ +/* insert nops for dead code that is mapped so that bc + to mc mapping is not many to one */ + + /* StackToRegisterMappingCogit>>#mapDeadDescriptorIfNeeded: */ +static sqInt NoDbgRegParms +mapDeadDescriptorIfNeeded(BytecodeDescriptor *descriptor) +{ + AbstractInstruction *abstractInstruction; + + flag("annotateInstruction"); + if (((descriptor->isMapped)) + || (inBlock + && ((descriptor->isMappedInBlock)))) { + /* begin annotateBytecode: */ + abstractInstruction = gen(Nop); + (abstractInstruction->annotation = HasBytecodePC); + } + return 0; +} + /* StackToRegisterMappingCogit>>#marshallAbsentReceiverSendArguments: */ static void NoDbgRegParms marshallAbsentReceiverSendArguments(sqInt numArgs)
Modified: branches/Cog/nsspur64src/vm/cointerp.c =================================================================== --- branches/Cog/nsspur64src/vm/cointerp.c 2016-04-21 23:51:51 UTC (rev 3677) +++ branches/Cog/nsspur64src/vm/cointerp.c 2016-04-22 18:26:57 UTC (rev 3678) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a from - CoInterpreter VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CoInterpreter VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -1383,6 +1383,10 @@ static sqInt NoDbgRegParms isEmptyList(sqInt aLinkedList); extern sqInt isFloatObject(sqInt oop); static sqInt NoDbgRegParms isFrameonPage(char *aFrame, StackPage *aPage); +extern sqInt isKindOfInteger(sqInt oop); +extern sqInt isLargeIntegerObject(sqInt oop); +extern sqInt isLargeNegativeIntegerObject(sqInt oop); +extern sqInt isLargePositiveIntegerObject(sqInt oop); static sqInt NoDbgRegParms isLiveContext(sqInt oop); static sqInt NoDbgRegParms isMarriedOrWidowedContext(sqInt aContext); static sqInt NoDbgRegParms isNullExternalPrimitiveCall(sqInt aMethodObj); @@ -1604,8 +1608,8 @@ _iss StackPage * stackPage; _iss sqInt nilObj; _iss sqInt argumentCount; +_iss sqInt bytecodeSetSelector; _iss sqInt specialObjectsOop; -_iss sqInt bytecodeSetSelector; _iss sqInt messageSelector; _iss usqInt instructionPointer; _iss usqInt newMethod; @@ -2430,7 +2434,7 @@ /*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1 }; char expensiveAsserts = 0; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1824"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1832"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -61674,7 +61678,7 @@ usqInt prevFree; usqInt prevFreeChunk; usqInt prevPrevFree; - sqInt prevPrevFreeChunk; + usqInt prevPrevFreeChunk; sqInt slotBytes; sqInt slotBytes1; usqInt there; @@ -67088,7 +67092,7 @@ bridgeFromto(SpurSegmentInfo *aSegment, SpurSegmentInfo *nextSegmentOrNil) { usqInt bridgeSpan; - sqInt clifton; + usqInt clifton; usqInt segEnd;
segEnd = ((aSegment->segSize)) + ((aSegment->segStart)); @@ -67332,7 +67336,7 @@ sqInt limit; sqInt newEndOfMemory; sqInt next; - usqInt node; + sqInt node; usqInt numSlots; usqInt numSlots1; SpurSegmentInfo *seg; @@ -67675,8 +67679,8 @@ { usqLong firstSavedBridgeWord; sqInt nWritten; - sqInt pier1; - sqInt pier2; + usqInt pier1; + usqInt pier2; usqLong secondSavedBridgeWord;
pier1 = (((segment->segSize)) + ((segment->segStart))) - (2 * BaseHeaderSize); @@ -71922,6 +71926,42 @@ }
+/* Answer true if the oop is kind of Integer (Small or Large). */ + + /* StackInterpreter>>#isKindOfInteger: */ +sqInt +isKindOfInteger(sqInt oop) +{ + return ((((oop) & 7) == 1)) + || (((oop & (tagMask())) == 0) + && ((((usqInt)(((longAt(oop)) & (classIndexMask())) - ClassLargeNegativeIntegerCompactIndex))) <= 1)); +} + + /* StackInterpreter>>#isLargeIntegerObject: */ +sqInt +isLargeIntegerObject(sqInt oop) +{ + return ((oop & (tagMask())) == 0) + && ((((usqInt)(((longAt(oop)) & (classIndexMask())) - ClassLargeNegativeIntegerCompactIndex))) <= 1); +} + + /* StackInterpreter>>#isLargeNegativeIntegerObject: */ +sqInt +isLargeNegativeIntegerObject(sqInt oop) +{ + return ((oop & (tagMask())) == 0) + && (((longAt(oop)) & (classIndexMask())) == ClassLargeNegativeIntegerCompactIndex); +} + + /* StackInterpreter>>#isLargePositiveIntegerObject: */ +sqInt +isLargePositiveIntegerObject(sqInt oop) +{ + return ((oop & (tagMask())) == 0) + && (((longAt(oop)) & (classIndexMask())) == ClassLargePositiveIntegerCompactIndex); +} + + /* Answer if the argument, which can be any object, is a live context. */
/* StackInterpreter>>#isLiveContext: */ @@ -77659,8 +77699,8 @@ cnt = ((((max = 128)) < ((len = lengthOfformat(oop, (((usqInt) (longAt(oop))) >> (formatShift())) & (formatMask()))))) ? ((max = 128)) : ((len = lengthOfformat(oop, (((usqInt) (longAt(oop))) >> (formatShift())) & (formatMask()))))); i = 0; if ((isinstanceOfcompactClassIndex(oop, longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)ClassByteArray) << (shiftForWord()))), GIV(classByteArrayCompactIndex))) - || ((isinstanceOfcompactClassIndex(oop, longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)ClassLargePositiveInteger) << (shiftForWord()))), ClassLargePositiveIntegerCompactIndex)) - || (isinstanceOfcompactClassIndex(oop, longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)ClassLargeNegativeInteger) << (shiftForWord()))), ClassLargeNegativeIntegerCompactIndex)))) { + || (((oop & (tagMask())) == 0) + && ((((usqInt)(((longAt(oop)) & (classIndexMask())) - ClassLargeNegativeIntegerCompactIndex))) <= 1))) { while (i < cnt) { printHex(byteAt((oop + BaseHeaderSize) + i)); i += 1;
Modified: branches/Cog/nsspur64src/vm/cointerp.h =================================================================== --- branches/Cog/nsspur64src/vm/cointerp.h 2016-04-21 23:51:51 UTC (rev 3677) +++ branches/Cog/nsspur64src/vm/cointerp.h 2016-04-22 18:26:57 UTC (rev 3678) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a */
@@ -272,6 +272,10 @@ extern sqInt headerIndicatesAlternateBytecodeSet(sqInt methodHeader); extern sqInt highBit(usqInt anUnsignedValue); extern sqInt isFloatObject(sqInt oop); +extern sqInt isKindOfInteger(sqInt oop); +extern sqInt isLargeIntegerObject(sqInt oop); +extern sqInt isLargeNegativeIntegerObject(sqInt oop); +extern sqInt isLargePositiveIntegerObject(sqInt oop); extern sqInt isQuickPrimitiveIndex(sqInt anInteger); extern sqInt isReadMediatedContextInstVarIndex(sqInt index); extern sqInt isWriteMediatedContextInstVarIndex(sqInt index);
Modified: branches/Cog/nsspur64src/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/nsspur64src/vm/gcc3x-cointerp.c 2016-04-21 23:51:51 UTC (rev 3677) +++ branches/Cog/nsspur64src/vm/gcc3x-cointerp.c 2016-04-22 18:26:57 UTC (rev 3678) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1824 uuid: 3e604324-d371-4ad6-ac2d-8acf325accfe + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1832 uuid: 3e4d6e88-f60d-4a01-930d-7c5895b8a86a from
@@ Diff output truncated at 50000 characters. @@
vm-dev@lists.squeakfoundation.org