[Vm-dev] [commit][3374] CogVm source as per VMMaker.oscog-eem.1349

Esteban Lorenzano estebanlm at gmail.com
Fri Jun 12 07:43:15 UTC 2015


Hi Eliot,

> On 12 Jun 2015, at 01:02, commits at squeakvm.org wrote:
> 
> 
> Revision: 3374
> Author:   eliot
> Date:     2015-06-11 16:02:50 -0700 (Thu, 11 Jun 2015)
> Log Message:
> -----------
> CogVm source as per VMMaker.oscog-eem.1349
> 
> Slang:
> Modify prototype output so that non-static functions are declared as extern.
> This to try and cure Cog crashes on compilers such as clang 3.4.

this change is breaking generation, because it conflicts with: 

VMPluginCodeGenerator>>#preDeclareInterpreterProxyOn:
	…
	aStream nextPutAll: '#else /* !defined(SQUEAK_BUILTIN_PLUGIN) */'.
	pluginFuncs do:
		[:tMethod|
		self withOptionalVerbiageFor: tMethod selector
			on: aStream
			do: [aStream cr; nextPutAll: 'extern '.
				tMethod static: false; export: false; emitCFunctionPrototype: aStream generator: self.
				aStream nextPut: $;]
			ifOptionalDo:
				[aStream cr; nextPutAll: '# define '.
				 (TSendNode new
					setSelector: tMethod selector
						receiver: (TVariableNode new setName: 'interpreterProxy')
							arguments: (tMethod args collect: [:a| TVariableNode new setName: a]))
					emitCCodeAsArgumentOn: aStream
						level: 0
							generator: self.
				 aStream nextPutAll: ' 0']].
	aStream cr; nextPutAll: 'extern'.
	aStream cr; nextPutAll: '#endif'; cr


and it generates something like this (in ZipPlugin.c)

#else /* !defined(SQUEAK_BUILTIN_PLUGIN) */
extern extern sqInt byteSizeOf(sqInt oop);
extern extern sqInt failed(void);
extern extern sqInt fetchClassOf(sqInt oop);
extern extern sqInt fetchIntegerofObject(sqInt fieldIndex, sqInt objectPointer);
extern extern sqInt fetchPointerofObject(sqInt index, sqInt oop);
extern extern void * firstIndexableField(sqInt oop);
extern extern sqInt instanceSizeOf(sqInt classObj);
extern extern sqInt isBytes(sqInt oop);
extern extern sqInt isPointers(sqInt oop);
extern extern sqInt isWords(sqInt oop);
extern extern sqInt methodArgumentCount(void);
extern extern sqInt nilObject(void);
extern extern sqInt pop(sqInt nItems);
extern extern sqInt popthenPush(sqInt nItems, sqInt oop);
extern extern sqInt positive32BitIntegerFor(sqInt integerValue);
extern extern usqInt positive32BitValueOf(sqInt oop);
extern extern sqInt primitiveFail(void);
extern extern sqInt pushBool(sqInt trueOrFalse);
extern extern sqInt pushInteger(sqInt integerValue);
extern extern sqInt slotSizeOf(sqInt oop);
extern extern sqInt stackIntegerValue(sqInt offset);
extern extern sqInt stackObjectValue(sqInt offset);
extern extern sqInt stackValue(sqInt offset);
extern extern sqInt storeIntegerofObjectwithValue(sqInt index, sqInt oop, sqInt integer);
extern extern sqInt superclassOf(sqInt classPointer);
extern
#endif

there is something I should take into account?

cheers, 
Esteban

ps: btw, I’m using clang to compile in mac since a lot of time and I do not have problems, yes I needed to tweak a flag here and there, but not much more… of course, I use “Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)”, so is probably not the same...

> 
> Spur:
> Remember to count shrink requests
> 
> Cogit:
> Changes for in-progress CogOutOfLineLiteralsARMCompiler code generator.
> 
> Move annotations into instructions, where they sit more naturally anyway.
> But doing so makes it trivial to move annotations from the instructions
> referencing out-of-line literals to the literals themselves.  Hence nuke
> CogInstructionAnnotation.
> 
> Fix isAnInstruction for labels (methodLabel) and use it to guard
> addressIsInCurrentCompilation: calls where a label is involved.
> 
> Move the assignment of maxSize out of computeMaximumSize and into
> computeMaximumSizes for concision.
> 
> ARM Cogit:
> Introduce some more abstractions for rotateable constants so that it is easier
> to relate computeMaximumSize and dispatchConcetize in CogARMCompiler.  Provide
> more opcode names and use them, and use inverseOpcodeFor: to calculate the
> inverse opcode when the inverse constant is used.
> 
> Revise ARM getDefaultCogCodeSize given better estimates of relative code sizes.
> Simplify isPICDependent to eliminate Calls, which are not pc-dependent (since
> they always call out of the current compilaiton).
> 
> Fix bugs in computeMaximumSize with AddCqR and
> SubCqR, and a bad slip in concretizePushCq.
> 
> Nuke the unused BICCqR opcode.  Add class vars to
> name all the opcodes passed to concretizeDataOperationCwR:.
> 
> Make all the usages of flushICacheFrom:to: work with start-address to
> byte-after-end-address. Irrelevant to x86, perfect for ARM, matches most of
> the usage already in place.
> 
> Sista Cogit:
> Added support for jumpOrPopIfNotInstanceOf: in cogit's scanner.
> 
> Unix: restore the SCCS revision after the version number in -version output.
> 
> Modified Paths:
> --------------
>    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/platforms/unix/vm/sqUnixMain.c
>    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/vm/cogit.h
>    branches/Cog/src/vm/cogitARMv5.c
>    branches/Cog/src/vm/cogitIA32.c
> 
> Property Changed:
> ----------------
>    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
> 
> Modified: branches/Cog/nsspursrc/vm/cogit.h
> ===================================================================
> --- branches/Cog/nsspursrc/vm/cogit.h	2015-06-06 17:07:13 UTC (rev 3373)
> +++ branches/Cog/nsspursrc/vm/cogit.h	2015-06-11 23:02:50 UTC (rev 3374)
> @@ -1,5 +1,5 @@
> /* Automatically generated by
> -	CCodeGenerator VMMaker.oscog-eem.1339 uuid: 022ddfcc-a8f6-422b-8a81-edffae18ebe6
> +	CCodeGenerator VMMaker.oscog-eem.1349 uuid: c4bacc64-8f85-425f-b5b9-47504c99cabe
>  */
> 
> 
> @@ -20,77 +20,77 @@
> # define NeverInline /*empty*/
> #endif
> 
> -sqInt abortOffset(void);
> -void addCogMethodsToHeapMap(void);
> -sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> -void callCogCodePopReceiver(void);
> -void callCogCodePopReceiverAndClassRegs(void);
> -sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
> -sqInt ceSICMiss(sqInt receiver);
> -void checkAssertsEnabledInCogit(void);
> -sqInt checkIntegrityOfObjectReferencesInCode(sqInt gcModes);
> -char * codeEntryFor(char *address);
> -char * codeEntryNameFor(char *address);
> -sqInt cogCodeBase(void);
> -sqInt cogCodeConstituents(void);
> -void cogitPostGCAction(sqInt gcMode);
> -sqInt cogMethodDoesntLookKosher(CogMethod *cogMethod);
> -CogMethod * cogMNUPICSelectorreceivermethodOperandnumArgs(sqInt selector, sqInt rcvr, sqInt methodOperand, sqInt numArgs);
> -CogMethod * cogselector(sqInt aMethodObj, sqInt aSelectorOop);
> -void compactCogCompiledCode(void);
> -sqInt defaultCogCodeSize(void);
> -void enterCogCodePopReceiver(void);
> -CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
> -void followForwardedLiteralsIn(CogMethod *cogMethod);
> -void followForwardedMethods(void);
> -void freeUnmarkedMachineCode(void);
> -void initializeCodeZoneFromupTo(sqInt startAddress, sqInt endAddress);
> -sqInt isPCWithinMethodZone(void *address);
> -sqInt isSendReturnPC(sqInt retpc);
> -void linkNSSendCacheclassTagenclosingObjecttargetcaller(NSSendCache *nsSendCache, sqInt classTag, sqInt enclosingObject, CogMethod *targetMethod, CogMethod *callingMethod);
> -void linkSendAtintooffsetreceiver(sqInt callSiteReturnAddress, CogMethod *sendingMethod, CogMethod *targetMethod, sqInt theEntryOffset, sqInt receiver);
> -void mapObjectReferencesInMachineCode(sqInt gcMode);
> -void markAndTraceMachineCodeOfMarkedMethods(void);
> -void markMethodAndReferents(CogBlockMethod *aCogMethod);
> -usqInt maxCogMethodAddress(void);
> -usqInt mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> -sqInt minCogMethodAddress(void);
> -sqInt mnuOffset(void);
> -sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver);
> -sqInt pcisWithinMethod(char *address, CogMethod *cogMethod);
> -void printCogMethodFor(void *address);
> -void printTrampolineTable(void);
> -sqInt recordPrimTraceFunc(void);
> -void setBreakMethod(sqInt anObj);
> -void setPostCompileHook(void (*aFunction)(CogMethod *, void *));
> -void setSelectorOfto(CogMethod *cogMethod, sqInt aSelectorOop);
> -sqInt traceLinkedSendOffset(void);
> -void unlinkAllSends(void);
> -void unlinkSendsLinkedForInvalidClasses(void);
> -void unlinkSendsOfisMNUSelector(sqInt selector, sqInt isMNUSelector);
> -void unlinkSendsToFree(void);
> -void unlinkSendsToandFreeIf(sqInt targetMethodObject, sqInt freeIfTrue);
> -void addAllToYoungReferrers(void);
> -void freeMethod(CogMethod *cogMethod);
> -CogMethod * methodFor(void *address);
> -sqInt numMethodsOfType(sqInt cogMethodType);
> -void printCogMethods(void);
> -void printCogMethodsOfType(sqInt cmType);
> -void printCogMethodsWithMethod(sqInt methodOop);
> -void printCogMethodsWithPrimitive(sqInt primIdx);
> -void printCogMethodsWithSelector(sqInt selectorOop);
> -void printCogYoungReferrers(void);
> -void printOpenPICList(void);
> -char * whereIsMaybeCodeThing(sqInt anOop);
> -sqInt numRegArgs(void);
> -sqInt genQuickReturnConst(void);
> -sqInt genQuickReturnInstVar(void);
> -sqInt genQuickReturnSelf(void);
> -void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
> -void rewritePrimInvocationInto(CogMethod *cogMethod, void (*primFunctionPointer)(void));
> -void voidCogCompiledCode(void);
> -void callCogCodePopReceiverArg0Regs(void);
> -void callCogCodePopReceiverArg1Arg0Regs(void);
> +extern sqInt abortOffset(void);
> +extern void addCogMethodsToHeapMap(void);
> +extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> +extern void callCogCodePopReceiver(void);
> +extern void callCogCodePopReceiverAndClassRegs(void);
> +extern sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
> +extern sqInt ceSICMiss(sqInt receiver);
> +extern void checkAssertsEnabledInCogit(void);
> +extern sqInt checkIntegrityOfObjectReferencesInCode(sqInt gcModes);
> +extern char * codeEntryFor(char *address);
> +extern char * codeEntryNameFor(char *address);
> +extern sqInt cogCodeBase(void);
> +extern sqInt cogCodeConstituents(void);
> +extern void cogitPostGCAction(sqInt gcMode);
> +extern sqInt cogMethodDoesntLookKosher(CogMethod *cogMethod);
> +extern CogMethod * cogMNUPICSelectorreceivermethodOperandnumArgs(sqInt selector, sqInt rcvr, sqInt methodOperand, sqInt numArgs);
> +extern CogMethod * cogselector(sqInt aMethodObj, sqInt aSelectorOop);
> +extern void compactCogCompiledCode(void);
> +extern sqInt defaultCogCodeSize(void);
> +extern void enterCogCodePopReceiver(void);
> +extern CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
> +extern void followForwardedLiteralsIn(CogMethod *cogMethod);
> +extern void followForwardedMethods(void);
> +extern void freeUnmarkedMachineCode(void);
> +extern void initializeCodeZoneFromupTo(sqInt startAddress, sqInt endAddress);
> +extern sqInt isPCWithinMethodZone(void *address);
> +extern sqInt isSendReturnPC(sqInt retpc);
> +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);
> +extern void mapObjectReferencesInMachineCode(sqInt gcMode);
> +extern void markAndTraceMachineCodeOfMarkedMethods(void);
> +extern void markMethodAndReferents(CogBlockMethod *aCogMethod);
> +extern usqInt maxCogMethodAddress(void);
> +extern usqInt mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> +extern sqInt minCogMethodAddress(void);
> +extern sqInt mnuOffset(void);
> +extern sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver);
> +extern sqInt pcisWithinMethod(char *address, CogMethod *cogMethod);
> +extern void printCogMethodFor(void *address);
> +extern void printTrampolineTable(void);
> +extern sqInt recordPrimTraceFunc(void);
> +extern void setBreakMethod(sqInt anObj);
> +extern void setPostCompileHook(void (*aFunction)(CogMethod *, void *));
> +extern void setSelectorOfto(CogMethod *cogMethod, sqInt aSelectorOop);
> +extern sqInt traceLinkedSendOffset(void);
> +extern void unlinkAllSends(void);
> +extern void unlinkSendsLinkedForInvalidClasses(void);
> +extern void unlinkSendsOfisMNUSelector(sqInt selector, sqInt isMNUSelector);
> +extern void unlinkSendsToFree(void);
> +extern void unlinkSendsToandFreeIf(sqInt targetMethodObject, sqInt freeIfTrue);
> +extern void addAllToYoungReferrers(void);
> +extern void freeMethod(CogMethod *cogMethod);
> +extern CogMethod * methodFor(void *address);
> +extern sqInt numMethodsOfType(sqInt cogMethodType);
> +extern void printCogMethods(void);
> +extern void printCogMethodsOfType(sqInt cmType);
> +extern void printCogMethodsWithMethod(sqInt methodOop);
> +extern void printCogMethodsWithPrimitive(sqInt primIdx);
> +extern void printCogMethodsWithSelector(sqInt selectorOop);
> +extern void printCogYoungReferrers(void);
> +extern void printOpenPICList(void);
> +extern char * whereIsMaybeCodeThing(sqInt anOop);
> +extern sqInt numRegArgs(void);
> +extern sqInt genQuickReturnConst(void);
> +extern sqInt genQuickReturnInstVar(void);
> +extern sqInt genQuickReturnSelf(void);
> +extern void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
> +extern void rewritePrimInvocationInto(CogMethod *cogMethod, void (*primFunctionPointer)(void));
> +extern void voidCogCompiledCode(void);
> +extern void callCogCodePopReceiverArg0Regs(void);
> +extern void callCogCodePopReceiverArg1Arg0Regs(void);
> 
> 
> /*** Global Variables ***/
> 
> Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c
> ===================================================================
> --- branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-06-06 17:07:13 UTC (rev 3373)
> +++ branches/Cog/nsspursrc/vm/cogitARMv5.c	2015-06-11 23:02:50 UTC (rev 3374)
> @@ -1,9 +1,9 @@
> /* Automatically generated by
> -	CCodeGenerator VMMaker.oscog-eem.1339 uuid: 022ddfcc-a8f6-422b-8a81-edffae18ebe6
> +	CCodeGenerator VMMaker.oscog-eem.1349 uuid: c4bacc64-8f85-425f-b5b9-47504c99cabe
>    from
> -	StackToRegisterMappingCogit VMMaker.oscog-eem.1339 uuid: 022ddfcc-a8f6-422b-8a81-edffae18ebe6
> +	StackToRegisterMappingCogit VMMaker.oscog-eem.1349 uuid: c4bacc64-8f85-425f-b5b9-47504c99cabe
>  */
> -static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1339 uuid: 022ddfcc-a8f6-422b-8a81-edffae18ebe6 " __DATE__ ;
> +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1349 uuid: c4bacc64-8f85-425f-b5b9-47504c99cabe " __DATE__ ;
> char *__cogitBuildInfo = __buildInfo;
> 
> 
> @@ -25,6 +25,7 @@
> 	unsigned char	opcode;
> 	unsigned char	machineCodeSize;
> 	unsigned char	maxSize;
> +	unsigned char	annotation;
> 	unsigned char	conditionOrNil;
> 	unsigned long		operands [3];
> 	unsigned long	address;
> @@ -73,14 +74,6 @@
> 
> 
> typedef struct {
> -	sqInt	annotation;
> -	AbstractInstruction *instruction;
> - } InstructionAnnotation;
> -
> -#define CogInstructionAnnotation InstructionAnnotation
> -
> -
> -typedef struct {
> 	sqInt (*primitiveGenerator )(void);
> 	sqInt	primNumArgs;
> 	sqInt (*enabled )(sqInt);
> @@ -117,27 +110,26 @@
> 
> 
> /*** Constants ***/
> -#define AddCqR 95
> -#define AddCwR 102
> +#define AddCqR 96
> +#define AddCwR 104
> #define AddOpcode 4
> -#define AddRdRd 110
> -#define AddRR 88
> +#define AddRdRd 112
> +#define AddRR 89
> #define AL 14
> -#define AlignmentNops 2
> +#define AlignmentNops 3
> #define AltBlockCreationBytecodeSize 3
> #define AltFirstSpecialSelector 80
> -#define AndCqR 97
> -#define AndCqRR 108
> -#define AndCwR 104
> +#define AndCqR 98
> +#define AndCqRR 110
> +#define AndCwR 106
> #define AndOpcode 0
> -#define AndRR 90
> +#define AndRR 91
> #define AnnotationShift 5
> #define Arg0Reg -7
> #define Arg1Reg -8
> -#define ArithmeticShiftRightCqR 81
> -#define ArithmeticShiftRightRR 82
> +#define ArithmeticShiftRightCqR 82
> +#define ArithmeticShiftRightRR 83
> #define BadRegisterSet 1
> -#define BICCqR 122
> #define BicOpcode 14
> #define BlockCreationBytecodeSize 4
> #define BytecodeSetHasDirectedSuperSend 0
> @@ -145,8 +137,8 @@
> #define CArg1Reg 1
> #define CArg2Reg 2
> #define CArg3Reg 3
> -#define Call 9
> -#define CallFull 10
> +#define Call 10
> +#define CallFull 11
> #define CC 3
> #define ClassArrayCompactIndex 51
> #define ClassBlockClosureCompactIndex 37
> @@ -165,31 +157,32 @@
> #define CMMethod 2
> #define CMOpenPIC 5
> #define CMPSMULL 123
> -#define CmpCqR 94
> -#define CmpCwR 101
> +#define CmpCqR 95
> +#define CmpCwR 103
> +#define CmpNotOpcode 11
> #define CmpOpcode 10
> -#define CmpRdRd 109
> -#define CmpRR 87
> +#define CmpRdRd 111
> +#define CmpRR 88
> #define ConcreteIPReg 12
> #define ConcreteVarBaseReg 10
> #define ConstZero 1
> -#define ConvertRRd 116
> +#define ConvertRRd 117
> #define CS 2
> #define Debug DEBUGVM
> #define DisplacementMask 0x1F
> #define DisplacementX2N 0
> -#define DivRdRd 113
> +#define DivRdRd 115
> #define DPFPReg0 -9
> #define DPFPReg1 -10
> #define DPFPReg2 -11
> #define EncounteredUnknownBytecode -6
> #define EQ 0
> -#define Fill16 5
> -#define Fill32 6
> -#define FillFromWord 7
> +#define Fill16 6
> +#define Fill32 7
> +#define FillFromWord 8
> #define FirstAnnotation 64
> -#define FirstJump 14
> -#define FirstShortJump 18
> +#define FirstJump 15
> +#define FirstShortJump 19
> #define FirstSpecialSelector 176
> #define FoxCallerSavedIP 4
> #define FoxMethod -4
> @@ -221,46 +214,47 @@
> #define IsRelativeCall 5
> #define IsSendCall 7
> #define IsSuperSend 8
> -#define Jump 18
> -#define JumpAbove 33
> -#define JumpAboveOrEqual 32
> -#define JumpBelow 31
> -#define JumpBelowOrEqual 34
> -#define JumpCarry 25
> -#define JumpFPEqual 35
> -#define JumpFPGreater 39
> -#define JumpFPGreaterOrEqual 40
> -#define JumpFPLess 37
> -#define JumpFPLessOrEqual 38
> -#define JumpFPNotEqual 36
> -#define JumpFPOrdered 41
> -#define JumpFPUnordered 42
> -#define JumpFull 14
> -#define JumpGreater 29
> -#define JumpGreaterOrEqual 28
> -#define JumpLess 27
> -#define JumpLessOrEqual 30
> -#define JumpLong 15
> -#define JumpLongNonZero 17
> -#define JumpLongZero 16
> -#define JumpNegative 21
> -#define JumpNoCarry 26
> -#define JumpNonNegative 22
> -#define JumpNonZero 20
> -#define JumpNoOverflow 24
> -#define JumpOverflow 23
> -#define JumpR 12
> -#define JumpZero 19
> +#define Jump 19
> +#define JumpAbove 34
> +#define JumpAboveOrEqual 33
> +#define JumpBelow 32
> +#define JumpBelowOrEqual 35
> +#define JumpCarry 26
> +#define JumpFPEqual 36
> +#define JumpFPGreater 40
> +#define JumpFPGreaterOrEqual 41
> +#define JumpFPLess 38
> +#define JumpFPLessOrEqual 39
> +#define JumpFPNotEqual 37
> +#define JumpFPOrdered 42
> +#define JumpFPUnordered 43
> +#define JumpFull 15
> +#define JumpGreater 30
> +#define JumpGreaterOrEqual 29
> +#define JumpLess 28
> +#define JumpLessOrEqual 31
> +#define JumpLong 16
> +#define JumpLongNonZero 18
> +#define JumpLongZero 17
> +#define JumpNegative 22
> +#define JumpNoCarry 27
> +#define JumpNonNegative 23
> +#define JumpNonZero 21
> +#define JumpNoOverflow 25
> +#define JumpOverflow 24
> +#define JumpR 13
> +#define JumpZero 20
> #define Label 1
> #define LargeContextSlots 62
> -#define LastJump 42
> +#define LastJump 43
> #define LE 13
> #define LinkReg -17
> -#define LoadEffectiveAddressMwrR 78
> -#define LogicalShiftLeftCqR 85
> -#define LogicalShiftLeftRR 86
> -#define LogicalShiftRightCqR 83
> -#define LogicalShiftRightRR 84
> +#define Literal 2
> +#define LoadEffectiveAddressMwrR 79
> +#define LogicalShiftLeftCqR 86
> +#define LogicalShiftLeftRR 87
> +#define LogicalShiftRightCqR 84
> +#define LogicalShiftRightRR 85
> #define LR 14
> #define LS 9
> #define LT 11
> @@ -281,32 +275,32 @@
> #define MFMethodFlagHasContextFlag 1
> #define MFMethodFlagIsBlockFlag 2
> #define MI 4
> -#define MoveAwR 44
> -#define MoveCqR 66
> -#define MoveCwR 67
> -#define MoveM16rR 54
> -#define MoveM64rRd 71
> -#define MoveMbrR 62
> -#define MoveMwrR 48
> +#define MoveAwR 45
> +#define MoveCqR 67
> +#define MoveCwR 68
> +#define MoveM16rR 55
> +#define MoveM64rRd 72
> +#define MoveMbrR 63
> +#define MoveMwrR 49
> #define MoveNotOpcode 15
> #define MoveOpcode 13
> -#define MoveRAw 45
> -#define MoveRdM64r 72
> -#define MoveRdRd 70
> -#define MoveRMbr 63
> -#define MoveRMwr 49
> -#define MoveRR 43
> -#define MoveRXbrR 65
> -#define MoveRXwrR 51
> -#define MoveXbrRR 64
> -#define MoveXwrRR 50
> -#define MSR 118
> +#define MoveRAw 46
> +#define MoveRdM64r 73
> +#define MoveRdRd 71
> +#define MoveRMbr 64
> +#define MoveRMwr 50
> +#define MoveRR 44
> +#define MoveRXbrR 66
> +#define MoveRXwrR 52
> +#define MoveXbrRR 65
> +#define MoveXwrRR 51
> +#define MSR 119
> #define MULTIPLEBYTECODESETS 1
> -#define MulRdRd 112
> +#define MulRdRd 114
> #define NE 1
> -#define NegateR 80
> +#define NegateR 81
> #define NewspeakVM 1
> -#define Nop 8
> +#define Nop 9
> #define NotFullyInitialized -1
> #define NSCClassTagIndex 0
> #define NSCEnclosingObjectIndex 1
> @@ -316,24 +310,24 @@
> #define NumOopsPerNSC 6
> #define NumSendTrampolines 4
> #define NumTrampolines 72
> -#define OrCqR 98
> -#define OrCwR 105
> +#define OrCqR 99
> +#define OrCwR 107
> #define OrOpcode 12
> -#define OrRR 91
> +#define OrRR 92
> #define PC 15
> #define PCReg -19
> #define PL 5
> -#define PopR 73
> -#define PrefetchAw 77
> +#define PopR 74
> +#define PrefetchAw 78
> #define PrimCallCollectsProfileSamples 8
> #define PrimCallDoNotJIT 32
> #define PrimCallMayCallBack 4
> #define PrimCallNeedsNewMethod 1
> #define PrimCallNeedsPrimitiveFunction 2
> #define PrimErrWritePastObject 17
> -#define PushCq 75
> -#define PushCw 76
> -#define PushR 74
> +#define PushCq 76
> +#define PushCw 77
> +#define PushR 75
> #define R0 0
> #define R11 11
> #define R4 4
> @@ -343,7 +337,7 @@
> #define R8 8
> #define ReceiverIndex 5
> #define ReceiverResultReg -3
> -#define RetN 11
> +#define RetN 12
> #define RISCTempReg -18
> #define RsbOpcode 3
> #define SelectorCannotInterpret 34
> @@ -352,34 +346,35 @@
> #define SendNumArgsReg -6
> #define ShouldNotJIT -8
> #define SistaVM 0
> -#define SMULL 117
> +#define SMULL 118
> #define SmallContextSlots 22
> #define SP 13
> #define SPReg -2
> -#define SqrtRd 115
> +#define SqrtRd 116
> #define SSBaseOffset 1
> #define SSConstant 2
> #define SSRegister 3
> #define SSSpill 4
> #define StackPointerIndex 2
> -#define Stop 13
> -#define SubCqR 96
> -#define SubCwR 103
> +#define Stop 14
> +#define SubCqR 97
> +#define SubCwR 105
> #define SubOpcode 2
> -#define SubRdRd 111
> -#define SubRR 89
> +#define SubRdRd 113
> +#define SubRR 90
> #define TempReg -4
> -#define TstCqR 114
> +#define TstCqR 100
> +#define TstOpcode 8
> #define UnfailingPrimitive 3
> #define UnimplementedPrimitive -7
> #define ValueIndex 1
> #define VarBaseReg -20
> #define VC 7
> #define VS 6
> -#define XorCqR 99
> -#define XorCwR 106
> +#define XorCqR 101
> +#define XorCwR 108
> #define XorOpcode 1
> -#define XorRR 92
> +#define XorRR 93
> #define YoungSelectorInPIC -5
> 
> 
> @@ -426,7 +421,6 @@
> static sqInt bl(AbstractInstruction * self_in_bl, sqInt offset) NoDbgRegParms;
> static sqInt b(AbstractInstruction * self_in_b, sqInt offset) NoDbgRegParms;
> static sqInt callerSavedRegisterMask(AbstractInstruction * self_in_callerSavedRegisterMask) NoDbgRegParms;
> -static sqInt callFullTargetFromReturnAddress(AbstractInstruction * self_in_callFullTargetFromReturnAddress, sqInt callSiteReturnAddress) NoDbgRegParms;
> static sqInt callInstructionByteSize(AbstractInstruction * self_in_callInstructionByteSize) NoDbgRegParms;
> static sqInt callTargetFromReturnAddress(AbstractInstruction * self_in_callTargetFromReturnAddress, sqInt callSiteReturnAddress) NoDbgRegParms;
> static sqInt computeMaximumSize(AbstractInstruction * self_in_computeMaximumSize) NoDbgRegParms;
> @@ -453,7 +447,6 @@
> static sqInt cResultRegister(AbstractInstruction * self_in_cResultRegister) NoDbgRegParms;
> static sqInt dataOpTyperdrnrmlsr(AbstractInstruction * self_in_dataOpTyperdrnrmlsr, sqInt armOpcode, sqInt destReg, sqInt srcReg, sqInt addReg, sqInt shft) NoDbgRegParms;
> static void dispatchConcretize(AbstractInstruction * self_in_dispatchConcretize) NoDbgRegParms;
> -static sqInt extract32BitOperandFrom4InstructionsPreceeding(AbstractInstruction * self_in_extract32BitOperandFrom4InstructionsPreceeding, sqInt addr) NoDbgRegParms;
> static sqInt fullCallsAreRelative(AbstractInstruction * self_in_fullCallsAreRelative) NoDbgRegParms;
> static sqInt genAlignCStackSavingRegistersnumArgswordAlignment(AbstractInstruction * self_in_genAlignCStackSavingRegistersnumArgswordAlignment, sqInt saveRegs, sqInt numArgs, sqInt alignment) NoDbgRegParms;
> static AbstractInstruction * genDivRRQuoRem(AbstractInstruction * self_in_genDivRRQuoRem, sqInt abstractRegDivisor, sqInt abstractRegDividend, sqInt abstractRegQuotient, sqInt abstractRegRemainder) NoDbgRegParms;
> @@ -475,8 +468,6 @@
> static sqInt hasLinkRegister(AbstractInstruction * self_in_hasLinkRegister) NoDbgRegParms;
> static sqInt hasPCDependentInstruction(AbstractInstruction * self_in_hasPCDependentInstruction) NoDbgRegParms;
> static sqInt hasPCRegister(AbstractInstruction * self_in_hasPCRegister) NoDbgRegParms;
> -static sqInt inlineCacheTagAt(AbstractInstruction * self_in_inlineCacheTagAt, sqInt callSiteReturnAddress) NoDbgRegParms;
> -static sqInt instructionBeforeAddress(AbstractInstruction * self_in_instructionBeforeAddress, sqInt followingAddress) NoDbgRegParms;
> static sqInt instructionIsBLX(AbstractInstruction * self_in_instructionIsBLX, sqInt instr) NoDbgRegParms;
> static sqInt instructionIsBL(AbstractInstruction * self_in_instructionIsBL, sqInt instr) NoDbgRegParms;
> static sqInt instructionIsBX(AbstractInstruction * self_in_instructionIsBX, sqInt instr) NoDbgRegParms;
> @@ -484,11 +475,11 @@
> static sqInt instructionIsOR(AbstractInstruction * self_in_instructionIsOR, sqInt instr) NoDbgRegParms;
> static sqInt instructionIsPush(AbstractInstruction * self_in_instructionIsPush, sqInt instr) NoDbgRegParms;
> static sqInt instructionSizeAt(AbstractInstruction * self_in_instructionSizeAt, sqInt pc) NoDbgRegParms;
> +static sqInt inverseOpcodeFor(AbstractInstruction * self_in_inverseOpcodeFor, sqInt armOpcode) NoDbgRegParms;
> static sqInt isAddressRelativeToVarBase(AbstractInstruction * self_in_isAddressRelativeToVarBase, usqInt varAddress) NoDbgRegParms;
> static sqInt isCallPreceedingReturnPC(AbstractInstruction * self_in_isCallPreceedingReturnPC, sqInt mcpc) NoDbgRegParms;
> static sqInt isInImmediateJumpRange(AbstractInstruction * self_in_isInImmediateJumpRange, unsigned long operand) NoDbgRegParms;
> static sqInt isJumpAt(AbstractInstruction * self_in_isJumpAt, sqInt pc) NoDbgRegParms;
> -static sqInt isPCDependent(AbstractInstruction * self_in_isPCDependent) NoDbgRegParms;
> static sqInt isPCRelativeValueLoad(AbstractInstruction * self_in_isPCRelativeValueLoad, unsigned int instr) NoDbgRegParms;
> static sqInt jumpLongByteSize(AbstractInstruction * self_in_jumpLongByteSize) NoDbgRegParms;
> static sqInt jumpLongConditionalByteSize(AbstractInstruction * self_in_jumpLongConditionalByteSize) NoDbgRegParms;
> @@ -502,7 +493,6 @@
> static sqInt ldrrnplusimm(AbstractInstruction * self_in_ldrrnplusimm, sqInt destReg, sqInt baseReg, sqInt u, sqInt immediate12bitValue) NoDbgRegParms;
> static sqInt ldrrnrm(AbstractInstruction * self_in_ldrrnrm, sqInt destReg, sqInt baseReg, sqInt offsetReg) NoDbgRegParms;
> static sqInt leafCallStackPointerDelta(AbstractInstruction * self_in_leafCallStackPointerDelta) NoDbgRegParms;
> -static sqInt literalBeforeFollowingAddress(AbstractInstruction * self_in_literalBeforeFollowingAddress, sqInt followingAddress) NoDbgRegParms;
> static sqInt loadCwInto(AbstractInstruction * self_in_loadCwInto, sqInt destReg) NoDbgRegParms;
> static sqInt loadLiteralByteSize(AbstractInstruction * self_in_loadLiteralByteSize) NoDbgRegParms;
> static sqInt loadPICLiteralByteSize(AbstractInstruction * self_in_loadPICLiteralByteSize) NoDbgRegParms;
> @@ -528,18 +518,12 @@
> static sqInt pushLinkRegisterByteSize(AbstractInstruction * self_in_pushLinkRegisterByteSize) NoDbgRegParms;
> static sqInt pushR(AbstractInstruction * self_in_pushR, sqInt srcReg) NoDbgRegParms;
> static AbstractInstruction * relocateCallBeforeReturnPCby(AbstractInstruction * self_in_relocateCallBeforeReturnPCby, sqInt retpc, sqInt delta) NoDbgRegParms;
> -static AbstractInstruction * relocateMethodReferenceBeforeAddressby(AbstractInstruction * self_in_relocateMethodReferenceBeforeAddressby, sqInt pc, sqInt delta) NoDbgRegParms;
> static sqInt rewriteCallAttarget(AbstractInstruction * self_in_rewriteCallAttarget, usqInt callSiteReturnAddress, usqInt callTargetAddress) NoDbgRegParms;
> static sqInt rewriteCallFullAttarget(AbstractInstruction * self_in_rewriteCallFullAttarget, sqInt callSiteReturnAddress, sqInt callTargetAddress) NoDbgRegParms;
> -static sqInt rewriteFullTransferAttargetexpectedInstruction(AbstractInstruction * self_in_rewriteFullTransferAttargetexpectedInstruction, usqInt callSiteReturnAddress, usqInt callTargetAddress, sqInt expectedInstruction) NoDbgRegParms;
> -static sqInt rewriteInlineCacheAttagtarget(AbstractInstruction * self_in_rewriteInlineCacheAttagtarget, usqInt callSiteReturnAddress, sqInt cacheTag, usqInt callTargetAddress) NoDbgRegParms;
> -static AbstractInstruction * rewriteInlineCacheTagat(AbstractInstruction * self_in_rewriteInlineCacheTagat, sqInt cacheTag, sqInt callSiteReturnAddress) NoDbgRegParms;
> static sqInt rewriteJumpFullAttarget(AbstractInstruction * self_in_rewriteJumpFullAttarget, sqInt callSiteReturnAddress, sqInt callTargetAddress) NoDbgRegParms;
> static sqInt setsConditionCodesFor(AbstractInstruction * self_in_setsConditionCodesFor, sqInt aConditionalJumpOpcode) NoDbgRegParms;
> static sqInt shiftSetsConditionCodesFor(AbstractInstruction * self_in_shiftSetsConditionCodesFor, sqInt aConditionalJumpOpcode) NoDbgRegParms;
> -static usqInt sizePCDependentInstructionAt(AbstractInstruction * self_in_sizePCDependentInstructionAt, sqInt eventualAbsoluteAddress) NoDbgRegParms;
> static sqInt stackPageInterruptHeadroomBytes(AbstractInstruction * self_in_stackPageInterruptHeadroomBytes) NoDbgRegParms;
> -static AbstractInstruction * storeLiteralbeforeFollowingAddress(AbstractInstruction * self_in_storeLiteralbeforeFollowingAddress, sqInt literal, sqInt followingAddress) NoDbgRegParms;
> static sqInt strbrnplusimm(AbstractInstruction * self_in_strbrnplusimm, sqInt destReg, sqInt baseReg, sqInt u, sqInt immediate12bitValue) NoDbgRegParms;
> static sqInt strbrnrm(AbstractInstruction * self_in_strbrnrm, sqInt srcReg, sqInt baseReg, sqInt offsetReg) NoDbgRegParms;
> static sqInt strrnplusImm(AbstractInstruction * self_in_strrnplusImm, sqInt srcReg, sqInt baseReg, sqInt immediate12bitValue) NoDbgRegParms;
> @@ -550,11 +534,12 @@
> static sqInt tstrnimmror(AbstractInstruction * self_in_tstrnimmror, sqInt ignored, sqInt srcReg, sqInt immediate, sqInt rot) NoDbgRegParms;
> static CogMethod * cmHomeMethod(CogBlockMethod * self_in_cmHomeMethod) NoDbgRegParms;
> static sqInt isBranch(BytecodeDescriptor * self_in_isBranch) NoDbgRegParms;
> +static sqInt isUnconditionalBranch(BytecodeDescriptor * self_in_isUnconditionalBranch) NoDbgRegParms;
> static AbstractInstruction * gAndCqR(sqInt quickConstant, sqInt reg) NoDbgRegParms;
> static AbstractInstruction * gArithmeticShiftRightRR(sqInt reg1, sqInt reg2) NoDbgRegParms;
> -sqInt abortOffset(void);
> +extern sqInt abortOffset(void);
> static void addCleanBlockStarts(void);
> -void addCogMethodsToHeapMap(void);
> +extern void addCogMethodsToHeapMap(void);
> static sqInt addressIsInCurrentCompilation(sqInt address) NoDbgRegParms;
> static sqInt addressIsInFixups(AbstractInstruction *address) NoDbgRegParms;
> static sqInt addressIsInInstructions(AbstractInstruction *address) NoDbgRegParms;
> @@ -565,41 +550,40 @@
> static AbstractInstruction * annotateAbsolutePCRef(AbstractInstruction *abstractInstruction) NoDbgRegParms;
> static AbstractInstruction * annotateBytecode(AbstractInstruction *abstractInstruction) NoDbgRegParms;
> static AbstractInstruction * annotateobjRef(AbstractInstruction *abstractInstruction, sqInt anOop) NoDbgRegParms;
> -static AbstractInstruction * annotatewith(AbstractInstruction *abstractInstruction, sqInt annotationFlag) NoDbgRegParms;
> static sqInt annotationForMcpcin(sqInt mcpc, CogMethod *cogHomeMethod) NoDbgRegParms;
> static void assertSaneJumpTarget(AbstractInstruction *jumpTarget) NoDbgRegParms;
> static sqInt blockCreationBytecodeSizeForHeader(sqInt methodHeader) NoDbgRegParms;
> static sqInt blockDispatchTargetsForperformarg(CogMethod *cogMethod, usqInt (*binaryFunction)(sqInt mcpc, sqInt arg), sqInt arg) NoDbgRegParms;
> -sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> +extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> static AbstractInstruction * CallNewspeakSend(sqInt callTarget) NoDbgRegParms;
> static AbstractInstruction * CallRTregistersToBeSavedMask(sqInt callTarget, sqInt registersToBeSaved) NoDbgRegParms;
> static AbstractInstruction * gCall(sqInt callTarget) NoDbgRegParms;
> static AbstractInstruction * gCmpCqR(sqInt quickConstant, sqInt reg) NoDbgRegParms;
> static AbstractInstruction * gCmpCwR(sqInt wordConstant, sqInt reg) NoDbgRegParms;
> static AbstractInstruction * gCmpRR(sqInt reg1, sqInt reg2) NoDbgRegParms;
> -void callCogCodePopReceiver(void);
> -void callCogCodePopReceiverAndClassRegs(void);
> -sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
> -sqInt ceSICMiss(sqInt receiver);
> -void checkAssertsEnabledInCogit(void);
> +extern void callCogCodePopReceiver(void);
> +extern void callCogCodePopReceiverAndClassRegs(void);
> +extern sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
> +extern sqInt ceSICMiss(sqInt receiver);
> +extern void checkAssertsEnabledInCogit(void);
> static sqInt checkIfValidOopRefAndTargetpccogMethod(sqInt annotation, char *mcpc, sqInt cogMethod) NoDbgRegParms;
> static sqInt checkIfValidOopRefpccogMethod(sqInt annotation, char *mcpc, sqInt cogMethod) NoDbgRegParms;
> -sqInt checkIntegrityOfObjectReferencesInCode(sqInt gcModes);
> +extern sqInt checkIntegrityOfObjectReferencesInCode(sqInt gcModes);
> static sqInt checkMaybeObjRefAt(sqInt mcpc) NoDbgRegParms;
> static sqInt checkValidObjectReferencesInClosedPIC(CogMethod *cPIC) NoDbgRegParms;
> static sqInt closedPICRefersToUnmarkedObject(CogMethod *cPIC) NoDbgRegParms;
> -char * codeEntryFor(char *address);
> -char * codeEntryNameFor(char *address);
> -sqInt cogCodeBase(void);
> -sqInt cogCodeConstituents(void);
> +extern char * codeEntryFor(char *address);
> +extern char * codeEntryNameFor(char *address);
> +extern sqInt cogCodeBase(void);
> +extern sqInt cogCodeConstituents(void);
> static sqInt cogExtendPICCaseNMethodtagisMNUCase(CogMethod *cPIC, sqInt caseNMethod, sqInt caseNTag, sqInt isMNUCase) NoDbgRegParms;
> -void cogitPostGCAction(sqInt gcMode);
> -sqInt cogMethodDoesntLookKosher(CogMethod *cogMethod);
> -CogMethod * cogMNUPICSelectorreceivermethodOperandnumArgs(sqInt selector, sqInt rcvr, sqInt methodOperand, sqInt numArgs);
> +extern void cogitPostGCAction(sqInt gcMode);
> +extern sqInt cogMethodDoesntLookKosher(CogMethod *cogMethod);
> +extern CogMethod * cogMNUPICSelectorreceivermethodOperandnumArgs(sqInt selector, sqInt rcvr, sqInt methodOperand, sqInt numArgs);
> static CogMethod * cogOpenPICSelectornumArgs(sqInt selector, sqInt numArgs) NoDbgRegParms;
> static CogMethod * cogPICSelectornumArgsCase0MethodCase1MethodtagisMNUCase(sqInt selector, sqInt numArgs, CogMethod *case0CogMethod, sqInt case1MethodOrNil, sqInt case1Tag, sqInt isMNUCase) NoDbgRegParms;
> -CogMethod * cogselector(sqInt aMethodObj, sqInt aSelectorOop);
> -void compactCogCompiledCode(void);
> +extern CogMethod * cogselector(sqInt aMethodObj, sqInt aSelectorOop);
> +extern void compactCogCompiledCode(void);
> static AbstractInstruction * compileAbort(void);
> static sqInt compileBlockDispatchFromto(sqInt lowBlockStartIndex, sqInt highBlockStartIndex) NoDbgRegParms;
> static void compileBlockEntry(BlockStart *blockStart) NoDbgRegParms;
> @@ -618,23 +602,23 @@
> static sqInt cPICHasFreedTargets(CogMethod *cPIC) NoDbgRegParms;
> static sqInt cPICHasTarget(CogMethod *cPIC, CogMethod *targetMethod) NoDbgRegParms;
> static AbstractInstruction * gDivRRQuoRem(sqInt rDivisor, sqInt rDividend, sqInt rQuotient, sqInt rRemainder) NoDbgRegParms;
> -sqInt defaultCogCodeSize(void);
> +extern sqInt defaultCogCodeSize(void);
> static sqInt endPCOf(sqInt aMethod) NoDbgRegParms;
> -void enterCogCodePopReceiver(void);
> +extern void enterCogCodePopReceiver(void);
> static sqInt extABytecode(void);
> static sqInt extBBytecode(void);
> static sqInt fillInBlockHeadersAt(sqInt startAddress) NoDbgRegParms;
> static CogMethod * fillInMethodHeadersizeselector(CogMethod *method, sqInt size, sqInt selector) NoDbgRegParms;
> static usqInt findBlockMethodWithEntrystartBcpc(sqInt blockEntryMcpc, sqInt startBcpc) NoDbgRegParms;
> static sqInt findMapLocationForMcpcinMethod(sqInt targetMcpc, CogMethod *cogMethod) NoDbgRegParms;
> -CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
> +extern CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
> static sqInt findIsBackwardBranchMcpcBcpcMatchingMcpc(BytecodeDescriptor *descriptor, sqInt isBackwardBranch, char *mcpc, sqInt bcpc, void *targetMcpc) NoDbgRegParms;
> -void followForwardedLiteralsIn(CogMethod *cogMethod);
> -void followForwardedMethods(void);
> +extern void followForwardedLiteralsIn(CogMethod *cogMethod);
> +extern void followForwardedMethods(void);
> static sqInt followMaybeObjRefAt(sqInt mcpc) NoDbgRegParms;
> static sqInt followMethodReferencesInClosedPIC(CogMethod *cPIC) NoDbgRegParms;
> static void freePICsWithFreedTargets(void);
> -void freeUnmarkedMachineCode(void);
> +extern void freeUnmarkedMachineCode(void);
> static sqInt genCheckForInterruptsTrampoline(void);
> static void (*genEnilopmartForandandforCallcalled(sqInt regArg1, sqInt regArg2, sqInt regArg3, sqInt forCall, char *trampolineName))(void)  NoDbgRegParms;
> static void genEnilopmartReturn(sqInt forCall) NoDbgRegParms;
> @@ -672,14 +656,14 @@
> static sqInt incrementUsageOfTargetIfLinkedSendmcpcignored(sqInt annotation, char *mcpc, sqInt superfluity) NoDbgRegParms;
> static sqInt initialClosedPICUsageCount(void);
> static void initializeBackend(void);
> -void initializeCodeZoneFromupTo(sqInt startAddress, sqInt endAddress);
> +extern void initializeCodeZoneFromupTo(sqInt startAddress, sqInt endAddress);
> static sqInt initialMethodUsageCount(void);
> static sqInt initialOpenPICUsageCount(void);
> static sqInt inverseBranchFor(sqInt opcode) NoDbgRegParms;
> static sqInt isBackwardBranchatextsin(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> static sqInt isPCMappedAnnotation(sqInt annotation) NoDbgRegParms;
> -sqInt isPCWithinMethodZone(void *address);
> -sqInt isSendReturnPC(sqInt retpc);
> +extern sqInt isPCWithinMethodZone(void *address);
> +extern sqInt isSendReturnPC(sqInt retpc);
> static AbstractInstruction * gJumpFPEqual(void *jumpTarget) NoDbgRegParms;
> static AbstractInstruction * gJumpFPGreaterOrEqual(void *jumpTarget) NoDbgRegParms;
> static AbstractInstruction * gJumpFPGreater(void *jumpTarget) NoDbgRegParms;
> @@ -689,8 +673,8 @@
> static AbstractInstruction * gLabel(void);
> static AbstractInstruction * gLogicalShiftLeftCqR(sqInt quickConstant, sqInt reg) NoDbgRegParms;
> static AbstractInstruction * lastOpcode(void);
> -void linkNSSendCacheclassTagenclosingObjecttargetcaller(NSSendCache *nsSendCache, sqInt classTag, sqInt enclosingObject, CogMethod *targetMethod, CogMethod *callingMethod);
> -void linkSendAtintooffsetreceiver(sqInt callSiteReturnAddress, CogMethod *sendingMethod, CogMethod *targetMethod, sqInt theEntryOffset, sqInt receiver);
> +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 void loadSubsequentBytesForDescriptorat(BytecodeDescriptor *descriptor, sqInt pc) NoDbgRegParms;
> static AbstractInstruction * gMoveAwR(sqInt address, sqInt reg) NoDbgRegParms;
> static AbstractInstruction * gMoveCwR(sqInt wordConstant, sqInt reg) NoDbgRegParms;
> @@ -705,24 +689,24 @@
> static void mapObjectReferencesInMachineCodeForBecome(void);
> static void mapObjectReferencesInMachineCodeForFullGC(void);
> static void mapObjectReferencesInMachineCodeForYoungGC(void);
> -void mapObjectReferencesInMachineCode(sqInt gcMode);
> -void markAndTraceMachineCodeOfMarkedMethods(void);
> +extern void mapObjectReferencesInMachineCode(sqInt gcMode);
> +extern void markAndTraceMachineCodeOfMarkedMethods(void);
> static void markAndTraceObjectReferencesInGeneratedRuntime(void);
> static sqInt markAndTraceOrFreeCogMethodfirstVisit(CogMethod *cogMethod, sqInt firstVisit) NoDbgRegParms;
> static sqInt markLiteralsAndUnlinkIfUnmarkedSendpcmethod(sqInt annotation, char *mcpc, sqInt cogMethod) NoDbgRegParms;
> static sqInt markLiteralspcmethod(sqInt annotation, char *mcpc, sqInt cogMethod) NoDbgRegParms;
> -void markMethodAndReferents(CogBlockMethod *aCogMethod);
> -usqInt maxCogMethodAddress(void);
> +extern void markMethodAndReferents(CogBlockMethod *aCogMethod);
> +extern usqInt maxCogMethodAddress(void);
> static sqInt maybeAllocAndInitIRCs(void);
> static sqInt maybeFreeCogMethodDoesntLookKosher(CogMethod *cogMethod) NoDbgRegParms;
> static sqInt maybeGenerateCheckFeatures(void);
> static sqInt maybeGenerateICacheFlush(void);
> static void maybeMarkCountersIn(CogMethod *cogMethod) NoDbgRegParms;
> static sqInt mclassIsSmallInteger(sqInt ignoredPrimIndex) NoDbgRegParms;
> -usqInt mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> +extern usqInt mcPCForBackwardBranchstartBcpcin(sqInt bcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
> static sqInt methodhasSameCodeAscheckPenultimate(sqInt methodA, sqInt methodB, sqInt comparePenultimateLiteral) NoDbgRegParms;
> -sqInt minCogMethodAddress(void);
> -sqInt mnuOffset(void);
> +extern sqInt minCogMethodAddress(void);
> +extern sqInt mnuOffset(void);
> static AbstractInstruction * gNegateR(sqInt reg) NoDbgRegParms;
> static sqInt needsFrameIfInBlock(sqInt stackDelta) NoDbgRegParms;
> static sqInt needsFrameNever(sqInt stackDelta) NoDbgRegParms;
> @@ -733,13 +717,13 @@
> static sqInt outputInstructionsForGeneratedRuntimeAt(sqInt startAddress) NoDbgRegParms;
> static AbstractInstruction * gPopR(sqInt reg) NoDbgRegParms;
> static AbstractInstruction * gPushCw(sqInt wordConstant) NoDbgRegParms;
> -sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver);
> -sqInt pcisWithinMethod(char *address, CogMethod *cogMethod);
> +extern sqInt patchToOpenPICFornumArgsreceiver(sqInt selector, sqInt numArgs, sqInt receiver);
> +extern sqInt pcisWithinMethod(char *address, CogMethod *cogMethod);
> static sqInt picAbortDiscriminatorValue(void);
> static sqInt picInterpretAbortOffset(void);
> static PrimitiveDescriptor * primitiveGeneratorOrNil(void);
> -void printCogMethodFor(void *address);
> -void printTrampolineTable(void);
> +extern void printCogMethodFor(void *address);
> +extern void printTrampolineTable(void);
> static sqInt processorHasDivQuoRemAndMClassIsSmallInteger(sqInt ignoredPrimIndex) NoDbgRegParms;
> static sqInt processorHasDivQuoRem(sqInt ignoredPrimIndex) NoDbgRegParms;
> static sqInt processorHasDoublePrecisionFloatingPointSupport(sqInt ignoredPrimIndex) NoDbgRegParms;
> @@ -747,7 +731,7 @@
> static sqInt processorHasMultiply(sqInt ignoredPrimIndex) NoDbgRegParms;
> static AbstractInstruction * gRetN(sqInt offset) NoDbgRegParms;
> static void recordGeneratedRunTimeaddress(char *aString, sqInt address) NoDbgRegParms;
> -sqInt recordPrimTraceFunc(void);
> +extern sqInt recordPrimTraceFunc(void);
> static void recordRunTimeObjectReferences(void);
> static sqInt registerMaskFor(sqInt reg) NoDbgRegParms;
> static sqInt registerMaskForand(sqInt reg1, sqInt reg2) NoDbgRegParms;
> @@ -757,29 +741,29 @@
> static sqInt remapIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr) NoDbgRegParms;
> static AbstractInstruction * gSubCwR(sqInt wordConstant, sqInt reg) NoDbgRegParms;
> static sqInt scanForCleanBlocks(void);
> -void setBreakMethod(sqInt anObj);
> -void setPostCompileHook(void (*aFunction)(CogMethod *, void *));
> -void setSelectorOfto(CogMethod *cogMethod, sqInt aSelectorOop);
> +extern void setBreakMethod(sqInt anObj);
> +extern void setPostCompileHook(void (*aFunction)(CogMethod *, void *));
> +extern void setSelectorOfto(CogMethod *cogMethod, sqInt aSelectorOop);
> static sqInt spanForCleanBlockStartingAt(sqInt startPC) NoDbgRegParms;
> -sqInt traceLinkedSendOffset(void);
> -static char * trampolineNamenumArgs(sqInt routinePrefix, sqInt numArgs) NoDbgRegParms;
> -static char * trampolineNamenumRegArgs(sqInt routinePrefix, sqInt numArgs) NoDbgRegParms;
> +extern sqInt traceLinkedSendOffset(void);
> +static char * trampolineNamenumArgs(char *routinePrefix, sqInt numArgs) NoDbgRegParms;
> +static char * trampolineNamenumRegArgs(char *routinePrefix, sqInt numArgs) NoDbgRegParms;
> static sqInt unimplementedPrimitive(void);
> static sqInt unknownBytecode(void);
> -void unlinkAllSends(void);
> +extern void unlinkAllSends(void);
> static sqInt unlinkIfFreeOrLinkedSendpcof(sqInt annotation, char *mcpc, sqInt theSelector) NoDbgRegParms;
> static sqInt unlinkIfInvalidClassSendpcignored(sqInt annotation, char *mcpc, sqInt superfluity) NoDbgRegParms;
> static sqInt unlinkIfLinkedSendToFreepcignored(sqInt annotation, char *mcpc, sqInt superfluity) NoDbgRegParms;
> static sqInt unlinkIfLinkedSendpcignored(sqInt annotation, char *mcpc, sqInt superfluity) NoDbgRegParms;
> static sqInt unlinkIfLinkedSendpcto(sqInt annotation, char *mcpc, sqInt theCogMethod) NoDbgRegParms;
> -void unlinkSendsLinkedForInvalidClasses(void);
> -void unlinkSendsOfisMNUSelector(sqInt selector, sqInt isMNUSelector);
> -void unlinkSendsToFree(void);
> -void unlinkSendsToandFreeIf(sqInt targetMethodObject, sqInt freeIfTrue);
> +extern void unlinkSendsLinkedForInvalidClasses(void);
> +extern void unlinkSendsOfisMNUSelector(sqInt selector, sqInt isMNUSelector);
> +extern void unlinkSendsToFree(void);
> +extern void unlinkSendsToandFreeIf(sqInt targetMethodObject, sqInt freeIfTrue);
> static sqInt updateMaybeObjRefAt(sqInt mcpc) NoDbgRegParms;
> static AbstractInstruction * gXorCwR(sqInt wordConstant, sqInt reg) NoDbgRegParms;
> static void zeroOpcodeIndex(void);
> -void addAllToYoungReferrers(void);
> +extern void addAllToYoungReferrers(void);
> static void addToOpenPICList(CogMethod *anOpenPIC) NoDbgRegParms;
> static void addToUnpairedMethodList(CogMethod *aCogMethod) NoDbgRegParms;
> static void addToYoungReferrers(CogMethod *cogMethod) NoDbgRegParms;
> @@ -788,30 +772,30 @@
> static void compactCompiledCode(void);
> static void ensureInYoungReferrers(CogMethod *cogMethod) NoDbgRegParms;
> static CogMethod * findPreviouslyCompiledVersionOfwith(sqInt aMethodObj, sqInt aSelectorOop) NoDbgRegParms;
> -void freeMethod(CogMethod *cogMethod);
> +extern void freeMethod(CogMethod *cogMethod);
> static void freeOlderMethodsForCompaction(void);
> static sqInt kosherYoungReferrers(void);
> static void manageFromto(sqInt theStartAddress, sqInt theLimitAddress) NoDbgRegParms;
> -CogMethod * methodFor(void *address);
> +extern CogMethod * methodFor(void *address);
> static sqInt numMethods(void);
> -sqInt numMethodsOfType(sqInt cogMethodType);
> +extern sqInt numMethodsOfType(sqInt cogMethodType);
> static sqInt occurrencesInYoungReferrers(CogMethod *cogMethod) NoDbgRegParms;
> static CogMethod * openPICWithSelector(sqInt aSelector) NoDbgRegParms;
> static void planCompaction(void);
> -void printCogMethods(void);
> -void printCogMethodsOfType(sqInt cmType);
> -void printCogMethodsWithMethod(sqInt methodOop);
> -void printCogMethodsWithPrimitive(sqInt primIdx);
> -void printCogMethodsWithSelector(sqInt selectorOop);
> -void printCogYoungReferrers(void);
> -void printOpenPICList(void);
> +extern void printCogMethods(void);
> +extern void printCogMethodsOfType(sqInt cmType);
> +extern void printCogMethodsWithMethod(sqInt methodOop);
> +extern void printCogMethodsWithPrimitive(sqInt primIdx);
> +extern void printCogMethodsWithSelector(sqInt selectorOop);
> +extern void printCogYoungReferrers(void);
> +extern void printOpenPICList(void);
> static sqInt pruneYoungReferrers(void);
> static sqInt relocateAndPruneYoungReferrers(void);
> static sqInt relocateMethodsPreCompaction(void);
> static sqInt removeFromOpenPICList(CogMethod *anOpenPIC) NoDbgRegParms;
> static sqInt removeFromUnpairedMethodList(CogMethod *aCogMethod) NoDbgRegParms;
> static void voidYoungReferrersPostTenureAll(void);
> -char * whereIsMaybeCodeThing(sqInt anOop);
> +extern char * whereIsMaybeCodeThing(sqInt anOop);
> static sqInt checkValidObjectReference(sqInt anOop) NoDbgRegParms;
> static AbstractInstruction * genCmpClassFloatCompactIndexR(sqInt reg) NoDbgRegParms;
> static AbstractInstruction * genCmpClassMethodContextCompactIndexR(sqInt reg) NoDbgRegParms;
> @@ -905,7 +889,7 @@
> static void markAndTraceUpdatedLiteralin(sqInt objOop, CogMethod *cogMethodOrNil) NoDbgRegParms;
> static void markIfIRC(usqInt maybeIRCs) NoDbgRegParms;
> static sqInt maybeCompileRetryonPrimitiveFail(AbstractInstruction *retryInst, sqInt primIndex) NoDbgRegParms;
> -sqInt numRegArgs(void);
> +extern sqInt numRegArgs(void);
> static sqInt remapObject(sqInt objOop) NoDbgRegParms;
> static sqInt remapOop(sqInt objOop) NoDbgRegParms;
> static sqInt shouldAnnotateObjectReference(sqInt anOop) NoDbgRegParms;
> @@ -991,9 +975,9 @@
> static sqInt genPushQuickIntegerConstantBytecode(void);
> static sqInt genPushReceiverVariableBytecode(void);
> static sqInt genPushTemporaryVariableBytecode(void);
> -sqInt genQuickReturnConst(void);
> -sqInt genQuickReturnInstVar(void);
> -sqInt genQuickReturnSelf(void);
> +extern sqInt genQuickReturnConst(void);
> +extern sqInt genQuickReturnInstVar(void);
> +extern sqInt genQuickReturnSelf(void);
> static sqInt genReturnFalse(void);
> static sqInt genReturnNil(void);
> static sqInt genReturnTrue(void);
> @@ -1013,10 +997,10 @@
> static sqInt genStoreAndPopTemporaryVariableBytecode(void);
> static sqInt genStoreRemoteTempLongBytecode(void);
> static void maybeCompileAllocFillerCheck(void);
> -void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
> +extern void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
> static sqInt registerisInMask(sqInt reg, sqInt mask) NoDbgRegParms;
> static sqInt returnRegForStoreCheck(void);
> -void rewritePrimInvocationInto(CogMethod *cogMethod, void (*primFunctionPointer)(void));
> +extern void rewritePrimInvocationInto(CogMethod *cogMethod, void (*primFunctionPointer)(void));
> static sqInt v3BlockCodeSize(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> static sqInt v3LongForwardBranchDistance(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> static sqInt v3LongBranchDistance(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> @@ -1024,14 +1008,14 @@
> static sqInt v4BlockCodeSize(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> static sqInt v4LongForwardBranchDistance(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> static sqInt v4LongBranchDistance(BytecodeDescriptor *descriptor, sqInt pc, sqInt nExts, sqInt aMethodObj) NoDbgRegParms;
> -void voidCogCompiledCode(void);
> +extern void voidCogCompiledCode(void);
> static BlockStart * addBlockStartAtnumArgsnumCopiedspan(sqInt bytecodepc, sqInt numArgs, sqInt numCopied, sqInt span) NoDbgRegParms;
> static sqInt allocateRegForStackEntryAtnotConflictingWith(sqInt index, sqInt regMask) NoDbgRegParms;
> static sqInt allocateRegNotConflictingWith(sqInt regMask) NoDbgRegParms;
> static void annotateBytecodeIfAnnotated(CogSimStackEntry *aSimStackEntry) NoDbgRegParms;
> static sqInt anyReferencesToRegisterinTopNItems(sqInt reg, sqInt n) NoDbgRegParms;
> -void callCogCodePopReceiverArg0Regs(void);
> -void callCogCodePopReceiverArg1Arg0Regs(void);
> +extern void callCogCodePopReceiverArg0Regs(void);
> +extern void callCogCodePopReceiverArg1Arg0Regs(void);
> static sqInt compileAbstractInstructionsFromthrough(sqInt start, sqInt end) NoDbgRegParms;
> static sqInt compileBlockBodies(void);
> static void compileBlockFrameBuild(BlockStart *blockStart) NoDbgRegParms;
> @@ -1188,8 +1172,6 @@
> /*** Variables ***/
> static AbstractInstruction * abstractOpcodes;
> static AbstractInstruction aMethodLabel;
> -static sqInt annotationIndex;
> -static InstructionAnnotation * annotations;
> static AbstractInstruction * const backEnd = &aMethodLabel;
> static usqInt baseAddress;
> static sqInt blockCount;
> @@ -1859,7 +1841,7 @@
> 
> 
> /*** Macros ***/
> -#define flushICacheFromto(me,startAddress,endAddress) __clear_cache((char*) startAddress, (char*) (endAddress + 4))
> +#define flushICacheFromto(me,startAddress,endAddress) __clear_cache((char*) startAddress, (char*) (endAddress ))
> #define numberOfSaveableRegisters(self) 0
> #define cPICNumCases stackCheckOffset
> #define cPICNumCasesHack hack hack hack i.e. the getter macro does all the work
> @@ -1870,24 +1852,20 @@
> #define allocateOpcodesbytecodes(numberOfAbstractOpcodes,numberOfBytecodes) do { \
> 		int opcodeSize = sizeof(AbstractInstruction) * (numAbstractOpcodes = (numberOfAbstractOpcodes)); \
> 		int fixupSize = sizeof(BytecodeFixup) * numAbstractOpcodes; \
> -		int annotationSize = sizeof(InstructionAnnotation) * ((numAbstractOpcodes + 3) / 4); \
> -		abstractOpcodes = alloca(opcodeSize + fixupSize + annotationSize); \
> +		abstractOpcodes = alloca(opcodeSize + fixupSize); \
> 		bzero(abstractOpcodes, opcodeSize + fixupSize); \
> 		fixups = (void *)((char *)abstractOpcodes + opcodeSize); \
> -		annotations = (void *)((char *)fixups + fixupSize); \
> -		opcodeIndex = labelCounter = annotationIndex = 0; \
> +		opcodeIndex = labelCounter = 0; \
> } while (0)
> #define allocateOpcodesbytecodesifFail(numberOfAbstractOpcodes,numberOfBytecodes,failBlock) do { \
> 		int opcodeSize = sizeof(AbstractInstruction) * (numAbstractOpcodes = (numberOfAbstractOpcodes)); \
> 		int fixupSize = sizeof(BytecodeFixup) * numAbstractOpcodes; \
> -		int annotationSize = sizeof(InstructionAnnotation) * ((numAbstractOpcodes + 3) / 4); \
> -		int allocSize = opcodeSize + fixupSize + annotationSize; \
> +		int allocSize = opcodeSize + fixupSize; \
> 		if (allocSize > MaxStackAllocSize) failBlock; \
> 		abstractOpcodes = alloca(allocSize); \
> 		bzero(abstractOpcodes, opcodeSize + fixupSize); \
> 		fixups = (void *)((char *)abstractOpcodes + opcodeSize); \
> -		annotations = (void *)((char *)fixups + fixupSize); \
> -		opcodeIndex = labelCounter = annotationIndex = 0; \
> +		opcodeIndex = labelCounter = 0; \
> } while (0)
> #define backEnd() backEnd
> #define blockAlignment(self) 8
> @@ -1906,6 +1884,7 @@
> #define generatorAt(index) (&generatorTable[index])
> #define getCFramePointer() CFramePointer
> #define getCStackPointer() CStackPointer
> +#define getIsObjectReference() IsObjectReference
> #define halt() warning("halt")
> #define haltmsg(msg) warning("halt: " msg)
> #define interpretOffset() missOffset
> @@ -1926,7 +1905,7 @@
> #define reportError(n) warning("compilation error")
> #define setCFramePointer(theFP) (CFramePointer = (void *)(theFP))
> #define setCStackPointer(theSP) (CStackPointer = (void *)(theSP))
> -#define traceMapbyteatfor(ig,no,re,d) 0
> +#define traceMapinstructionbyteatfor(ig,no,r,e,d) 0
> #define tryLockVMOwner() (ceTryLockVMOwner() != 0)
> #define unlockVMOwner() ceUnlockVMOwner()
> #define nextOpenPIC methodObject
> @@ -2039,7 +2018,8 @@
> static sqInt
> isAnInstruction(AbstractInstruction * self_in_isAnInstruction, AbstractInstruction *addressOrInstruction)
> {
> -	return addressIsInInstructions(addressOrInstruction);
> +	return (addressIsInInstructions(addressOrInstruction))
> +	 || (addressOrInstruction == (methodLabel()));
> }
> 
> 	/* CogAbstractInstruction>>#isJump */
> @@ -2070,10 +2050,10 @@
> }
> 
> 
> -/*	To arrange that the block method field pushed in a block entry has
> -	its MFMethodFlagIsBlockFlag bit set we provide labels with an offset.
> -	The offset for the fakeHeader reference is MFMethodFlagIsBlockFlag.
> -	See compileBlockFrameBuild: */
> +/*	Hack: To arrange that the block method field pushed in a block entry has
> +	its MFMethodFlagIsBlockFlag bit set we provide labels with an offset. The
> +	offset for the fakeHeader reference is MFMethodFlagIsBlockFlag. See
> +	compileBlockFrameBuild: */
> 
> 	/* CogAbstractInstruction>>#labelOffset */
> static unsigned long
> @@ -2267,7 +2247,7 @@
> static sqInt
> bicsrnimmror(AbstractInstruction * self_in_bicsrnimmror, sqInt destReg, sqInt srcReg, sqInt immediate, sqInt rot)
> {
> 
> @@ Diff output truncated at 50000 characters. @@

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20150612/2d0e3b7b/attachment-0001.htm


More information about the Vm-dev mailing list