[Vm-dev] [commit][3502] CogVM source as per VMMaker.oscog-rmacnak.1532

commits at squeakvm.org commits at squeakvm.org
Tue Nov 24 22:58:30 UTC 2015


Revision: 3502
Author:   eliot
Date:     2015-11-24 14:58:27 -0800 (Tue, 24 Nov 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-rmacnak.1532

Cogit:
Fix bug in Spur machine-code at:put: on 32-bit bits objects; method failed to fail for
negative values.


Change the generation of closed PICs; they are no longer compiled each time we make on
or extend one, but rather  copied from a prototype and updated as needed. Take a look at
http://wiki.squeak.org/squeak/6205 for some explanations. Fixes a bad bug on ARM where we
were generating class tags as instructions and getting away with it simply because class
tags look like noops.  Now that we generate all code in one go, out-of-line literals are
no longer accidentally intermixed with the code.

Changes due to as-yet-unreleased MIPSEL support.  Branches are informed of their
preceding instruction so that on MIPS the pair can be collapsed to a unitary
compare-and-branch instruction.  Implement the long conditional branch/long unconditional
branch split necessitated by the MIPS processor in all of the closed PIC methods.

Reorder CPIC instructions to suit MIPSEL, i.e. put the load before the compare and jump
(the old code was there only to suit adjusting entries on x86, not for performance).

Beef up the asserts in expectedClosedPICPrototype so that updating the class and method
entries is tested.

Changes due to as-yet-unreleased x64 support. Use CmpC32:R: to compare the class tag in
CPICs to match in-line caches on 64-bit Spur.  Add CmpC32R generation for X64.  Refactor
the gen[NS]Send: machinery to take selector indices instead of selector oops, to allow
the x64/Spur64 JIT to use 32-bit in-line caches that hold selector indices, not selector
oops.  Scheme is commented in genLoadInlineCache:.  Fix the use of 80 as a constant in
the special selector machinery.  This should be firstSpecialSelectorBytecodeOffset.  Add
[Alt]NumSpecialSelectors for range checking special selector indices, which are negative.

Refactor context creation generation code in Spur object representations for sharing
between 32 and 64 bits.  Implement some 64-bit obj rep generation support.

Clarify whether byte reads zero-extend by introducing
CogAbstractInstruction>>byteReadsZeroExtend.  Make sure the x86 does
zero-extend and take the easy route with x64 having it not zero-extend.

Slang:
Make sure signed comparisons are used in the relevant isIntegerValue: implementations.

Update Slang to collapse an ifTrue:ifFalse: if both arms are the same, to avoid the code
duplication this introduces on the rest of the processors where conditional and
unconditional branch offsets can be accessed in the same way.

Fix Slang regression.  TSendNode>>isSameAs: must take into account the receiver!!

Include exported api variables (between Cogit and CoInterpreter) for better type
checking and fewer warnings.

Propagate types of actuals with other than the default sqInt type to untyped formals,
hence fixing bogus inlining of genLoadHeaderIntoNewInstance: into
genGetActiveContextLarge:inBlock:.

Fix baaaad bug in node:typeCompatibleWith:inliningInto:in: which was looking up the type
of the formal parameter in inlining in the target method, not the method being inlined!
(bug surfaced by previous fix).

Allow constant elimination for Const ifNil: [] ifNotNil: [], hence cleaning up uses of
characterTable in the Spur VMs.

Plugins:
ThreadedFFIPlugin:
- ExternalAddress now are taken correctly (nor as ByteArray or Alien, because they are
  different beasts).  
- allow pushing of pointers to any type (into a ByteArray, an ExternalAddress or an
  Alien), to allow passing parameters style int*, float*, etc.
- allow reading in memory to allow read chunks of ByteArray

Alien Plugins:
Fix missing primitive failure for Alien typeAt: 0 [put:].
Add word accessors to Alien.

Modified Paths:
--------------
    branches/Cog/nsspursrc/plugins/FilePlugin/FilePlugin.c
    branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c
    branches/Cog/nsspursrc/plugins/ZipPlugin/ZipPlugin.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cogitARMv5.c
    branches/Cog/nsspursrc/vm/cogitIA32.c
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstack64src/vm/gcc3x-interp.c
    branches/Cog/nsspurstack64src/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/scripts/revertIfEssentiallyUnchanged
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogitARMv5.c
    branches/Cog/spursistasrc/vm/cogitIA32.c
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogitARMv5.c
    branches/Cog/spursrc/vm/cogitIA32.c
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstack64src/vm/gcc3x-interp.c
    branches/Cog/spurstack64src/vm/interp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c
    branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
    branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
    branches/Cog/src/plugins/ZipPlugin/ZipPlugin.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogitARMv5.c
    branches/Cog/src/vm/cogitIA32.c
    branches/Cog/src/vm/cointerp.c
    branches/Cog/src/vm/cointerp.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerp.c
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

Property Changed:
----------------
    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h

Modified: branches/Cog/nsspursrc/plugins/FilePlugin/FilePlugin.c
===================================================================
--- branches/Cog/nsspursrc/plugins/FilePlugin/FilePlugin.c	2015-11-15 23:53:15 UTC (rev 3501)
+++ branches/Cog/nsspursrc/plugins/FilePlugin/FilePlugin.c	2015-11-24 22:58:27 UTC (rev 3502)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-eem.1448 uuid: 987a0908-6f37-437b-80a8-4db22a6e92bd
+	VMPluginCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
    from
-	FilePlugin VMMaker.oscog-eem.1448 uuid: 987a0908-6f37-437b-80a8-4db22a6e92bd
+	FilePlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
  */
-static char __buildInfo[] = "FilePlugin VMMaker.oscog-eem.1448 uuid: 987a0908-6f37-437b-80a8-4db22a6e92bd " __DATE__ ;
+static char __buildInfo[] = "FilePlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262 " __DATE__ ;
 
 
 
@@ -81,6 +81,7 @@
 EXPORT(sqInt) primitiveFileSetPosition(void);
 EXPORT(sqInt) primitiveFileSize(void);
 EXPORT(sqInt) primitiveFileStdioHandles(void);
+EXPORT(sqInt) primitiveFileSync(void);
 EXPORT(sqInt) primitiveFileTruncate(void);
 EXPORT(sqInt) primitiveFileWrite(void);
 EXPORT(sqInt) primitiveHasFileAccess(void);
@@ -180,9 +181,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"FilePlugin VMMaker.oscog-eem.1448 (i)"
+	"FilePlugin VMMaker.oscog-rmacnak.1532 (i)"
 #else
-	"FilePlugin VMMaker.oscog-eem.1448 (e)"
+	"FilePlugin VMMaker.oscog-rmacnak.1532 (e)"
 #endif
 ;
 static void * sCCPfn;
@@ -1100,7 +1101,32 @@
 	popthenPush(1, result);
 }
 
+	/* FilePlugin>>#primitiveFileSync */
+EXPORT(sqInt)
+primitiveFileSync(void)
+{
+    SQFile *file;
+    sqInt objectPointer;
 
+	/* begin fileValueOf: */
+	objectPointer = stackValue(0);
+	if (!((isBytes(objectPointer))
+		 && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) {
+		primitiveFail();
+		file = null;
+		goto l1;
+	}
+	file = firstIndexableField(objectPointer);
+l1:	/* end fileValueOf: */;
+	if (!(failed())) {
+		sqFileSync(file);
+	}
+	if (!(failed())) {
+		pop(1);
+	}
+}
+
+
 /*	ftruncate is not an ansi function so we have a macro to point to a
 	suitable platform implementation
  */
@@ -1309,6 +1335,7 @@
 	{"FilePlugin", "primitiveFileSetPosition\000\001", (void*)primitiveFileSetPosition},
 	{"FilePlugin", "primitiveFileSize\000\001", (void*)primitiveFileSize},
 	{"FilePlugin", "primitiveFileStdioHandles\000\377", (void*)primitiveFileStdioHandles},
+	{"FilePlugin", "primitiveFileSync\000\001", (void*)primitiveFileSync},
 	{"FilePlugin", "primitiveFileTruncate\000\001", (void*)primitiveFileTruncate},
 	{"FilePlugin", "primitiveFileWrite\000\001", (void*)primitiveFileWrite},
 	{"FilePlugin", "primitiveHasFileAccess\000\377", (void*)primitiveHasFileAccess},
@@ -1336,6 +1363,7 @@
 signed char primitiveFileRenameAccessorDepth = 1;
 signed char primitiveFileSetPositionAccessorDepth = 1;
 signed char primitiveFileSizeAccessorDepth = 1;
+signed char primitiveFileSyncAccessorDepth = 1;
 signed char primitiveFileTruncateAccessorDepth = 1;
 signed char primitiveFileWriteAccessorDepth = 1;
 

Modified: branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c
===================================================================
--- branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c	2015-11-15 23:53:15 UTC (rev 3501)
+++ branches/Cog/nsspursrc/plugins/IA32ABI/IA32ABI.c	2015-11-24 22:58:27 UTC (rev 3502)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0
+	VMPluginCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
    from
-	NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0
+	NewsqueakIA32ABIPlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
  */
-static char __buildInfo[] = "NewsqueakIA32ABIPlugin VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ;
+static char __buildInfo[] = "NewsqueakIA32ABIPlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262 " __DATE__ ;
 
 
 
@@ -98,6 +98,8 @@
 EXPORT(sqInt) primSignedLongLongAtPut(void);
 EXPORT(sqInt) primSignedShortAt(void);
 EXPORT(sqInt) primSignedShortAtPut(void);
+EXPORT(sqInt) primSignedWordAt(void);
+EXPORT(sqInt) primSignedWordAtPut(void);
 EXPORT(sqInt) primSizeField(void);
 EXPORT(sqInt) primSizeFieldPut(void);
 EXPORT(sqInt) primStrlenFromStartIndex(void);
@@ -111,6 +113,8 @@
 EXPORT(sqInt) primUnsignedLongLongAtPut(void);
 EXPORT(sqInt) primUnsignedShortAt(void);
 EXPORT(sqInt) primUnsignedShortAtPut(void);
+EXPORT(sqInt) primUnsignedWordAt(void);
+EXPORT(sqInt) primUnsignedWordAtPut(void);
 EXPORT(sqInt) primVarArgsCallOutDoubleReturn(void);
 EXPORT(sqInt) primVarArgsCallOutFloatReturn(void);
 EXPORT(sqInt) primVarArgsCallOutIntegralReturn(void);
@@ -223,9 +227,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"IA32ABI VMMaker.oscog-eem.1325 (i)"
+	"IA32ABI VMMaker.oscog-rmacnak.1532 (i)"
 #else
-	"IA32ABI VMMaker.oscog-eem.1325 (e)"
+	"IA32ABI VMMaker.oscog-rmacnak.1532 (e)"
 #endif
 ;
 
@@ -246,9 +250,17 @@
 
 /*	Answer if the indices byteIndex to byteIndex + length - 1 are valid
 	zero-relative indices into the rcvr.
-	N.B. This code only works when translated because asUnisgnedInteger only
-	works for non-negative
-	values. Hence the override in NewsqueakIA32ABIPluginSimulator. */
+	Beware! There be dragons here. The form below (byteIndex <= (dataSize abs
+	- length)) is used
+	because byteIndex + length could overflow, whereas (dataSize abs - length)
+	can't. We *don't* use the
+	obvious optimization
+	^dataSize = 0 or: [byteIndex asUnsignedInteger <= (dataSize abs - length)]
+	because with C's Usual Arithmetic Conversions
+	5. Otherwise, both operands are converted to the unsigned integer type
+	corresponding to the type of the operand with signed integer type.
+	means that the comparison will be unsigned, and if length > dataSize abs
+	then dataSize abs - length is large and positive. */
 
 	/* NewsqueakIA32ABIPlugin>>#index:length:inRange: */
 static sqInt
@@ -256,8 +268,10 @@
 {
     sqInt dataSize;
 
-	return (((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-	 || (((((usqInt)byteIndex)) + length) <= (abs(dataSize)));
+	dataSize = longAt(rcvr + BaseHeaderSize);
+	return (dataSize == 0)
+	 || ((byteIndex >= 0)
+	 && (byteIndex <= ((abs(dataSize)) - length)));
 }
 
 	/* NewsqueakIA32ABIPlugin>>#isAlien: */
@@ -465,7 +479,7 @@
 	if (mem == 0) {
 		return primitiveFailFor(PrimErrNoCMemory);
 	}
-	alien = instantiateClassindexableSize(classAlien(), 8);
+	alien = instantiateClassindexableSize(classAlien(), 2 * BytesPerOop);
 	if (failed()) {
 		return primitiveFailFor(PrimErrNoMemory);
 	}
@@ -704,7 +718,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     double  floatValue;
     sqInt rcvr;
     sqInt startAddr;
@@ -714,8 +727,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -742,7 +754,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     double floatValue;
     sqInt rcvr;
     sqInt startAddr;
@@ -760,8 +771,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -796,7 +806,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     float  floatValue;
     sqInt rcvr;
     sqInt startAddr;
@@ -806,8 +815,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -834,7 +842,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     float floatValue;
     sqInt rcvr;
     sqInt startAddr;
@@ -852,8 +859,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1097,7 +1103,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     signed char  value;
@@ -1108,8 +1113,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 1, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1136,7 +1140,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1151,8 +1154,7 @@
 	 || (value > 0x7F))) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 1, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1181,7 +1183,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1192,8 +1193,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1202,7 +1202,7 @@
 		return primitiveFailFor(PrimErrBadReceiver);
 	}
 	addr = startAddr + byteOffset;
-	value = longAt(addr);
+	value = long32At(addr);
 	valueOop = signed32BitIntegerFor(value);
 	return methodReturnValue(valueOop);
 }
@@ -1220,7 +1220,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1233,8 +1232,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1246,7 +1244,7 @@
 		return primitiveFailFor(PrimErrBadReceiver);
 	}
 	addr = startAddr + byteOffset;
-	longAtput(addr, value);
+	long32Atput(addr, value);
 	return methodReturnValue(valueOop);
 }
 
@@ -1263,7 +1261,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     long long signedlonglongvalue;
     long long *signedlonglongvaluePtr;
@@ -1277,8 +1274,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1306,7 +1302,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     long long signedlonglongvalue;
     long long *signedlonglongvaluePtr;
@@ -1323,8 +1318,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1354,7 +1348,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     short  value;
@@ -1365,8 +1358,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 2, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1393,7 +1385,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1408,8 +1399,7 @@
 	 || (value > 0x7FFF))) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 2, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1426,6 +1416,82 @@
 }
 
 
+/*	Answer the signed word starting at the given byte offset (little endian). */
+/*	<Alien> signedWordAt: index <Integer> ^<Integer>
+	<primitive: 'primSignedWordAt' error: errorCode module: 'IA32ABI'> */
+
+	/* NewsqueakIA32ABIPlugin>>#primSignedWordAt */
+EXPORT(sqInt)
+primSignedWordAt(void)
+{
+    sqInt addr;
+    sqInt byteOffset;
+    sqInt rcvr;
+    sqInt startAddr;
+    sqInt value;
+    sqInt valueOop;
+
+	byteOffset = (stackPositiveMachineIntegerValue(0)) - 1;
+	rcvr = stackObjectValue(1);
+	if (failed()) {
+		return primitiveFailFor(PrimErrBadArgument);
+	}
+	if (!(indexlengthinRange(byteOffset, BytesPerOop, rcvr))) {
+		return primitiveFailFor(PrimErrBadIndex);
+	}
+	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
+	? (rcvr + BaseHeaderSize) + BytesPerOop
+	: longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) {
+		return primitiveFailFor(PrimErrBadReceiver);
+	}
+	addr = startAddr + byteOffset;
+	value = longAt(addr);
+	valueOop = signedMachineIntegerValueOf(value);
+	return methodReturnValue(valueOop);
+}
+
+
+/*	Store a signed integer into the word starting at the given byte offset
+	(little endian).
+ */
+/*	<Alien> signedWordAt: index <Integer> put: value <Integer> ^<Integer>
+	<primitive: 'primSignedWordAtPut' error: errorCode module: 'IA32ABI'> */
+
+	/* NewsqueakIA32ABIPlugin>>#primSignedWordAtPut */
+EXPORT(sqInt)
+primSignedWordAtPut(void)
+{
+    sqInt addr;
+    sqInt byteOffset;
+    sqInt rcvr;
+    sqInt startAddr;
+    sqInt value;
+    sqInt valueOop;
+
+	valueOop = stackValue(0);
+	byteOffset = (stackPositiveMachineIntegerValue(1)) - 1;
+	rcvr = stackObjectValue(2);
+	value = signedMachineIntegerValueOf(valueOop);
+	if (failed()) {
+		return primitiveFailFor(PrimErrBadArgument);
+	}
+	if (!(indexlengthinRange(byteOffset, BytesPerOop, rcvr))) {
+		return primitiveFailFor(PrimErrBadIndex);
+	}
+	if (isOopImmutable(rcvr)) {
+		return primitiveFailFor(PrimErrNoModification);
+	}
+	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
+	? (rcvr + BaseHeaderSize) + BytesPerOop
+	: longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) {
+		return primitiveFailFor(PrimErrBadReceiver);
+	}
+	addr = startAddr + byteOffset;
+	longAtput(addr, value);
+	return methodReturnValue(valueOop);
+}
+
+
 /*	Answer the signed 32- or 64-bit integer comprising the size field (the
 	first 32- or 64-bit field).
  */
@@ -1489,7 +1555,6 @@
 primStrlenFromStartIndex(void)
 {
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt index;
     sqInt limit;
     char *ptr;
@@ -1500,8 +1565,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 1, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	limit = longAt(rcvr + BaseHeaderSize);
@@ -1536,7 +1600,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     char *ptr;
     sqInt rcvr;
 
@@ -1545,8 +1608,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, BytesPerOop, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	addr = (((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1587,7 +1649,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     unsigned char  value;
@@ -1598,8 +1659,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 1, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1626,7 +1686,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1640,8 +1699,7 @@
 	 || (value > 0xFF)) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 1) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 1, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1670,7 +1728,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1681,8 +1738,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1691,7 +1747,7 @@
 		return primitiveFailFor(PrimErrBadReceiver);
 	}
 	addr = startAddr + byteOffset;
-	value = longAt(addr);
+	value = long32At(addr);
 	valueOop = positive32BitIntegerFor(value);
 	return methodReturnValue(valueOop);
 }
@@ -1709,7 +1765,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1722,8 +1777,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 4) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 4, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1735,7 +1789,7 @@
 		return primitiveFailFor(PrimErrBadReceiver);
 	}
 	addr = startAddr + byteOffset;
-	longAtput(addr, value);
+	long32Atput(addr, value);
 	return methodReturnValue(valueOop);
 }
 
@@ -1752,7 +1806,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     unsigned long long unsignedlonglongvalue;
@@ -1766,8 +1819,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1796,7 +1848,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     unsigned long long unsignedlonglongvalue;
@@ -1813,8 +1864,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 8) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 8, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1844,7 +1894,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     unsigned short value;
@@ -1855,8 +1904,7 @@
 	if (failed()) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 2, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
@@ -1883,7 +1931,6 @@
 {
     sqInt addr;
     sqInt byteOffset;
-    sqInt dataSize;
     sqInt rcvr;
     sqInt startAddr;
     sqInt value;
@@ -1897,8 +1944,7 @@
 	 || (value > 0xFFFF)) {
 		return primitiveFailFor(PrimErrBadArgument);
 	}
-	if (!((((dataSize = longAt(rcvr + BaseHeaderSize))) == 0)
-		 || (((((usqInt)byteOffset)) + 2) <= (abs(dataSize))))) {
+	if (!(indexlengthinRange(byteOffset, 2, rcvr))) {
 		return primitiveFailFor(PrimErrBadIndex);
 	}
 	if (isOopImmutable(rcvr)) {
@@ -1915,6 +1961,86 @@
 }
 
 
+/*	Answer the unsigned word starting at the given byte offset (little
+	endian). 
+ */
+/*	<Alien> unsignedWordAt: index <Integer> ^<Integer>
+	<primitive: 'primUnsignedWordAt' error: errorCode module: 'IA32ABI'> */
+
+	/* NewsqueakIA32ABIPlugin>>#primUnsignedWordAt */
+EXPORT(sqInt)
+primUnsignedWordAt(void)
+{
+    sqInt addr;
+    sqInt byteOffset;
+    sqInt rcvr;
+    sqInt startAddr;
+    sqInt value;
+    sqInt valueOop;
+
+	byteOffset = (stackPositiveMachineIntegerValue(0)) - 1;
+	rcvr = stackObjectValue(1);
+	if (failed()) {
+		return primitiveFailFor(PrimErrBadArgument);
+	}
+	if (!(indexlengthinRange(byteOffset, BytesPerOop, rcvr))) {
+		return primitiveFailFor(PrimErrBadIndex);
+	}
+	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
+	? (rcvr + BaseHeaderSize) + BytesPerOop
+	: longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) {
+		return primitiveFailFor(PrimErrBadReceiver);
+	}
+	addr = startAddr + byteOffset;
+	value = longAt(addr);
+	valueOop = (BytesPerWord == 8
+		? positive64BitIntegerFor(value)
+		: positive32BitIntegerFor(value));
+	return methodReturnValue(valueOop);
+}
+
+
+/*	Store an unsigned integer into 32 bits starting at the given byte offset
+	(little endian).
+ */
+/*	<Alien> unsignedWordAt: index <Integer> put: value <Integer> ^<Integer>
+	<primitive: 'primUnsignedWordAtPut' error: errorCode module: 'IA32ABI'> */
+
+	/* NewsqueakIA32ABIPlugin>>#primUnsignedWordAtPut */
+EXPORT(sqInt)
+primUnsignedWordAtPut(void)
+{
+    sqInt addr;
+    sqInt byteOffset;
+    sqInt rcvr;
+    sqInt startAddr;
+    sqInt value;
+    sqInt valueOop;
+
+	valueOop = stackValue(0);
+	byteOffset = (stackPositiveMachineIntegerValue(1)) - 1;
+	rcvr = stackObjectValue(2);
+	value = positiveMachineIntegerValueOf(valueOop);
+	if (failed()) {
+		return primitiveFailFor(PrimErrBadArgument);
+	}
+	if (!(indexlengthinRange(byteOffset, BytesPerOop, rcvr))) {
+		return primitiveFailFor(PrimErrBadIndex);
+	}
+	if (isOopImmutable(rcvr)) {
+		return primitiveFailFor(PrimErrNoModification);
+	}
+	if (((startAddr = ((longAt(rcvr + BaseHeaderSize)) > 0
+	? (rcvr + BaseHeaderSize) + BytesPerOop
+	: longAt((rcvr + BaseHeaderSize) + BytesPerOop)))) == 0) {
+		return primitiveFailFor(PrimErrBadReceiver);
+	}
+	addr = startAddr + byteOffset;
+	longAtput(addr, value);
+	return methodReturnValue(valueOop);
+}
+
+
 /*	Call a foreign function that answers a double-precision floating-point
 	result in %f0
 	according to IA32-ish ABI rules. The primitive will have a signature of
@@ -2198,6 +2324,8 @@
 	{"IA32ABI", "primSignedLongLongAtPut\000\000", (void*)primSignedLongLongAtPut},
 	{"IA32ABI", "primSignedShortAt\000\000", (void*)primSignedShortAt},
 	{"IA32ABI", "primSignedShortAtPut\000\000", (void*)primSignedShortAtPut},
+	{"IA32ABI", "primSignedWordAt\000\000", (void*)primSignedWordAt},
+	{"IA32ABI", "primSignedWordAtPut\000\000", (void*)primSignedWordAtPut},
 	{"IA32ABI", "primSizeField\000\000", (void*)primSizeField},
 	{"IA32ABI", "primSizeFieldPut\000\000", (void*)primSizeFieldPut},
 	{"IA32ABI", "primStrlenFromStartIndex\000\000", (void*)primStrlenFromStartIndex},
@@ -2211,6 +2339,8 @@
 	{"IA32ABI", "primUnsignedLongLongAtPut\000\000", (void*)primUnsignedLongLongAtPut},
 	{"IA32ABI", "primUnsignedShortAt\000\000", (void*)primUnsignedShortAt},
 	{"IA32ABI", "primUnsignedShortAtPut\000\000", (void*)primUnsignedShortAtPut},
+	{"IA32ABI", "primUnsignedWordAt\000\000", (void*)primUnsignedWordAt},
+	{"IA32ABI", "primUnsignedWordAtPut\000\000", (void*)primUnsignedWordAtPut},
 	{"IA32ABI", "primVarArgsCallOutDoubleReturn\000\000", (void*)primVarArgsCallOutDoubleReturn},
 	{"IA32ABI", "primVarArgsCallOutFloatReturn\000\000", (void*)primVarArgsCallOutFloatReturn},
 	{"IA32ABI", "primVarArgsCallOutIntegralReturn\000\000", (void*)primVarArgsCallOutIntegralReturn},
@@ -2245,6 +2375,8 @@
 signed char primSignedLongLongAtPutAccessorDepth = 0;
 signed char primSignedShortAtAccessorDepth = 0;
 signed char primSignedShortAtPutAccessorDepth = 0;
+signed char primSignedWordAtAccessorDepth = 0;
+signed char primSignedWordAtPutAccessorDepth = 0;
 signed char primSizeFieldAccessorDepth = 0;
 signed char primSizeFieldPutAccessorDepth = 0;
 signed char primStrlenFromStartIndexAccessorDepth = 0;
@@ -2257,6 +2389,8 @@
 signed char primUnsignedLongLongAtPutAccessorDepth = 0;
 signed char primUnsignedShortAtAccessorDepth = 0;
 signed char primUnsignedShortAtPutAccessorDepth = 0;
+signed char primUnsignedWordAtAccessorDepth = 0;
+signed char primUnsignedWordAtPutAccessorDepth = 0;
 signed char primVarArgsCallOutDoubleReturnAccessorDepth = 0;
 signed char primVarArgsCallOutFloatReturnAccessorDepth = 0;
 signed char primVarArgsCallOutIntegralReturnAccessorDepth = 0;

Modified: branches/Cog/nsspursrc/plugins/ZipPlugin/ZipPlugin.c
===================================================================
--- branches/Cog/nsspursrc/plugins/ZipPlugin/ZipPlugin.c	2015-11-15 23:53:15 UTC (rev 3501)
+++ branches/Cog/nsspursrc/plugins/ZipPlugin/ZipPlugin.c	2015-11-24 22:58:27 UTC (rev 3502)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0
+	VMPluginCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
    from
-	DeflatePlugin VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0
+	DeflatePlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
  */
-static char __buildInfo[] = "DeflatePlugin VMMaker.oscog-eem.1325 uuid: a0bb0f7f-5e6e-48a7-bf73-fa5d135e06c0 " __DATE__ ;
+static char __buildInfo[] = "DeflatePlugin VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262 " __DATE__ ;
 
 
 
@@ -139,9 +139,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"ZipPlugin VMMaker.oscog-eem.1325 (i)"
+	"ZipPlugin VMMaker.oscog-rmacnak.1532 (i)"
 #else
-	"ZipPlugin VMMaker.oscog-eem.1325 (e)"
+	"ZipPlugin VMMaker.oscog-rmacnak.1532 (e)"
 #endif
 ;
 static sqInt readStreamInstSize;
@@ -1124,15 +1124,11 @@
     unsigned int *llBitLengths;
     unsigned int *llCodes;
     sqInt nBits;
-    sqInt nBits1;
-    sqInt nBits2;
     sqInt oop;
     sqInt rcvr;
     sqInt result;
     sqInt sum;
     sqInt value;
-    sqInt value1;
-    sqInt value2;
 
 	if (!((methodArgumentCount()) == 4)) {
 		return primitiveFail();
@@ -1278,15 +1274,13 @@
 				goto l7;
 			}
 			/* begin nextZipBits:put: */
-			nBits1 = llBitLengths[code];
-			value1 = llCodes[code];
-			if (!((value1 >= 0)
-				 && ((1 << nBits1) > value1))) {
+			if (!(((llCodes[code]) >= 0)
+				 && ((1 << (llBitLengths[code])) > (llCodes[code])))) {
 				primitiveFail();
 				goto l4;
 			}
-			zipBitBuf = zipBitBuf | (value1 << zipBitPos);
-			zipBitPos += nBits1;
+			zipBitBuf = zipBitBuf | ((llCodes[code]) << zipBitPos);
+			zipBitPos += llBitLengths[code];
 			while ((zipBitPos >= 8)
 			 && (zipPosition < zipCollectionSize)) {
 				zipCollection[zipPosition] = (zipBitBuf & 0xFF);
@@ -1331,15 +1325,13 @@
 				goto l7;
 			}
 			/* begin nextZipBits:put: */
-			nBits2 = distBitLengths[code];
-			value2 = distCodes[code];
-			if (!((value2 >= 0)
-				 && ((1 << nBits2) > value2))) {
+			if (!(((distCodes[code]) >= 0)
+				 && ((1 << (distBitLengths[code])) > (distCodes[code])))) {
 				primitiveFail();
 				goto l5;
 			}
-			zipBitBuf = zipBitBuf | (value2 << zipBitPos);
-			zipBitPos += nBits2;
+			zipBitBuf = zipBitBuf | ((distCodes[code]) << zipBitPos);
+			zipBitPos += distBitLengths[code];
 			while ((zipBitPos >= 8)
 			 && (zipPosition < zipCollectionSize)) {
 				zipCollection[zipPosition] = (zipBitBuf & 0xFF);
@@ -1414,13 +1406,9 @@
     unsigned int *llBitLengths;
     unsigned int *llCodes;
     sqInt nBits;
-    sqInt nBits1;
-    sqInt nBits2;
     sqInt oop;
     sqInt sum;
     sqInt value;
-    sqInt value1;
-    sqInt value2;
 
 	oop = fetchPointerofObject(0, literalStream);
 	litPos = fetchIntegerofObject(1, literalStream);
@@ -1525,15 +1513,13 @@
 				return primitiveFail();
 			}
 			/* begin nextZipBits:put: */
-			nBits1 = llBitLengths[code];
-			value1 = llCodes[code];
-			if (!((value1 >= 0)
-				 && ((1 << nBits1) > value1))) {
+			if (!(((llCodes[code]) >= 0)
+				 && ((1 << (llBitLengths[code])) > (llCodes[code])))) {
 				primitiveFail();
 				goto l4;
 			}
-			zipBitBuf = zipBitBuf | (value1 << zipBitPos);
-			zipBitPos += nBits1;
+			zipBitBuf = zipBitBuf | ((llCodes[code]) << zipBitPos);
+			zipBitPos += llBitLengths[code];
 			while ((zipBitPos >= 8)
 			 && (zipPosition < zipCollectionSize)) {
 				zipCollection[zipPosition] = (zipBitBuf & 0xFF);
@@ -1576,15 +1562,13 @@
 				return primitiveFail();
 			}
 			/* begin nextZipBits:put: */
-			nBits2 = distBitLengths[code];
-			value2 = distCodes[code];
-			if (!((value2 >= 0)
-				 && ((1 << nBits2) > value2))) {
+			if (!(((distCodes[code]) >= 0)
+				 && ((1 << (distBitLengths[code])) > (distCodes[code])))) {
 				primitiveFail();
 				goto l5;
 			}
-			zipBitBuf = zipBitBuf | (value2 << zipBitPos);
-			zipBitPos += nBits2;
+			zipBitBuf = zipBitBuf | ((distCodes[code]) << zipBitPos);
+			zipBitPos += distBitLengths[code];
 			while ((zipBitPos >= 8)
 			 && (zipPosition < zipCollectionSize)) {
 				zipCollection[zipPosition] = (zipBitBuf & 0xFF);

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2015-11-15 23:53:15 UTC (rev 3501)
+++ branches/Cog/nsspursrc/vm/cogit.h	2015-11-24 22:58:27 UTC (rev 3502)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1468 uuid: 2b6a8fd8-cddf-447d-bee4-11d53d2ef9bc
+	CCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-11-15 23:53:15 UTC (rev 3501)
+++ branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-11-24 22:58:27 UTC (rev 3502)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1468 uuid: 2b6a8fd8-cddf-447d-bee4-11d53d2ef9bc
+	CCodeGenerator VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1468 uuid: 2b6a8fd8-cddf-447d-bee4-11d53d2ef9bc
+	StackToRegisterMappingCogit VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1468 uuid: 2b6a8fd8-cddf-447d-bee4-11d53d2ef9bc " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-rmacnak.1532 uuid: 20303656-4854-4e5b-8bcd-eeff8cf5d262 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -114,17 +114,18 @@
 
 /*** Constants ***/
 #define AddCqR 95
-#define AddCwR 102
+#define AddCwR 103
 #define AddOpcode 4
-#define AddRdRd 109
+#define AddRdRd 110
 #define AddRR 89
 #define AL 14
 #define AlignmentNops 3
 #define AltBlockCreationBytecodeSize 3
 #define AltFirstSpecialSelector 80
+#define AltNumSpecialSelectors 32
 #define AndCqR 97
-#define AndCqRR 107
-#define AndCwR 104
+#define AndCqRR 108
+#define AndCwR 105
 #define AndOpcode 0
 #define AndRR 91
 #define AnnotationShift 5
@@ -159,17 +160,18 @@
 #define CMMaxUsageCount 7
 #define CMMethod 2
 #define CMOpenPIC 5
-#define CMPSMULL 120
+#define CMPSMULL 121
+#define CmpC32R 102
 #define CmpCqR 94
 #define CmpCwR 101
 #define CmpNotOpcode 11
 #define CmpOpcode 10
-#define CmpRdRd 108
+#define CmpRdRd 109
 #define CmpRR 88
 #define ConcreteIPReg 12
 #define ConcreteVarBaseReg 10
 #define ConstZero 1
-#define ConvertRRd 114
+#define ConvertRRd 115
 #define CS 2
 #define D0 0
 #define D1 1
@@ -182,7 +184,7 @@
 #define Debug DEBUGVM
 #define DisplacementMask 0x1F
 #define DisplacementX2N 0
-#define DivRdRd 112
+#define DivRdRd 113
 #define DPFPReg0 -21
 #define DPFPReg1 -22
 #define DPFPReg2 -23
@@ -292,7 +294,9 @@
 #define MFMethodFlagHasContextFlag 1
 #define MFMethodFlagIsBlockFlag 2
 #define MI 4
+#define MoveAbR 47
 #define MoveAwR 45
+#define MoveC32R 69
 #define MoveCqR 67
 #define MoveCwR 68
 #define MoveM16rR 55
@@ -301,6 +305,7 @@
 #define MoveMwrR 49
 #define MoveNotOpcode 15
 #define MoveOpcode 13
+#define MoveRAb 48
 #define MoveRAw 46
 #define MoveRdM64r 73
 #define MoveRdRd 71
@@ -311,9 +316,9 @@
 #define MoveRXwrR 52
 #define MoveXbrRR 65
 #define MoveXwrRR 51
-#define MSR 116
+#define MSR 117
 #define MULTIPLEBYTECODESETS 1
-#define MulRdRd 111
+#define MulRdRd 112
 #define NE 1
 #define NegateR 81
 #define NewspeakVM 1
@@ -326,9 +331,10 @@
 #define NumObjRefsInRuntime 0
 #define NumOopsPerNSC 6
 #define NumSendTrampolines 4
+#define NumSpecialSelectors 32
 #define NumTrampolines 72
 #define OrCqR 98
-#define OrCwR 105
+#define OrCwR 106
 #define OrOpcode 12
 #define OrRR 92
 #define PC 15
@@ -365,11 +371,11 @@
 #define SendNumArgsReg -6
 #define ShouldNotJIT -8
 #define SistaVM 0
-#define SMULL 115
+#define SMULL 116
 #define SmallContextSlots 22
 #define SP 13
 #define SPReg -2
-#define SqrtRd 113
+#define SqrtRd 114
 #define SSBaseOffset 1
 #define SSConstant 2
 #define SSRegister 3
@@ -377,9 +383,9 @@
 #define StackPointerIndex 2
 #define Stop 14
 #define SubCqR 96
-#define SubCwR 103
+#define SubCwR 104
 #define SubOpcode 2
-#define SubRdRd 110
+#define SubRdRd 111
 #define SubRR 90
 #define TempReg -4
 #define TstCqR 99
@@ -391,7 +397,7 @@
 #define VC 7
 #define VS 6
 #define XorCqR 100
-#define XorCwR 106
+#define XorCwR 107
 #define XorOpcode 1
 #define XorRR 93
 #define YoungSelectorInPIC -5
@@ -420,6 +426,7 @@
 static AbstractInstruction * NoDbgRegParms generateICacheFlush(AbstractInstruction * self_in_generateICacheFlush);
 static AbstractInstruction * NoDbgRegParms genWriteCResultIntoReg(AbstractInstruction * self_in_genWriteCResultIntoReg, sqInt abstractRegister);
 static AbstractInstruction * NoDbgRegParms getJmpTarget(AbstractInstruction * self_in_getJmpTarget);
+static sqInt NoDbgRegParms inCurrentCompilation(AbstractInstruction * self_in_inCurrentCompilation, sqInt operand);
 static AbstractInstruction * NoDbgRegParms initializeSharableLiteral(AbstractInstruction * self_in_initializeSharableLiteral, sqInt literal);
 static AbstractInstruction * NoDbgRegParms initializeUniqueLiteral(AbstractInstruction * self_in_initializeUniqueLiteral, sqInt literal);
 static sqInt NoDbgRegParms isAFixup(AbstractInstruction * self_in_isAFixup, void *fixupOrAddress);
@@ -428,6 +435,7 @@
 static sqInt NoDbgRegParms isLongJump(AbstractInstruction * self_in_isLongJump);
 static AbstractInstruction * NoDbgRegParms jmpTarget(AbstractInstruction * self_in_jmpTarget, AbstractInstruction *anAbstractInstruction);
 static usqInt NoDbgRegParms labelOffset(AbstractInstruction * self_in_labelOffset);
+static sqInt NoDbgRegParms literal32BeforeFollowingAddress(AbstractInstruction * self_in_literal32BeforeFollowingAddress, sqInt followingAddress);
 static sqInt NoDbgRegParms numCheckFeaturesOpcodes(AbstractInstruction * self_in_numCheckFeaturesOpcodes);
 static AbstractInstruction * NoDbgRegParms relocateJumpLongBeforeFollowingAddressby(AbstractInstruction * self_in_relocateJumpLongBeforeFollowingAddressby, sqInt pc, sqInt delta);
 static AbstractInstruction * NoDbgRegParms resolveJumpTarget(AbstractInstruction * self_in_resolveJumpTarget);
@@ -441,6 +449,7 @@
 static sqInt NoDbgRegParms andrnimmror(AbstractInstruction * self_in_andrnimmror, sqInt destReg, sqInt srcReg, sqInt immediate, sqInt rot);
 static sqInt NoDbgRegParms bicsrnimmror(AbstractInstruction * self_in_bicsrnimmror, sqInt destReg, sqInt srcReg, sqInt immediate, sqInt rot);
 static sqInt NoDbgRegParms bl(AbstractInstruction * self_in_bl, sqInt offset);
+static sqInt NoDbgRegParms byteReadsZeroExtend(AbstractInstruction * self_in_byteReadsZeroExtend);
 static sqInt NoDbgRegParms b(AbstractInstruction * self_in_b, sqInt offset);
 static sqInt NoDbgRegParms callerSavedRegisterMask(AbstractInstruction * self_in_callerSavedRegisterMask);
 static sqInt NoDbgRegParms callInstructionByteSize(AbstractInstruction * self_in_callInstructionByteSize);
@@ -458,6 +467,7 @@
 static AbstractInstruction * NoDbgRegParms concretizeFillFromWord(AbstractInstruction * self_in_concretizeFillFromWord);
 static usqInt NoDbgRegParms concretizeMSR(AbstractInstruction * self_in_concretizeMSR);
 static usqInt NoDbgRegParms concretizeSMULL(AbstractInstruction * self_in_concretizeSMULL);
+static sqInt NoDbgRegParms conditionIsNotNever(AbstractInstruction * self_in_conditionIsNotNever, sqInt instr);
 static sqInt NoDbgRegParms cResultRegister(AbstractInstruction * self_in_cResultRegister);
 static sqInt NoDbgRegParms dataOpTyperdrnrmlsr(AbstractInstruction * self_in_dataOpTyperdrnrmlsr, sqInt armOpcode, sqInt destReg, sqInt srcReg, sqInt addReg, sqInt shft);
 static void NoDbgRegParms dispatchConcretize(AbstractInstruction * self_in_dispatchConcretize);
@@ -471,8 +481,6 @@
 static sqInt NoDbgRegParms genLoadCStackPointers(AbstractInstruction * self_in_genLoadCStackPointers);
 static sqInt NoDbgRegParms genLoadStackPointers(AbstractInstruction * self_in_genLoadStackPointers);
 static AbstractInstruction * NoDbgRegParms genMulRR(AbstractInstruction * self_in_genMulRR, sqInt regSource, sqInt regDest);
-static sqInt NoDbgRegParms genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex);
-static sqInt NoDbgRegParms genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex);
 static AbstractInstruction * NoDbgRegParms genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs);
 static AbstractInstruction * NoDbgRegParms genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored);
 static sqInt NoDbgRegParms genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n);
@@ -489,12 +497,14 @@
 static sqInt NoDbgRegParms instructionIsBL(AbstractInstruction * self_in_instructionIsBL, sqInt instr);
 static sqInt NoDbgRegParms instructionIsBX(AbstractInstruction * self_in_instructionIsBX, sqInt instr);
 static sqInt NoDbgRegParms instructionIsB(AbstractInstruction * self_in_instructionIsB, sqInt instr);
+static sqInt NoDbgRegParms instructionIsCMP(AbstractInstruction * self_in_instructionIsCMP, sqInt instr);
+static sqInt NoDbgRegParms instructionIsLDR(AbstractInstruction * self_in_instructionIsLDR, sqInt instr);
 static sqInt NoDbgRegParms instructionIsOR(AbstractInstruction * self_in_instructionIsOR, sqInt instr);
 static sqInt NoDbgRegParms instructionIsPush(AbstractInstruction * self_in_instructionIsPush, sqInt instr);
 static sqInt NoDbgRegParms instructionSizeAt(AbstractInstruction * self_in_instructionSizeAt, sqInt pc);
 static sqInt NoDbgRegParms inverseOpcodeFor(AbstractInstruction * self_in_inverseOpcodeFor, sqInt armOpcode);
 static sqInt NoDbgRegParms isAddressRelativeToVarBase(AbstractInstruction * self_in_isAddressRelativeToVarBase, usqInt varAddress);
-static sqInt NoDbgRegParms isCallPreceedingReturnPC(AbstractInstruction * self_in_isCallPreceedingReturnPC, sqInt mcpc);
+static sqInt NoDbgRegParms isCallPrecedingReturnPC(AbstractInstruction * self_in_isCallPrecedingReturnPC, sqInt mcpc);
 static sqInt NoDbgRegParms isInImmediateJumpRange(AbstractInstruction * self_in_isInImmediateJumpRange, unsigned long operand);
 static sqInt NoDbgRegParms isJumpAt(AbstractInstruction * self_in_isJumpAt, sqInt pc);
 static sqInt NoDbgRegParms isPCRelativeValueLoad(AbstractInstruction * self_in_isPCRelativeValueLoad, unsigned int instr);
@@ -511,7 +521,6 @@
 static sqInt NoDbgRegParms ldrrnrm(AbstractInstruction * self_in_ldrrnrm, sqInt destReg, sqInt baseReg, sqInt offsetReg);
 static sqInt NoDbgRegParms leafCallStackPointerDelta(AbstractInstruction * self_in_leafCallStackPointerDelta);
 static sqInt NoDbgRegParms loadCwInto(AbstractInstruction * self_in_loadCwInto, sqInt destReg);
-static sqInt NoDbgRegParms loadLiteralByteSize(AbstractInstruction * self_in_loadLiteralByteSize);
 static sqInt NoDbgRegParms loadPICLiteralByteSize(AbstractInstruction * self_in_loadPICLiteralByteSize);
 static sqInt NoDbgRegParms machineCodeBytes(AbstractInstruction * self_in_machineCodeBytes);
 static sqInt NoDbgRegParms machineCodeWords(AbstractInstruction * self_in_machineCodeWords);
@@ -529,6 +538,7 @@
 static sqInt NoDbgRegParms mvnimmror(AbstractInstruction * self_in_mvnimmror, sqInt destReg, sqInt immediate8bitValue, sqInt rot);
 static AbstractInstruction * NoDbgRegParms nopsFromto(AbstractInstruction * self_in_nopsFromto, sqInt startAddr, sqInt endAddr);
 static sqInt NoDbgRegParms numICacheFlushOpcodes(AbstractInstruction * self_in_numICacheFlushOpcodes);
+static sqInt NoDbgRegParms numIntRegArgs(AbstractInstruction * self_in_numIntRegArgs);
 static sqInt NoDbgRegParms orrimmror(AbstractInstruction * self_in_orrimmror, sqInt destReg, sqInt immediate8bitValue, sqInt rot);
 static AbstractInstruction * NoDbgRegParms padIfPossibleWithNopsFromto(AbstractInstruction * self_in_padIfPossibleWithNopsFromto, sqInt startAddr, sqInt endAddr);
 static sqInt NoDbgRegParms popR(AbstractInstruction * self_in_popR, sqInt dstReg);
@@ -538,6 +548,8 @@
 static sqInt NoDbgRegParms rewriteCallAttarget(AbstractInstruction * self_in_rewriteCallAttarget, usqInt callSiteReturnAddress, usqInt callTargetAddress);
 static sqInt NoDbgRegParms rewriteCallFullAttarget(AbstractInstruction * self_in_rewriteCallFullAttarget, sqInt callSiteReturnAddress, sqInt callTargetAddress);
 static sqInt NoDbgRegParms rewriteJumpFullAttarget(AbstractInstruction * self_in_rewriteJumpFullAttarget, sqInt callSiteReturnAddress, sqInt callTargetAddress);
+static sqInt NoDbgRegParms rewriteJumpLongAttarget(AbstractInstruction * self_in_rewriteJumpLongAttarget, usqInt callSiteReturnAddress, usqInt callTargetAddress);
+static sqInt NoDbgRegParms rewriteTransferAttarget(AbstractInstruction * self_in_rewriteTransferAttarget, usqInt callSiteReturnAddress, usqInt callTargetAddress);
 static sqInt NoDbgRegParms setsConditionCodesFor(AbstractInstruction * self_in_setsConditionCodesFor, sqInt aConditionalJumpOpcode);
 static sqInt NoDbgRegParms shiftSetsConditionCodesFor(AbstractInstruction * self_in_shiftSetsConditionCodesFor, sqInt aConditionalJumpOpcode);
 static sqInt NoDbgRegParms stackPageInterruptHeadroomBytes(AbstractInstruction * self_in_stackPageInterruptHeadroomBytes);
@@ -605,15 +617,15 @@
 static void NoDbgRegParms compileBlockEntry(BlockStart *blockStart);
 static void NoDbgRegParms compileCallFornumArgsargargargargresultRegsaveRegs(void *aRoutine, sqInt numArgs, sqInt regOrConst0, sqInt regOrConst1, sqInt regOrConst2, sqInt regOrConst3, sqInt resultRegOrNil, sqInt saveRegs);
 static AbstractInstruction * compileCPICEntry(void);
-static sqInt NoDbgRegParms compileCPICCase0Case1MethodtagisMNUCasenumArgs(CogMethod *cPIC, CogMethod *case0CogMethod, sqInt case1Method, sqInt case1Tag, sqInt isMNUCase, sqInt numArgs);
 static void compileEntry(void);
 static sqInt compileMethodBody(void);
-static sqInt NoDbgRegParms compileMNUCPICmethodOperandnumArgs(CogMethod *cPIC, sqInt methodOperand, sqInt numArgs);
 static sqInt NoDbgRegParms compilePICAbort(sqInt numArgs);
 static sqInt compilePrimitive(void);
 static void NoDbgRegParms compileTrampolineFornumArgsargargargargsaveRegspushLinkRegresultReg(void *aRoutine, sqInt numArgs, sqInt regOrConst0, sqInt regOrConst1, sqInt regOrConst2, sqInt regOrConst3, sqInt saveRegs, sqInt pushLinkReg, sqInt resultRegOrNil);
 static void computeEntryOffsets(void);
 static void computeMaximumSizes(void);
+static sqInt NoDbgRegParms configureCPICCase0Case1MethodtagisMNUCasenumArgsdelta(CogMethod *cPIC, CogMethod *case0CogMethod, sqInt case1Method, sqInt case1Tag, sqInt isMNUCase, sqInt numArgs, sqInt addrDelta);
+static sqInt NoDbgRegParms configureMNUCPICmethodOperandnumArgsdelta(CogMethod *cPIC, sqInt methodOperand, sqInt numArgs, sqInt addrDelta);
 static sqInt NoDbgRegParms cPICHasForwardedClass(CogMethod *cPIC);
 static sqInt NoDbgRegParms cPICHasFreedTargets(CogMethod *cPIC);
 static sqInt cPICPrototypeCaseOffset(void);
@@ -655,6 +667,7 @@
 static sqInt genGetLeafCallStackPointer(void);
 static sqInt NoDbgRegParms genInnerPICAbortTrampoline(char *name);
 static sqInt genLoadCStackPointersForPrimCall(void);
+static void NoDbgRegParms genLoadInlineCache(sqInt selectorIndex);
 static sqInt genNonLocalReturnTrampoline(void);
 static sqInt NoDbgRegParms genNSSendTrampolineFornumArgsenclosingObjectCheckcalled(void *aRoutine, sqInt numArgs, sqInt eoCheckFlag, char *aString);
 static sqInt NoDbgRegParms genReturnTrampolineForcalledarg(void *aRoutine, char *aString, sqInt regOrConst0);
@@ -711,6 +724,7 @@
 extern void markAndTraceMachineCodeOfMarkedMethods(void);
 static void markAndTraceObjectReferencesInGeneratedRuntime(void);
 static sqInt NoDbgRegParms markAndTraceOrFreeCogMethodfirstVisit(CogMethod *cogMethod, sqInt firstVisit);
+static sqInt NoDbgRegParms markAndTraceOrFreePICTargetin(sqInt entryPoint, CogMethod *cPIC);
 static sqInt NoDbgRegParms markLiteralsAndUnlinkIfUnmarkedSendpcmethod(sqInt annotation, char *mcpc, sqInt cogMethod);
 static sqInt NoDbgRegParms markLiteralspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod);
 extern void markMethodAndReferents(CogBlockMethod *aCogMethod);
@@ -730,7 +744,7 @@
 static sqInt NoDbgRegParms needsFrameNever(sqInt stackDelta);
 static sqInt NoDbgRegParms noAssertMethodClassAssociationOf(sqInt methodPointer);
 static sqInt noCogMethodsMaximallyMarked(void);
-static sqInt NoDbgRegParms noTargetsFreeInClosedPIC(CogMethod *cPIC);
+static sqInt NoDbgRegParms noTargetsFreeInClosedPIC(sqInt cPIC);
 static sqInt NoDbgRegParms outputInstructionsAt(sqInt startAddress);
 static sqInt NoDbgRegParms outputInstructionsForGeneratedRuntimeAt(sqInt startAddress);
 static AbstractInstruction * NoDbgRegParms gPopR(sqInt reg);
@@ -738,6 +752,7 @@
 extern sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver);
 static sqInt picAbortDiscriminatorValue(void);
 static sqInt picInterpretAbortOffset(void);
+static AbstractInstruction * previousInstruction(void);
 static PrimitiveDescriptor * primitiveGeneratorOrNil(void);
 extern void printCogMethodFor(void *address);
 extern void printTrampolineTable(void);
@@ -756,6 +771,8 @@
 static void NoDbgRegParms relocateCallsInClosedPIC(CogMethod *cPIC);
 static sqInt NoDbgRegParms relocateIfCallOrMethodReferencemcpcdelta(sqInt annotation, char *mcpc, sqInt delta);
 static sqInt NoDbgRegParms remapIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr);
+static sqInt NoDbgRegParms remapMaybeObjRefInClosedPICAt(sqInt mcpc);
+static void NoDbgRegParms rewriteCPICCaseAttagobjReftarget(sqInt followingAddress, sqInt newTag, sqInt newObjRef, sqInt newTarget);
 static AbstractInstruction * NoDbgRegParms gSubCwR(sqInt wordConstant, sqInt reg);
 static sqInt scanForCleanBlocks(void);
 extern void setBreakMethod(sqInt anObj);
@@ -777,8 +794,6 @@
 extern void unlinkSendsOfisMNUSelector(sqInt selector, sqInt isMNUSelector);
 extern void unlinkSendsToFree(void);
 extern void unlinkSendsToandFreeIf(sqInt targetMethodObject, sqInt freeIfTrue);
-static sqInt NoDbgRegParms updateMaybeClassRefInClosedPICAt(sqInt mcpc);
-static sqInt NoDbgRegParms updateMaybeObjRefInClosedPICAt(sqInt mcpc);
 static AbstractInstruction * NoDbgRegParms gXorCwR(sqInt wordConstant, sqInt reg);
 static void zeroOpcodeIndex(void);
 extern void addAllToYoungReferrers(void);
@@ -826,15 +841,11 @@
 static sqInt NoDbgRegParms genConvertIntegerToSmallIntegerInReg(sqInt reg);
 static void NoDbgRegParms genConvertSmallIntegerToCharacterInReg(sqInt reg);
 static sqInt NoDbgRegParms genConvertSmallIntegerToIntegerInReg(sqInt reg);
-static sqInt NoDbgRegParms genCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(sqInt bcpc, sqInt numArgs, sqInt numCopied, sqInt ctxtNumArgs, sqInt isLargeCtxt, sqInt isInBlock);
 static sqInt NoDbgRegParms genFetchIndexRegisterfrominto(sqInt indexReg, sqInt tableObj, sqInt destReg);
-static sqInt NoDbgRegParms genGetActiveContextLargeinBlock(sqInt isLarge, sqInt isInBlock);
-static AbstractInstruction * NoDbgRegParms genGetClassTagOfintoscratchReg(sqInt instReg, sqInt destReg, sqInt scratchReg);
 static sqInt NoDbgRegParms genGetHashFieldNonImmOfasSmallIntegerInto(sqInt instReg, sqInt destReg);
 static sqInt NoDbgRegParms genGetHashFieldNonImmOfinto(sqInt instReg, sqInt destReg);
 static AbstractInstruction * NoDbgRegParms genGetInlineCacheClassTagFromintoforEntry(sqInt sourceReg, sqInt destReg, sqInt forEntry);
 static sqInt NoDbgRegParms genGetNumBytesOfinto(sqInt srcReg, sqInt destReg);
-static sqInt NoDbgRegParms genGetNumSlotsOfinto(sqInt srcReg, sqInt destReg);
 static sqInt NoDbgRegParms genGetOverflowSlotsOfinto(sqInt srcReg, sqInt destReg);
 static sqInt NoDbgRegParms genInnerPrimitiveAtPut(sqInt retNoffset);
 static sqInt NoDbgRegParms genInnerPrimitiveAt(sqInt retNoffset);
@@ -848,14 +859,12 @@
 static AbstractInstruction * NoDbgRegParms genJumpNotSmallIntegerInScratchReg(sqInt aRegister);
 static AbstractInstruction * NoDbgRegParms genJumpNotSmallInteger(sqInt aRegister);
 static AbstractInstruction * NoDbgRegParms genJumpSmallInteger(sqInt aRegister);
-static sqInt NoDbgRegParms genNewArrayOfSizeinitialized(sqInt size, sqInt initialized);
-static sqInt NoDbgRegParms genNoPopCreateClosureAtnumArgsnumCopiedcontextNumArgslargeinBlock(sqInt bcpc, sqInt numArgs, sqInt numCopied, sqInt ctxtNumArgs, sqInt isLargeCtxt, sqInt isInBlock);

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list