{"id":100,"date":"2011-03-04T20:32:48","date_gmt":"2011-03-05T04:32:48","guid":{"rendered":"http:\/\/www.mirandabanda.org\/cogblog\/?p=100"},"modified":"2011-03-06T08:15:23","modified_gmt":"2011-03-06T16:15:23","slug":"an-arranged-marriage","status":"publish","type":"post","link":"http:\/\/www.mirandabanda.org\/cogblog\/2011\/03\/04\/an-arranged-marriage\/","title":{"rendered":"An Arranged Marriage"},"content":{"rendered":"<p><html><body>Can an arranged marriage be a perfect one, or can only a love-match result in the truly perfect union?  Is perfection when two hearts beat as one, when Kate submits to Petruchio, or when Mr. accepts that Mrs. is wearing the trousers?  Personally I don&#8217;t think there&#8217;s such a thing as a perfect marriage.  All marriages, especially the long-lived ones take work.  There are complex issues to be resolved, which requires good communication and division of responsibility.  And of course a marriage won&#8217;t last unless the partners are fundamentally compatible.  And so it is with the two senior partners in the Cog JIT VM, the CoInterpreter, older spouse full of experience (the old interpreter, facelifted for the new context, the existing primitive set), and the Cogit, the younger partner, creative tear-away, needing lots of support from their other half, but bringing real energy to the marriage.<\/p>\n<p>But is it prudent, the anxious parents wonder, to arrange a marriage between these two souls in the first place?  After all many JITs don&#8217;t have an interpreter.  Well, doing without an interpreter means having to JIT all code at all times and this can be very tricky.  For example, looking back at the <a href=\"http:\/\/www.mirandabanda.org\/cogblog\/2011\/03\/01\/build-me-a-jit-as-fast-as-you-can\/\">Inline Cacheing<\/a> post, think what has to happen when a send miss requires the allocation of a Closed PIC but the system runs out of code memory and needs to do a reclamation to free up code memory.  It has to keep hold of the method containing the send site and the old and new target methods while these are moving beneath its feet as the reclamation compacts the code in the machine code zone.  Or consider being faced with a huge autogenerated bytecode method whose jitted form may be ten times larger.  The former problem is tricky; the latter  is often terminal.<\/p>\n<p><i>Aside: You may ask why restrict the amount of memory used to generate code?  One reason is to bound footprint, but a better one is to increase performance; a smaller working set can result in far better instruction cache performance and hence better overall performance even if code reclamations are common.  Still better for a dynamic language is that a limited contiguous code space is extremely easy to manage, for example when scanning all send sites in machine code to unlink sends when methods are redefined.  Hence the way I&#8217;ve always implemented JITs is to compile code in a fixed-size space (the size of which can be determined at startup).  It works well.<\/i><\/p>\n<p>Further, specfic to Cog, the precursor StackInterpreter already had lots of infrastructure I needed to either use directly or carry forward in some way, such as the context-to-stack mapping machinery and the existing primitive set.  So a CoInterpreter solves a number of problems.  It is already the home for the existing primitive set; it is a fall-back to interpreted execution at times when it would be tricky to continue in machine code (such as during machine code reclamations); it allows avoiding jitting code in unproductive cases (seldom used or huge methods).<\/p>\n<p><H2>Stacked to Attract<\/H2><br \/>\nThe most fundamental area of compatibility is the stack, and we choose two different formats to allow interpreter and JIT to share the Smalltalk stack, and carefully manage the C stack to allow the Cogit to call on services in the CoInterpreter.  If you haven&#8217;t already done so you might like to read <a href=\"http:\/\/www.mirandabanda.org\/cogblog\/2009\/01\/14\/under-cover-contexts-and-the-big-frame-up\/\">the post on context to stack mapping<\/a> that gives an in-depth account of Smalltalk stack management in Cog.  In the StackInterpreter there was a single frame format:<font color=\"#000000\"><\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver for method activations\/closure for block activations<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argN<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&#8217;s method ip\/base frame&#8217;s sender context<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved fp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame flags (num args, is block flag, has context flag)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context (uninitialized)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first temp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nth temp<\/p>\n<p>I was alarmed to read in <\/font><a href=\"http:\/\/www.google.com\/search?rls=en&#038;q=The+development+of+the+HiPE+system:+design+and+experience+report\">the paper on the HiPE (High-Performance Erlang) VM<\/a><font color=\"#000000\"> that the implementors decided to keep the interpreter and machine code stacks separate.  The paper mentions the apparently many bugs they had keeping the two different kinds of frames on the same stack, that the co-located scheme was abandoned and then goes into some detail explaining the difficulties keeping the two stacks separate imposes.  If some thought is given to how the two kinds of frame can interface I contend there is manageable complexity and nothing particularly hairy about the approach and I offer Cog as an existence proof.<\/p>\n<p>The two keys to the interpreter frame format are a) that it support the existing interpreter, hence having much the same layout as the above and b) that an interpreter caller frame can be returned to via a native return instruction executed by a machine code callee frame.  Returning from machine code to a specific bytecode in an interpreted method can&#8217;t be easily done with a single return pointer (it <\/font><font color=\"#000000\"><i>can<\/i><\/font><font color=\"#000000\"> be done if one is prepared to synthesize a thunk of machine code for each particular return, but this doesn&#8217;t seem very sensible to me).  Instead, the native return address can be that of a sequence of code that trampolines control back into the interpreter.  We must be able to return to the interpreter from many points; for example in the middle of a process switch primitive, called from machine code that finds that the target process has an interpreted frame for its suspendedContext.  Hence we establish a setjmp handler immediately prior to entry into the interpreter and return to the interpreter via longjmp.  I&#8217;ll come back to<\/font><font color=\"#000000\"> cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceCaptureCStackPointers<\/font><font color=\"#000000\"> later.<\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for initialization<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>enterSmalltalkExecutiveImplementation<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Main entry-point into the interpreter at each execution level, where an execution<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; level is either the start of execution or reentry for a callback.  Capture the C stack<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pointers so that calls from machine-code into the C run-time occur at this level.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the actual implementation, separated from enterSmalltalkExecutive so the<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; simulator can wrap it in an exception handler and hence simulate the setjmp\/longjmp.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">&gt;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertCStackWellAligned<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceCaptureCStackPointers<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Setjmp for reentry into interpreter from elsewhere, e.g. machine-code trampolines.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sigset:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmp:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnToExecutive:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">postContextSwitch:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceReturnToInterpreterPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExecutionPointe:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">s:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">imbar:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">interpret<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"><\/p>\n<p>In Smalltalk the setjmp\/longjmp pair is simulated via exception handling<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">Notification<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">subclass:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#ReenterInterpreter<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">instanceVariableNames:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;returnValue&#8217;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">classVariableNames:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8221;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">poolDictionaries:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8221;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">category:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;VMMaker-JITSimulation&#8217;<\/font><font color=\"#000000\"><\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for cog jit support<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>sigset: <\/b><font color=\"#000080\">aJumpBuf<\/font><font color=\"#000000\"> <\/font><b>jmp:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">sigSaveMask<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Hack simulation of sigsetjmp\/siglongjmp.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assign to reenterInterpreter the exception that when<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raised simulates a longjmp back to the interpreter.&quot;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">reenterInterpreter<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">ReenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">yourself<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">0<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>siglong:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">aJumpBuf<\/font><font color=\"#000000\"> <\/font><b>jmp:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Hack simulation of sigsetjmp\/siglongjmp.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal the exception that simulates a longjmp back to the interpreter.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">aJumpBuf<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExecutionPointe:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">s:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">imbar:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">aJumpBuf<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\">;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">signal<\/font><font color=\"#000000\"><\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for initialization<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>enterSmalltalkExecutive<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Main entry-point into the interpreter at each execution level, where an<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; execution level is either the start of execution or reentry for a callback.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>cmacro:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;() enterSmalltalkExecutiveImplementation()&#8217;<\/font><font color=\"#000000\">&gt;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Simulation of the setjmp in enterSmalltalkExecutiveImplementation for reentry into interpreter.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#800080\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">enterSmalltalkExecutiveImplementation<\/font><font color=\"#800080\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">on:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">ReenterInterpreter<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">do:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">ex<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">return:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReturnToInterpreter<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">whileTrue<\/font><font color=\"#000000\"><\/p>\n<p>We then save the bytecode pc to at which to resume interpretation in an additional interpreter frame slot.  Hence in Cog an interpreter frame has the following format:<\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver for method activations\/closure for block activations<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argN<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&#8217;s saved ip\/this stackPage (for a base frame)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved fp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context (initialized to nil)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame flags (num args, is block, has context)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved method bytecode pc<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first temp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nth temp<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for trampolines<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>ceReturnToInterpreter:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">anOop<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>api<\/b><\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isIntegerObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">anOop<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addressCouldBeObj:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">anOop<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">not<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setStackPageAndLimit:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExecutionPointe:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">s:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPointer<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">imbar:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">push:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">anOop<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">siglong:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmp:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReturnToInterpreter<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\"><\/p>\n<p>Since with the JIT the VM spends the bulk of its time in machine code and since the JIT can use knowledge such as the method&#8217;s argument count at compile-time we can make the machine code frame two slots smaller:<\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver for method activations\/closure for block activations<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argN<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&#8217;s saved ip\/this stackPage (for a base frame)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved fp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machine-code method and lsb flags (has context, is block)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context (initialized to nil)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first temp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nth temp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nSince machine code methods are aligned on an 8-byte bounday the least signficant three bits of the method address are zero and can be used for three flags, two of which are used (had context and is block); see <\/font><b>initializeFrameIndices<\/b><font color=\"#000000\"> below.  The smallest frame, a zero-argument method with no local temps hence looks like<\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&#8217;s saved ip<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved fp<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;machine-code method and lsb flags<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<\/p>\n<p>The minimum frame size is important; it defines the maximum number of contexts that may be allocated to flush a stack page to the heap, for which the garbage collector maintains reserve free space.  Compared to a typical C frame layout method and context are extra.  The former makes finding the metadata associated with a machine code frame (its argument count etc) trivial since all this is accessible via the machine code method.  The context slot is required to allow the Smalltalk-specific mapping of stack frames to contexts.  Of course the two formats mean that the CoInterpreter, which naturally inherits from the StackInterpreter must provide different offsets for the receiver, and in a number of cases must implement two variants of an accessor depending on the frame format:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoInterpreter class methods for initialization<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>initializeFrameIndices<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Format of a stack frame.  Word-sized indices relative to the frame pointer.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Terminology<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frames are either single (have no context) or married (have a context).<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Contexts are either single (exist on the heap), married (have a context) or widowed (had a frame that has exited).<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stacks grow down:<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver for method activations\/closure for block activations<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg0<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argN<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caller&#8217;s saved ip\/this stackPage (for a base frame)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved fp<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context (initialized to nil)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame flags (interpreter only)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved method ip (initialized to 0; interpreter only)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first temp<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp-&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nth temp<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In an interpreter frame<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame flags holds<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the number of arguments (since argument temporaries are above the frame)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the flag for a block activation<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and the flag indicating if the context field is valid (whether the frame is married).<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saved method ip holds the saved method ip when the callee frame is a machine code frame.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is because the saved method ip is actually the ceReturnToInterpreterTrampoline address.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In a machine code frame<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the flag indicating if the context is valid is the least significant bit of the method pointer<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the flag for a block activation is the next most significant bit of the method pointer<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interpreter frames are distinguished from method frames by the method field which will<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be a pointer into the heap for an interpreter frame and a pointer into the method zone for<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a machine code frame.<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The first frame in a stack page is the baseFrame and is marked as such by a saved fp being its stackPage,<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in which case the first word on the stack is the caller context (possibly hybrid) beneath the base frame.&quot;<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxSavedFP<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFrameFlags<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxThisContext<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxMFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxSavedFP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxThisContext<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">2<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxIFrameFlags<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">3<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Can find numArgs, needed for fast temp access. args are above fxCallerSavedIP.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Can find &#8220;is block&#8221; bit<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Can find &#8220;has context&#8221; bit&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxIFSavedIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">4<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxIFReceiver<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">5<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">fxMFReceiver<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">3<\/font><font color=\"#000000\">.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;For debugging nil out values that differ in the StackInterpreter.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FrameSlots<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">IFrameSlots<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">MFrameSlots<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxMFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxCallerSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;In Cog a base frame&#8217;s caller context is stored on the first word of the stack page.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxCallerContext<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxSavedFP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxSavedFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxThisContext<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxThisContext<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxFrameFlags<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxIFrameFlags<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFrameFlags<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxIFSavedIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFSavedIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxReceiver<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">#undeclared<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSymbol<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxIFReceiver<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxIFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">FoxMFReceiver<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">fxMFReceiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;N.B.  There is room for one more flag given the current 8 byte alignment of methods (which<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is at least needed to distinguish the checked and uncecked entry points by their alignment.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">MFMethodFlagHasContextFlag<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">MFMethodFlagIsBlockFlag<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">MFMethodFlagsMask<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#404040\">MFMethodFlagHasContextFlag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MFMethodFlagIsBlockFlag<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">MFMethodMask<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#404040\">MFMethodFlagsMask<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">negated<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for frame access<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>frameMethodObject:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mframeHomeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodObject<\/font><font color=\"#000000\">]<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">]<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>frameReceiver:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mframeReceiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">]<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeReceiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">]<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>iframeReceiver:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FoxIFReceiver<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>mframeReceiver:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FoxMFReceiver<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>iframeNumArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;See encodeFrameFieldHasContext:numArgs:&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FoxIFrameFlags<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>mframeNumArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mframeCogMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">theFP<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmNumArgs<\/font><font color=\"#000000\"><br \/>\netc.<\/p>\n<p>Returning from the interpreter to machine-code is quite straight-forward; the interpreter can test the return pc and since all machine code pcs are lower than the object heap (another convenient consequence of having a fixed-size code zone) the interpreter simply compares against the heap base (localIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\">):<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for return bytecodes<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>commonCallerReturn<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Return to the previous context\/frame (sender for method activations, caller for block activations).&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">callersFPOrNull<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#callersFPOrNull<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>sharedCodeNamed:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;commonCallerReturn&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>inCase:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">125<\/font><font color=\"#000000\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;returnTopFromBlock&quot;<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">callersFPOrNull<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">frameCallerFP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">callersFPOrNull<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;baseFrame&quot;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">baseFP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">baseFrameReturn<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">frameCallerSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">localSP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">frameStackedReceiverOffset:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">callersFPOrNull<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">~=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceReturnToInterpreterPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#008080\">&quot;localIP in the cog method zone indicates a return to machine code.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnToMachineCodeFrame<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pointerForOop:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">internalStackTopPut:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localReturnValue<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchNextBytecode<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>returnToMachineCodeFrame<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Return to the previous context\/frame after assigning localIP, localSP and localFP.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertCStackWellAligned<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExecutionPointe:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localFP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">s:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localSP<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">imbar:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">internalStackTopPut:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localIP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">internalPush:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">localReturnValue<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">externalizeFPandSP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceEnterCogCodePopReceiverReg<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\"><\/p>\n<p>The <\/font><font color=\"#000080\">baseFrameReturn<\/font><font color=\"#000000\"> phrase is necessary since the Smalltalk stack is actually organized as a set of small (4kb) stack pages, reasons for which are explained in the stack mapping post.  Handling a base frame return in machine code is tricky since by the time the return instruction has executed the frame has already been torn down (the frame pointer set to the saved frame pointer, which in the case of a base frame is zero).  Base frames are connected to other pages or the rest of the sender context chain via a reference to the sender context (which may itself be a context on the sender stack page).  So we must be able to locate the spouse context and sender context of a base frame after the base frame has been torn down.  The uppermost top two words on a stack page hold these two contexts (&lt;blush&gt;<\/font><font color=\"#000000\">and yes I should define accessors for these&lt;\/blush&gt;).  Again the use of a special return address causes the VM to jump to the code for a machine code base frame return.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for trampolines<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>ceBaseFrameReturn:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Return across a stack page boundary.  The context to return to (which may be married)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is stored in the first word of the stack.  We get here when a return instruction jumps<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to the ceBaseFrameReturn: address that is the return pc for base frames.  A consequence<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of this is that the current frame is no longer valid since an interrupt may have overwritten<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; its state as soon as the stack pointer has been cut-back beyond the return pc.  So to have<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a context to send the cannotReturn: message to we also store the base frame&#8217;s context<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in the second word of the stack page.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>api<\/b><\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnFrom<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">isAContext<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newPage<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">frameAbove<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;StackPage *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#newPage<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;StackPage *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#frameAbove<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;char *&#8217;<\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">baseAddress<\/font><font color=\"#000000\">.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;The stack page is effectively free now, so free it.  We must free it to be<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; correct in determining if contextToReturnTo is still married, and in case<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; makeBaseFrameFor: cogs a method, which may cause a code compaction,<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in which case the frame must be free to avoid the relocation machinery<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tracing the dead frame.  Since freeing now temporarily violates the page-list<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ordering invariant, use the assert-free version.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">freeStackPageNoAssert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">isAContext<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isContext:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">isAContext<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isStillMarriedContext:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">frameOfMarriedContext:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPageFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headFP<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">stackPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headSP<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#008080\">&quot;Returning to some interior frame, presumably because of a sender assignment.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Move the frames above to another page (they may be in use, e.g. via coroutining).<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Make the interior frame the top frame.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#6B6767\">frameAbove<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">findFrameAbove:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inPage:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;Since we&#8217;ve just deallocated a page we know that newStackPage won&#8217;t deallocate an existing one.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#6B6767\">newPage<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">newStackPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newPage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">moveFramesIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">through:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">frameAbove<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">toPage:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">markStackPageMostRecentlyUsed:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headFP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">stackPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headSP<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">]<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#6B6767\">isAContext<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isIntegerObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">(<\/font><font color=\"#000000\">objectMemory<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">fetchPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">InstructionPointerIndex<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ofObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#800000\">)<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#6B6767\">contextToReturnFrom<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">baseAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">tearDownAndRebuildFrameForCannotReturnBaseFrameReturnFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnFrom<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">returnValue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">externalCannotReturn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">from:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnFrom<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;void the instructionPointer to stop it being incorrectly updated in a code<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compaction in makeBaseFrameFor:.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">makeBaseFrameFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headFP<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">stackPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">headSP<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setStackPageAndLimit:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">thePage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPageFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPage<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">push:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\">.<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceEnterCogCodePopReceiverReg<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackTop<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceReturnToInterpreterPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackTopPut:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;a.k.a. pop saved ip then push result&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">checkIsStillMarriedContext:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">contextToReturnTo<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">currentFP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">siglong:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmp:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReturnToInterpreter<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">nil<\/font><\/p>\n<p>So between an interpreter caller and a machine code callee the return address must be ceReturnToInterpreterTrampoline and the caller&#8217;s iframeSavedIP: must be valid, whereas between a machine-code caller and an interpreted callee the machine code return address is fine.  Similarly, the convention for the top frame on other than the active stack page is that it always contain a machine-code pc; ceReturnToInterpreter for an interpreted frame and the machine code return address for a machine code frame.  The return pc for a base frame is ceBaseFrameReturnTrampoline.<\/p>\n<p><H2>Managing the C Stack<\/H2><br \/>\nSo far we&#8217;ve seen how trampolines are used to jump from machine-code to C, and how setjmp\/longjmp can be used to get back into the interpreter from any point.  But how do we manage the C stack so that we can call into the run-time and know that the C frame containing the setjmp is valid?  Since the C stack is contiguous and grows in one direction (typically down) &#8211; at least on the OS&#8217;s Cog runs on today (Windows, Mac OS X, linux) &#8211; all that&#8217;s needed is to record the C stack in <b>enterSmalltalkExecutiveImplementation<\/b> via <font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceCaptureCStackPointers<\/font><font color=\"#000000\">.  Any jump into machine code will occur form a point further down the C stack.  Any jump back to the C stack discards those intervening frames, cutting the C stack back to the activation of <\/font><b>enterSmalltalkExecutiveImplementation<\/b><font color=\"#000000\">.  What we <\/font><font color=\"#000000\"><i>mustn&#8217;t<\/i><\/font><font color=\"#000000\"> do is capture the C stack pointers every time we jump into machine-code.  That could cause uncontrolled stack growth.<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Cogit methods for initialization<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>generateStackPointerCapture<\/b><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Generate a routine ceCaptureCStackPointers that will capture the C stack pointer,<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and, if it is in use, the C frame pointer.  These are used in trampolines to call<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run-time routines in the interpreter from machine-code.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">oldMethodZoneBase<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">oldTrampolineTableIndex<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertCStackWellAligned<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">oldMethodZoneBase<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZoneBase<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">oldTrampolineTableIndex<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">trampolineTableIndex<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">generateCaptureCStackPointers:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">perform:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#ceCaptureCStackPointers<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSymbol<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">cFramePointerInUse<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isCFramePointerInUse<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">methodZoneBase<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">oldMethodZoneBase<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">trampolineTableIndex<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">oldTrampolineTableIndex<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">generateCaptureCStackPointers:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>generateCaptureCStackPointers:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">captureFramePointer<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Generate the routine that writes the current values of the C frame and stack pointers into<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; variables.  These are used to establish the C stack in trampolines back into the C run-time.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is a presumptuous quick hack for x86.  It is presumptuous for two reasons.  Firstly<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the system&#8217;s frame and stack pointers may differ from those we use in generated code,<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.g. on register-rich RISCs.  Secondly the ABI may not support a simple frameless call<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; as written here (for example 128-bit stack alignment on Mac OS X).&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">startAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">allocateOpcodes:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">32<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bytecodes:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">initialPC<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">endPC<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">numAbstractOpcodes<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">startAddress<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZoneBase<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">captureFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FPReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Aw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cFramePointerAddress<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Capture the stack pointer prior to the call.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">leafCallStackPointerDelta<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SPReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Aw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cStackPointerAddress<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SPReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">AddCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">leafCallStackPointerDelta<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Aw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cStackPointerAddress<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">RetN:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">outputInstructionsForGeneratedRuntimeAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">startAddress<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordGeneratedRunTime:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;ceCaptureCStackPointers&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">startAddress<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">ceCaptureCStackPointers<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">startAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void (*)(void)&#8217;<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>isCFramePointerInUse<\/b><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;This should be implemented externally, e.g. in sqPlatMain.c.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">true<\/font><font color=\"#000000\"><\/p>\n<p>and from e.g. platforms\/Mac OS\/vm\/sqMacMain.c<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">#if COGVM<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">\/*<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * Support code for Cog.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * a) Answer whether the C frame pointer is in use, for capture of the C stack<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> *    pointers.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> *\/<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"># if defined(i386) || defined(__i386) || defined(__i386__)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">\/*<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * Cog has already captured CStackPointer before calling this routine.  Record<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * the original value, capture the pointers again and determine if CFramePointer<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * lies between the two stack pointers and hence is likely in use.  This is<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * necessary since optimizing C compilers for x86 may use %ebp as a general-<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> * purpose register, in which case it must not be captured.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> *\/<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">int<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">isCFramePointerInUse()<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">{<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">extern unsigned long CStackPointer, CFramePointer;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">extern void (*ceCaptureCStackPointers)(void);<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">unsigned long currentCSP = CStackPointer;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">currentCSP = CStackPointer;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">ceCaptureCStackPointers();<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">assert(CStackPointer &lt; currentCSP);<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">return CFramePointer &gt;= CStackPointer &amp;&amp; CFramePointer &lt;= currentCSP;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">}<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"># endif \/* defined(i386) || defined(__i386) || defined(__i386__) *\/<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">#endif \/* COGVM *\/<\/font><br \/>\n<font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n<\/font>So two variables define the C stack, CStackPointer and CFramePointer.<font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">  <\/font>On x86 the machine-code for <font color=\"#000080\">ceCaptureCStackPointers<\/font> looks like the following; the addl $4, %eax skips the return pc.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ceCaptureCStackPointers:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000418: movl %ebp, %ds:0x10d530 : 89 2D 30 D5 10 00\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10d530 = &amp;CFramePointer<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000041e: movl %esp, %eax : 89 E0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000420: addl $0x00000004, %eax : 83 C0 04<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000423: movl %eax, %ds:0x10d538 : A3 38 D5 10 00 \t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10d538 = &amp;CStackPointer<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000428: ret  : C3<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000429: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042a: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042b: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042c: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042d: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042e: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000042f: nop  : 90 <\/p>\n<p>The C stack needs to be captured and restored on callbacks.  Lets follow this through assuming a call to the FFI primitive from machine-code.  First of all the machine-code method calls the interpreter&#8217;s FFI primitive, using the current values of CFramePointer and CStackPointer as established in a previous <b>enterSmalltalkExecutiveImplementation<\/b> invocation.  The primitive then marshalls arguments to the C stack and calls out to external code.  If that code calls-back into the VM the C stack between the FFI call-out and the call-back must be preserved for the VM to return from the call-back.  When the callback enters the VM it must do so via <b>enterSmalltalkExecutiveImplementation<\/b>, and set-up a new reenterInterpreter jmpbuf for jumping into the interpreter at this level.  So callbackEnter: must both save and restore the C stack pointers <i>and<\/i> the reenterInterpreter jmpbuf.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>CoInterpreter methods for callback support<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>callbackEnter:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">callbackID<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Re-enter the interpreter for executing a callback&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">currentCStackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">currentCFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedReenterInterpreter<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#6B6767\">wasInMachineCode<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">calledFromMachineCode<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>volatile<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>export:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#currentCStackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void *&#8217;<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#currentCFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void *&#8217;<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#callbackID<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;sqInt *&#8217;<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#savedReenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;jmp_buf&#8217;<\/font><font color=\"#000000\">&gt;<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Check if we&#8217;ve exceeded the callback depth&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asserta:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MaxJumpBuf<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">wasInMachineCode<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">calledFromMachineCode<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\">.<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Suspend the currently active process&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">suspendedCallbacks<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">activeProcess<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;We need to preserve newMethod explicitly since it is not activated yet<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and therefore no context has been created for it. If the caller primitive<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for any reason decides to fail we need to make sure we execute the correct<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method and not the one &#8216;last used&#8217; in the call back&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">suspendedMethods<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">transferTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">wakeHighestPriority<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">from:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CSCallbackLeave<\/font><font color=\"#000000\">.<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Typically, invoking the callback means that some semaphore has been <\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signaled to indicate the callback. Force an interrupt check as soon as possible.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">forceInterruptCheck<\/font><font color=\"#000000\">.<\/font><\/p>\n<p>i.e. from here:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Save the previous CStackPointers and interpreter entry jmp_buf.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">currentCStackPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getCStackPointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">currentCFramePointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getCFramePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mem:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedReenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void *&#8217;<\/font><font color=\"#000000\">)<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">cp:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">y:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sizeof:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;jmp_buf&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSymbol<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertCStackWellAligned<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setjmp:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">jmpBuf<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;Fill in callbackID&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000080\">callbackID<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\">.<\/font><br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">enterSmalltalkExecutive<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;NOTREACHED&quot;<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Restore the previous CStackPointers and interpreter entry jmp_buf.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setCStackPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">currentCStackPointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setCFramePointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">currentCFramePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mem:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">reenterInterpreter<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">cp:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedReenterInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void *&#8217;<\/font><font color=\"#000000\">)<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">y:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sizeof:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;jmp_buf&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSymbol<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><br \/>\n:upto here<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Transfer back to the previous process so that caller can push result&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">putToSleep:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">activeProcess<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">yieldingIf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">preemptionYields<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">transferTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">suspendedCallbacks<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">from:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CSCallbackLeave<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">suspendedMethods<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;see comment above&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">argumentCount<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">argumentCountOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">wasInMachineCode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">calledFromMachineCode<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">iframeSavedIP:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceReturnToInterpreterPC<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#008080\">&quot;Even if the context was flushed to the heap and rebuilt in transferTo:from:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  above it will remain an interpreted frame because the context&#8217;s pc would<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  remain a bytecode pc.  So the instructionPointer must also be a bytecode pc.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isMachineCodeFrame:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">not<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">instructionPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">startOfMemory<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">primFailCode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">jmpDepth<\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">true<\/font><\/p>\n<p>when the return from callback is done longjmp-ing back to the setjmp the C stack and reenterInterreter set-up in <b>enterSmalltalkExecutiveImplementation<\/b> is cut-back and restored to their previous values.<\/p>\n<p><H2>Keeping Up Appearances<\/H2><br \/>\nOf course while the relationship between CoInterpreter and Cogit has to work in private (i.e. when compiled to C and executed in use) it also has to put on a good show in social settings.  When being developed, simulated machine code must also be able to gain intimate access the CoInterpreter&#8217;s internals.  This is on the one hand about faithful simulation, and on the other hand about the difference between, in the production vm, machine code calling into C code, and, in the simulator, turning a machine code call into a Smalltalk message send to a given receiver.  This needs to be done when simulating run-time calls, and so we may as well use the same mechanism for accessing CoInterpreter variables as well.  This of course takes us into the heart of the machine-code simulator, and I think this bit is particularly interesting.<\/p>\n<p>A simple way of breaking-out of machine code is simply to dole out illegal addresses for variables and run-time routines:<\/p>\n<p><i>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cogit methods for initialization<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>simulatedAddressFor:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">anObject<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Answer a simulated address for a block or a symbol.  This is an address that<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; can be called, read or written by generated machine code, and will be mapped<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; into a Smalltalk message send or block evaluation.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">simulatedAddresses<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">anObject<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifAbsentPut:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">simulatedAddresses<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">size<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">101<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">negated<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addressSpaceMask<\/font><font color=\"#000000\">]<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>simulatedVariableAddress:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">getter<\/font><font color=\"#000000\"> <\/font><b>in:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Answer a simulated variable.  This is a variable whose value can be read<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; by generated machine code.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">simulatedAddressFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getter<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">simulatedVariableGetters<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifAbsentPut:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">MessageSend<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getter<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#6B6767\">address<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>simulatedReadWriteVariableAddress:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">getter<\/font><font color=\"#000000\"> <\/font><b>in:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Answer a simulated variable.  This is a variable whose value can be read<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and written by generated machine code.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">simulatedVariableAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">in:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">simulatedVariableSetters<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifAbsentPut:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">setter<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">setter<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">getter<\/font><font color=\"#000080\">,<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;:&#8217;<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSymbol<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">value<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">receiver<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">perform:<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">setter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">value<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#6B6767\">address<\/font><\/p>\n<p><i>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoInterpreter methods for trampoline support<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>framePointerAddress<\/b><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>api<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>returnTypeC:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#usqInt<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCode:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addressOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asUnsignedInteger<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">inSmalltalk:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">simulatedReadWriteVariableAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#framePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">in:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\">]<br \/>\n<\/font><br \/>\n<i>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cogit methods for trampoline support<\/i><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>genLoadStackPointers<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Switch back to the Smalltalk stack. Assign SPReg first<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; because typically it is used immediately afterwards.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveAw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPointerAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SPReg<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveAw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">framePointerAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FPReg<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>genSaveStackPointers<\/b><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">FPReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Aw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">framePointerAddress<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SPReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Aw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPointerAddress<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"><br \/>\n<\/font><br \/>\nThe Bochs simulator will rase an exception whenever machine code tries to access an out-of-bounds address, which the internals of the Bochs plugin catch and turn into a primitive failure:<\/p>\n<p>platforms\/Cross\/plugins\/BochsIA32Plugin\/sqBochsIA32Plugin.cpp:<\/p>\n<p><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runCPUInSizeMinAddressReadWrite(void *cpu, void *memory, ulong byteSize,<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ulong minAddr, ulong minWriteMaxExecAddr)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX_CPU_C *anx86 = (BX_CPU_C *)cpu;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (anx86 != &amp;bx_cpu)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return BadCPUInstance;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theMemory = (unsigned char *)memory;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theMemorySize = byteSize;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minReadAddress = minAddr;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minWriteAddress = minWriteMaxExecAddr;<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((theErrorAcorn = setjmp(anx86-&gt;jmp_buf_env)) != 0) {<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anx86-&gt;gen_reg[BX_32BIT_REG_EIP].dword.erx = anx86-&gt;prev_rip;<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return theErrorAcorn;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blidx = 0;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= minWriteMaxExecAddr &gt; 0 ? minWriteMaxExecAddr &#8211; 1 : 0;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_DS].cache.u.segment.limit_scaled =<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_SS].cache.u.segment.limit_scaled = byteSize;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.limit = minWriteMaxExecAddr &gt;&gt; 16;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_DS].cache.u.segment.limit =<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_cpu.sregs[BX_SEG_REG_SS].cache.u.segment.limit = byteSize &gt;&gt; 16;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anx86-&gt;eipFetchPtr = theMemory;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anx86-&gt;eipPageWindowSize = minWriteMaxExecAddr;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx_pc_system.kill_bochs_request = 0;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anx86-&gt;cpu_loop(0 \/* = &quot;run forever&quot; until exception or interupt *\/);<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (anx86-&gt;stop_reason != STOP_NO_REASON) {<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anx86-&gt;gen_reg[BX_32BIT_REG_EIP].dword.erx = anx86-&gt;prev_rip;<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (theErrorAcorn == NoError)<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theErrorAcorn = ExecutionError;<br \/>\n*\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return theErrorAcorn;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return blidx == 0 ? 0 : SomethingLoggedError;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/font><br \/>\n&#8230;<br \/>\n<font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void BX_CPU_C::access_read_linear(bx_address laddr, unsigned len, unsigned curr_pl, unsigned xlate_rw, void *data)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (laddr &lt; minReadAddress<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || laddr + len &gt; theMemorySize)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;longjmp(bx_cpu.jmp_buf_env,MemoryBoundsError);<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_read_address = laddr; \/* for RMW write cycles below *\/<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(data, theMemory + laddr, len);<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/font><\/p>\n<p>Up in Smalltalk the primitive failure gets turned into a suitable exception:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>BochsIA32Alien methods for primitives<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>primitiveRunInMemory:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Bitmap|ByteArray&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>minimumAddress:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>readOnlyBelow:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Run the receiver using the argument as the store.  Origin the argument at 0. i.e. the first byte of the<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memoryArray is address 0.  Make addresses below minimumAddress illegal.  Convert out-of-range<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call, jump and memory read\/writes into register instructions into ProcessorSimulationTrap signals.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>primitive:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;primitiveRunInMemoryMinimumAddressReadWrite&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>module:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;BochsIA32Plugin&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>error:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">ec<\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#6B6767\">ec<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;inappropriate operation&#8217;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleExecutionPrimitiveFailureIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">minimumAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumAddress<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">readOnlyBelow:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">reportPrimitiveFailure<\/font><font color=\"#000000\">]<\/p>\n<p><\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>BochsIA32Alien methods for error handling<\/i><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>handleExecutionPrimitiveFailureIn:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Bitmap|ByteArray&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>minimumAddress:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>readOnlyBelow:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Handle an execution primitive failure.  Convert out-of-range call and absolute<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memory read into register instructions into ProcessorSimulationTrap signals.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;self printIntegerRegistersOn: Transcript&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;self printRegistersOn: Transcript&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">opcode<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#6B6767\">pc<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">eip<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">between:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">byteSize<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#6B6767\">opcode<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">perform:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#404040\">OpcodeExceptionMap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">opcode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pc<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">reportPrimitiveFailure<\/p>\n<p><\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>BochsIA32Alien class methods for class initialization<\/i><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>initialize<\/b><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;BochsIA32Alien initialize&quot;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">PostBuildStackDelta<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\">.<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">OpcodeExceptionMap<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">Array<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">256<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">withAll:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleExecutionPrimitiveFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">.<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#404040\">OpcodeExceptionMap<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleCallFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleJmpFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">retOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleRetFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movALObOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovALObFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movObALOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovObALFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movGvEvOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovGvEvFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movEvGvOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovEvGvFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movGbEbOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovGbEbFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\">;<\/font><font color=\"#000080\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">movEbGbOpcode<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#handleMovEbGbFailureAt:in:readOnlyBelow:<\/font><font color=\"#000000\"><\/p>\n<p>and e.g.<\/p>\n<p><\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>BochsIA32Alien methods for error handling<\/i><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>handleCallFailureAt:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>in:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Bitmap|ByteArray&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>readOnlyBelow:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Convert an execution primitive failure for a call into a ProcessorSimulationTrap signal.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\">  <\/font><font color=\"#6B6767\">relativeJump<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">relativeJump<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bigEndian:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">ProcessorSimulationTrap<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">pc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">nextpc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">5<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">address:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">5<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">relativeJump<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">signedIntToLong<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">type:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#call<\/font><font color=\"#000000\">)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">signal<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>handleMovGvEvFailureAt:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>in:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Bitmap|ByteArray&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>readOnlyBelow:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">minimumWritableAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Convert an execution primitive failure for a register load into a ProcessorSimulationTrap signal.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">modrmByte<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">^<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#800080\">(<\/font><font color=\"#6B6767\">modrmByte<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rC7<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16r5<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;ModRegInd &amp; disp32&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">ProcessorSimulationTrap<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">pc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">nextpc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">6<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">address:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">(<\/font><font color=\"#000080\">memoryArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">unsignedLongAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">3<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bigEndian:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">type:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#read<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">accessor:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">#(<\/font><font color=\"#000080\">eax:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ecx:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">edx:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ebx:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">esp:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ebp:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">esi:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">edi:<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">(<\/font><font color=\"#00EB00\">(<\/font><font color=\"#6B6767\">modrmByte<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">3<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">7<\/font><font color=\"#00EB00\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#800000\">)<\/font><font color=\"#800080\">)<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">signal<\/font><font color=\"#000000\">]<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">reportPrimitiveFailure<\/font><font color=\"#000000\">]<\/p>\n<p>The exception handler for ProcessorSimulationTraps is in the Cogit&#8217;s core machine-code simulation entry-point.  I&#8217;m going to include it warts and all, since I think there&#8217;s lots of interest here.  The exception handler almost right at the end.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>Cogit methods for simulation only<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>simulateCogCodeAt:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;&lt;Integer&gt;&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">stackZoneBase<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">stackZoneBase<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackZoneBase<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">eip:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#008000\">[<\/font><font color=\"#800080\">[<\/font><font color=\"#000000\">singleStep<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">[<\/font><font color=\"#00EB00\">[<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sp<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">stackZoneBase<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#EB8D00\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">halt<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordRegisters<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000000\">printRegisters<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB8D00\">[<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">printRegistersOn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">transcript<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordLastInstruction<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000000\">printInstructions<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB8D00\">[<\/font><font color=\"#000000\">Transcript<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">nextPutAll:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">lastNInstructions<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">last<\/font><font color=\"#000000\">;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cr<\/font><font color=\"#000000\">;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">flush<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#EB8D00\">(<\/font><font color=\"#000000\">breakPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isInteger<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB00EB\">[<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">breakPC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#0000FF\">[<\/font><font color=\"#000000\">breakBlock<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">value:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#0000FF\">]<\/font><font color=\"#EB00EB\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB00EB\">[<\/font><font color=\"#000000\">breakBlock<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">value:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#EB00EB\">]<\/font><font color=\"#EB8D00\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB8D00\">[<\/font><font color=\"#008080\">&quot;printRegisters := printInstructions := true&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;self reportLastNInstructions&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter printExternalHeadFrame&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter printFrameAndCallers: coInterpreter framePointer SP: coInterpreter stackPointer&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter shortPrintFrameAndCallers: coInterpreter framePointer&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter printFrame: processor fp WithSP: processor sp&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter printFrameAndCallers: processor fp SP: processor sp&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#008080\">&quot;coInterpreter shortPrintFrameAndCallers: processor fp&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;self disassembleMethodFor: processor pc&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">changed:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#byteCountText<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">halt:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;machine code breakpoint at &#8216;<\/font><font color=\"#000080\">,<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#EB00EB\">(<\/font><font color=\"#000000\">breakPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isInteger<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#0000FF\">[<\/font><font color=\"#000000\">breakPC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">hex<\/font><font color=\"#0000FF\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#0000FF\">[<\/font><font color=\"#000000\">String<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">streamContents:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">s<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">breakBlock<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">decompile<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">printOn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">s<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">indent:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#008000\">]<\/font><font color=\"#0000FF\">]<\/font><font color=\"#EB00EB\">)<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#00EB00\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">value<\/font><font color=\"#800000\">]<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;So that the Debugger&#8217;s Over steps over all this&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   <\/font><font color=\"#000000\">singleStep<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">[<\/font><font color=\"#000000\">processor<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">singleStepIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">minimumAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">guardPageSize<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">readOnlyBelow:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogCodeSize<\/font><font color=\"#800000\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">[<\/font><font color=\"#000000\">processor<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">runInMemory:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">minimumAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">guardPageSize<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">readOnlyBelow:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogCodeSize<\/font><font color=\"#800000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   <\/font><font color=\"#800000\">(<\/font><font color=\"#00EB00\">(<\/font><font color=\"#000000\">printRegisters<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#EB8D00\">[<\/font><font color=\"#000000\">printInstructions<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#00EB00\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#00EB00\">[<\/font><font color=\"#000000\">clickConfirm<\/font><font color=\"#00EB00\">]<\/font><font color=\"#800000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">[<\/font><font color=\"#00EB00\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">confirm:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;continue?&#8217;<\/font><font color=\"#00EB00\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#00EB00\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">halt<\/font><font color=\"#00EB00\">]<\/font><font color=\"#800000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   <\/font><font color=\"#800000\">true<\/font><font color=\"#800080\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">whileTrue<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">on:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">ProcessorSimulationTrap<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">do:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">ex<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleSimulationTrap:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ex<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">whileTrue<br \/>\n<\/font><br \/>\nOne of the first things to notice is that it&#8217;s peppered with useful expressions I can evaluate when in the debugger.  The second thing to notice is that when single-stepping this is like the In-Circuit-Emulator from the 22nd century.  You can define just about any break-point function you can imagine and assign it to breakBlock, and it&#8217;ll be evaluated every instruction.  The single-stepper can capture the last N instructions and register states so that one can look back at the instructions executed immediately before an error.  It will print individual instructions and the registers to the transcript.  It makes machine-code debugging verge on the enjoyable, and certainly leaves things like gdb in the dust.<\/p>\n<p>OK, so here&#8217;s the core exception handler<\/p>\n<p><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>Cogit methods for simulation only<\/i><\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>handleSimulationTrap:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">type<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">caseOf:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">{<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000080\">#read<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">-&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleReadSimulationTrap:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000000\">[<\/font><font color=\"#000080\">#write<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">-&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleWriteSimulationTrap:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000000\">[<\/font><font color=\"#000080\">#call<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">-&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleCallOrJumpSimulationTrap:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <\/font><font color=\"#000000\">[<\/font><font color=\"#000080\">#jump<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">-&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleCallOrJumpSimulationTrap:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">}<\/font><\/p>\n<p>and e.g.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>handleReadSimulationTrap:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">variableValue<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">variableValue<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">simulatedVariableGetters<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">value<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">processor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">perform:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">registerAccessor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">variableValue<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">signedIntToLong<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">nextpc<\/font><\/p>\n<p>and (gulp)<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>handleCallOrJumpSimulationTrap:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">evaluable<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedStackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedArgumentCount<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">rpc<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">evaluable<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">simulatedTrampolines<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">evaluable<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">isBlock<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#800080\">&#8216;aBlock; probably some plugin primitive&#8217;<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#6B6767\">evaluable<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">~~<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#ceBaseFrameReturn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExternalStackPointers<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">beginsWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;ceShort&#8217;<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">perform:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">with:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">type<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#call<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">processor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">simulateCallOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">nextpc:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">nextpc<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">memory:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordInstruction:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">{<\/font><font color=\"#800080\">&#8216;(simulated call of &#8216;<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;\/&#8217;<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;)&#8217;<\/font><font color=\"#000000\">}<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">processor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">simulateJumpCallOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">memory:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordInstruction:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">{<\/font><font color=\"#800080\">&#8216;(simulated jump to &#8216;<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aProcessorSimulationTrap<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">address<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;\/&#8217;<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;)&#8217;<\/font><font color=\"#000000\">}<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">savedFramePointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">framePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">savedStackPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">savedArgumentCount<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">argumentCount<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#008080\">&quot;self halt: evaluable selector.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   <\/font><font color=\"#6B6767\">evaluable<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">valueWithArguments:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">processor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">postCallArgumentsNumArgs:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">evaluable<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">in:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">on:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">ReenterMachineCode<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">do:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">ex<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">return:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assertValidExternalStackPointers<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Verify the stack layout assumption compileInterpreterPrimitive: makes, provided we&#8217;ve<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not called something that has built a frame, such as closure value or evaluate method, or<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switched frames, such as primitiveSignal, primitiveWait, primitiveResume, primitiveSuspend et al.&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">function<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">beginsWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;primitive&#8217;<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primFailCode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">#(<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">primitiveClosureValue<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveClosureValueWithArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveClosureValueNoContextSwitch<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">primitiveSignal<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveWait<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveResume<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveSuspend<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveYield<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">primitiveExecuteMethodArgsArray<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveExecuteMethod<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">primitivePerform<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitivePerformWithArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitivePerformInSuperclass<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">primitiveTerminateTo<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveStoreStackp<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">primitiveDoPrimitiveWithArgs<\/font><font color=\"#000000\">)<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">includes:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">function<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">framePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedStackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">(<\/font><font color=\"#6B6767\">savedArgumentCount<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#800000\">)<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPointer<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedFramePointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">framePointer<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">savedStackPointer<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackPointer<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">~~<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#continueNoReturn<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">recordInstruction:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">{<\/font><font color=\"#800080\">&#8216;(simulated return to &#8216;<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">retpcIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;)&#8217;<\/font><font color=\"#000000\">}<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#6B6767\">rpc<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">retpcIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#6B6767\">rpc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">codeBase<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#6B6767\">rpc<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">zoneLimit<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">processor<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">smashCallerSavedRegistersWithValuesFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16r80000000<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">by:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">simulateReturnIn:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;an oop result&quot;<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">==<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">[<\/font><font color=\"#000000\">#(<\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">continue<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">continueNoReturn<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">includes:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">result<\/font><font color=\"#800000\">]<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cResultRegister:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">result<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifNil:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#800000\">0<\/font><font color=\"#008000\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifNotNil:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isInteger<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#6B6767\">result<\/font><font color=\"#800080\">]<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#800000\">16rF00BA222<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/p>\n<p>Now <\/font><b>handleCallOrJumpSimulationTrap:<\/b><font color=\"#000000\"> is anything but simple, but it does a lot.  Its main complication comes from assert-checking.  Most of the time when the simulator sends a message to the CoInterpreter (e.g. that of a run-time routine) we expect that the stack frame has not changed when we return.  But for a particular set of primitives and run-time routines that isn&#8217;t so and hence the stack assertions must be avoided in their case.  On return to machine code any caller-saved registers could contain arbitrary values, and on reentry to machine code any and all registers could contain arbitrary values so we smash them to avoid values persisting in the simulated processor from the time of a simulated call.  This is also one place where the simulation of enilopmarts, jumps back into machine-code, has to be handled specially to avoid uncontrolled Smalltalk stack growth, henc the signal of ReenterMachineCode.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>Cogit methods for simulation only<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>simulateEnilopmart:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">enilopmartAddress<\/font><font color=\"#000000\"> <\/font><b>numArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">n<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>doNotGenerate<\/b><\/font><font color=\"#000000\">&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;Enter Cog code, popping the class reg and receiver from the stack<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and then returning to the address beneath them.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In the actual VM the enilopmart is a function pointer and so senders<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of this method end up calling the enilopmart to enter machine code.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In simulation we either need to start simulating execution (if we&#8217;re in<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the interpreter) or return to the simulation (if we&#8217;re in the run-time<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; called from machine code. We should also smash the register state<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; since, being an abnormal entry, no saved registers will be restored.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isOnRumpCStack:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sp<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackValue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">n<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">between:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">guardPageSize<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">zoneLimit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">printInstructions<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">printRegisters<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">printExternalHeadFrame<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">processor<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">smashRegistersWithValuesFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16r80000000<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">by:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\">;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">simulateLeafCallOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">enilopmartAddress<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">nextpc:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rBADF00D<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">memory:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">memory<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;If we&#8217;re already simulating in the context of machine code then<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this will take us back to handleCallSimulationTrap:.  Otherwise<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start executing machine code in the simulator.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">ReenterMachineCode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">returnValue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#continueNoReturn<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">signal<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">simulateCogCodeAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">enilopmartAddress<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;We should either longjmp back to the interpreter or<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stay in machine code so control should not reach here.&quot;<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"><\/p>\n<p>With the above machinery machine code can freely access variables and methods of the written-in -Smalltalk simulated VM.  So for example, here&#8217;s the trampoline that calls <\/font>ceReturnToInterpreter:<font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>ceReturnToInterpreterTrampoline:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000958: movl %ebp, %ds:0xfffffe6c=&amp;framePointer : 89 2D 6C FE FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000095e: movl %esp, %ds:0xfffffe68=&amp;stackPointer : 89 25 68 FE FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000964: movl %ds:0x10d538, %esp : 8B 25 38 D5 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000096a: movl %ds:0x10d530, %ebp : 8B 2D 30 D5 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000970: subl $0x0000000c, %esp : 83 EC 0C<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000973: pushl %edx : 52<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000974: call .+0xfffff49f (0xfffffe18=&amp;ceReturnToInterpreter:) : E8 9F F4 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000979: movl %ds:0xfffffe68=&amp;stackPointer, %esp : 8B 25 68 FE FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000097f: movl %ds:0xfffffe6c=&amp;framePointer, %ebp : 8B 2D 6C FE FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000985: ret  : C3<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000986: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00000987: nop  : 90 <\/p>\n<p>To save time when simulating I hold CStackPointer and CFramePointer in the byte array that holds the entire heap.  But framePointer &amp; stackPointer, instance variables of the CoInterpreter, and ceReturnToInterpreter:, a method in the CoInterpreter all have illegal addresses and get accessed via the ProcessorSimulationTrap exception machinery above.  The end result is that in the simulator I generate exactly equivalent machine code to that executed by the production generated-to-C VM and I&#8217;m pretty confident that this approach has resulted in far fewer code generation bugs in unsimulated code than otherwise.  Almost all machine code generation bugs show up in the simulator, and as you can imagine it&#8217;s quite a powerful development tool.<br \/>\n<font color=\"#000000\"><br \/>\n<\/font>So an arranged marriage, certainly, with some complex communications issues, but a successful one I think.<\/body><\/html><\/p>\n<div class=\"pdf24Plugin-cp\"> \t<form name=\"pdf24Form0\" method=\"post\" action=\"https:\/\/doc2pdf.pdf24.org\/wordpress.php\" target=\"pdf24PopWin\" onsubmit=\"var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=600,height=250,left='+(screen.width\/2-300)+',top='+(screen.height\/3-125)+''); pdf24Win.focus(); if(typeof pdf24OnCreatePDF === 'function'){void(pdf24OnCreatePDF(this,pdf24Win));}\"> \t\t<input type=\"hidden\" name=\"blogCharset\" value=\"Cw1x07UAAA==\" \/><input type=\"hidden\" name=\"blogPosts\" value=\"MwQA\" \/><input type=\"hidden\" name=\"blogUrl\" value=\"yygpKbDS1y8vL9fLzSxKzEtJTAIRevlF6frJ+elJOfnpAA==\" \/><input type=\"hidden\" name=\"blogName\" value=\"c85PV3DKyU8HAA==\" \/><input type=\"hidden\" name=\"blogValueEncoding\" value=\"gzdeflate base64\" \/><input type=\"hidden\" name=\"postId_0\" value=\"MzQwAAA=\" \/><input type=\"hidden\" name=\"postTitle_0\" value=\"c8xTcCwqSsxLT01R8E0sKspMTE8FAA==\" \/><input type=\"hidden\" name=\"postLink_0\" value=\"yygpKbDS1y8vL9fLzSxKzEtJTAIRevlF6frJ+elJOfnp+kYGhob6Bsb6Bib6iXm6iUVAZempKbq5QFZmYnqqPgA=\" \/><input type=\"hidden\" name=\"postAuthor_0\" value=\"S0zJzcwDAA==\" \/><input type=\"hidden\" name=\"postDateTime_0\" value=\"MzIwNNQ1MNY1MFEwMrAyMLYysQAA\" \/><input type=\"hidden\" name=\"postContent_0\" value=\"7b39d9s2ljD887t\/BZ7Os127tR0naVOPnWSO48atZ+vEJ\/a0z25PtgciIQk1SbAEaVnd2f3b33svQIqSbUkWKImUOR9tIokgcL9wv+\/r+O3rfhoGb193lD98e8Ijhv9LEh71hM9C+JPkPcE6gnEWi6QrvJSpSOwwlTAPfqqiYAhfBepG7IY89fosEToLUiYjlvYFS5MMfpA\/mUVSRX9j7EznH8Hf2aAv4McDxfqCJ6mGl\/GUcW3eQ1\/+O08F01knlPB1qtiFgHW9vlS0D\/rJebLHuOeJGH\/RhwXOE73HpGYDWFRGPbsblWmRaNjCBfxLRTyA3Z0xX0Vf\/uXgxfPvjlL4nYyu8deJsJ9peDUcjNNXPdzZCBY5hPYYOw6C4q96hwkdC0\/SC\/DVgYp6u4G8AajCuWCP\/FqwgUqu4ckrfBlAXTBPhXEgbmHfOhN0VIA8QFQF8CACQxKE\/8gkfMh6Svn4SAhw9TjBkkc+8+WN1PgX1cVnYxVp2ZGBTIe4S\/gBfO6pLNGI1ALFgxIMAq4RWYHQmjYfA14iABjtsZtFPg9FlNLZcMfw6k4g7OJaMZkS4GXaN1AH1GoBqE9GC1nyOFE99vezK\/bz+Y79+1mUiiROBPwTkBv4ImFwAsAavBcADFsXtwB8KSJPsC18Bn4Ey5We6nJPBLKbAqi78E78TSQGsFP40W1qXiRupU4Rm3EigaoAL7DFdHuHAGh3Ju1vhyoDbig2v8O8BCgUH0mBtnb5gA934A3Cx\/UCBQQIu9RZHKskZd1EhbiKTJhComJ9HnR3WCdLWQfpEp+B5QImYOneEFGO7yzo6vWz+O2\/vI7fvssIqADaOMl8gL7ZG49uJUAH9wafacSij1uEZSwXl3HcEelACAK9tnhRWVBgoysTwHscAPyAQ44BggnjRNXRENGkxxilz2\/w\/WXYAwn8IoJgB36H50IKULDv8R+xUPBI4+PElooIAF\/jKR8WTOnPqQyBwA0y4NgoaoATbkQCEEqkd42kfArIFbccOWYH4K6ucb0O965xETzPa876iei++aKfpvHhs2eDwWAvlAAVn3fwH3sq6T3zVK8TqN6zF\/vPnz\/bf\/ls\/\/mzTiYDfzcUu3z3d5nucr3bBYbAfwMp7MJenn3x9iwKZARkwj3AbdR7\/Yy\/ZbHShBYUIAOUQX1OPNzncSysnOPICiBZgcNHjEyYDAJlmRjIh7OTQGmg4IuzEyIW\/Ike6lSELMkAfAhX4mOAWShCBYBBaCEZ0jt9IAB4gRfw0CwKn3UTIVgWlx8CMJ4V+7wWImZ95CdYmahQAAJ94hwuo1yK0gG0TEXBLPiIefsABFvSE6l9VKPICoQlOJQeoSK0d4DcOcgHFOhdIUje40rlHZNo8VLzBe3Z0mkIQEfg02d\/gjiFU3xMcJtaosDoIEZIDPhGCgEdZMgJWap6yGccZUNnmAoLCTrloA8AZ4BwKzhCeM8QqS5FjiF6DPBsiZHY9BOUCokC4RcicxrKPDLynqdI6\/ix6tIKIgklXDgFR7+Wb49xv4fsP1RG7+Ia6WaIQhuXMkjnIYgfwrVFc4ZkAdjKT0JgAH79GCH4ONxqtBe4OuBBPIlKQcihwEA64igEcGcANvs7GaFAg7PjpQaH4iBaj5BQQ6BJ+CXeUghQEJDEiKMbvsuTfDkZabyTDeKQKcqrEXH0SWTnbwdWRj4v\/0jcAJikpekSIej8agxVBLC\/TCU8aNdBAc+ZP4x4KD0AetTLUNBJqwSAZoLiXRgalr0MZSWtr4G06HdwJSQiFHCVAQxI\/sJuYI0dWtvKF8O7Gk5PXIA7L7iAxOcYScIaGYqHa\/qRNg\/nDIFnSYQvuvBzH47zI4EFMQ33CDuz4hVFawAfwOL4frxu4RAkgw3SkDmQs3K+4CC9b4W\/q+Wf+eHodqS\/A\/EY1cHKUV8YaoQlAUgaWDbN4m0jCxDbqDUFSKnybU6tp1mC19cOQ7WmC7CGPcAdaW4hEOwe6BMAr8sU5G\/pDodTAG35QxAxfnE3yqibcEMuGUDjjKSWIWoh6ZLE+94H0eilgBdSNROgfEDIgCd428O9FRLAdqxulgsJuuJ3U7WrcSOAljhGhFn0WCH5sAKA5IWCc0wPYaR+odYXZWEHibebc702MAOU5OfEtfu4uVz1uP9FR1ZJArQBMe3SrUWsmL\/VhwcBqEapS638IUKSiKMMJC6KJpI4hh6AvqNM3CHGrRxAfpaUQHGXy7ZpT3gNDWBfN0qSPoPyEP+d01kWwdF9ZHQ4iAdSQ8MbROCDlkOCCU5NstaS+\/ZI3P344i1Rh0H0cZomINxfP4OPX3cS9uztv6BQDeEKLWuYyC7cXHRGzyQ91vC3YIRko7MNYDd9paxa48tuV6BGRFKaG6uBjjamieCDqH3Al7qPjImLXqLYg1dfl5cHAhSogA6tdDA6ovnFaO1CcSSMoJQA7IHBcSM9UdJ5z8Y0prMuapikTo2Uq5ycfBTToFLjL0LZ64NuLq9JwuD3j9Vw9v+K6s3zb55lqCXueiiFdy3T6F14YBc2uNuRvV1gUNB\/shg0HWJwRAtdyfRbAliZwUj9IYnbk8QqqPHt+mCN9dEqy2+wCdBaWCKmETgAOQSHgdIdQUIWGbA88oyGV4Lso01aDB++7sLeYIOBSt588Zd9+s8Xhfh6\/Qy\/fnv\/j\/6\/L6OOjo\/m\/+fyHwDGFABJc8FZBYUj0xlefeaBdoiyE78G5KLOO\/rW8lMNjwX60359d4fc93L\/qNbg+1Df3XmkLhZOE0u1Mn7WQeWSmHXkUREogXJ5suiZuvHul7308TvVHP0w3bi+sDTAq+\/+rOgNeA\/uf1CL4J7u6R28l400wm92yK7Mrwz8ZLvGxGu3uZWBhg9qGg9AcfZrvOH8hqgxjZA7KRVhvLEiXy8ogD6gaxQBY9WTM6PYBDwJjXpM2h3oRLneco+e11MKlKA9UIyfacETr\/+3JNBvUIfcf3lw9McbUKe\/9sGmDlSMGtbXqvs16FBf\/ygv3n9tPEmH8L2Wvehr0Py+HrlVv04Eui6t5sdjchaQUobPsq0fQQ\/dvSgZ7u8TNLy32c\/nqAfer2MZ7RAXKQxalYBRIjxpTT\/yPtEPJjT0MYuFFEe8P2KOzg\/rizG7xEXJX0B+k9j4RI3KPmSdrEdfGFMUX1ZEBcYMhmuJJjsoqyTidH50jfLOGgTFUTy1S047OID2+iK0+imq3oqMa2NsRqynSP9HtRltQ7C\/uQzQkx2U\/Gq4B+llQSrhx5MbnDg3QhGMHW3sB1oUfa1oIIAMRiWcPH59a5TgCuMHI1cAQRr9ZGCDkwA0+03IMWKUc94JirAEWl7k5lMmEoIOcdwwTwKEqkTzuqOssxLgnyiOpic8cQbvBfiSv5+TeUBmMbk+4GeqW5iJV\/luxVDnzvAyQZR1fvKl8G2DDzC6cp\/7mNk9FhowPijreg7RMC5wG\/Ah+aot9XTUjXFbdez6E05so+yUYEmBmjRLIkPNN5Kjw8DECcwXYz4yY92TG5I89CUSp6WtwgT4\/UQPk0cTYwmTniZOHhmJLpnCoymj8e36hSeXj0xM2LDgWgbWyLSOUmta2R3HihZhWwDdqSbUa\/kW1jYOoyk\/I+cTeR67uQMSNoiMSkDTwwg9xeiywmhbFl2T37N8YnLKIVmNiM9udsf6ySWGKYQeHVQLEZrQAWidGkNV5OUT5PAClICoNW6scWxx308wAGaRS0RAnnkt\/siIjnL\/u5EHgK5YYVDA6DyJCkwwgth+gowpUAIEqAkN3G7JvvheqifMgxgjjOijMedk7haXvh8Is0dgKg83rwGtCKzc97RjqMu\/j5bwFF0SEoWAs878fLU+15OEVfAjufJ1BsQImr1\/YtSpwr85AGIDEdYJpCYqE+nvYQzrRT5ykQzh2pMg1jBWnGCgEF2BAMPhvdAjvnwYWMh6GG6FNyCGLR1QgAm2al1t08nUQyfO9J88+O0BfOuJEx6jc\/OE\/BgXho309BUDjpSxHI\/FLOYdd3jmvmpCa64Nk29hJocvqknli3beoqs7KTxF740X9Eac5WqD3UdnSRtYKrwPiDq+\/CNT6dE5XP2GyHeJqR8g9dSIu5E3OECdjhIjEmFuUvvNUvFy70EevZrZPIVdjKPfenGT1ET28zMqFOpGAJgID0ot5FxgaMtZZQ9sE05ur1KN3lySr3gkPSaHd+3lbcngBCO9u+j5Z8rzssSEtQF2BMS9Jhz6CrdrnfXcSzMejNR\/4uOdQqO1V9ID3G+gJppwZi1D0EpSmyA1SHhMsZ7I8CpmKCGF51ffKDJqnxM2xo4X5LP8GjMSY5WnX8Y982WQPgxsc4a3kvIqDkm+P\/7+PbDfdnmgpxMLmu1Nh6erlsK1FklqVBTM2zkOZA\/Ml6kr7j11oC2i2jUYaGWN5dJo7d3S7UyX1R1LRQD3kX6yw8Reb2\/8fisZSg2Xa7m00SLoOlCUlj0Q94cLroDfEjZEUlLhHbYDKD50EL37my0+tpZJCVKfG045AUY5RcvahSrINLfyaeoPt1223L1KshnbrAdaq339r8ukA+PbuFKF+nu4VF1o+mYw98O6cy7Jm+SymRSIZRNphc1xfX74ePXp\/fHJj++\/n+Pa+7yZYrSqK1Ok5+SjcpGPyxXlJH3dN1mREG\/8vVuKncwDjenIeeOAEHf74ZOV7iV17eKkvYIruoJdCabz9vDNw95ltnyZcYnJSWcXKxEa7S0z2z\/yMw+k\/z53TRuouiCnUkmWrIRMZlzGLnvQJSeKC+uEHZ4sVTF96sxQOHk2G0r\/5eDcKLK5olKm+11vPou5TDAqknv8fQpZT8QGKKverFctvD6oFLNF+MyQ4QyuzzpeABLy0GGNv3x6nOOq5nrqgZXumBT3M08k5nV8wCSyRQUT2Y6YvvDqyLgE4C7K8iTqpkOKqKdSML143nigxEoF30tSDgAyLUiQTkBC9lQyrICJfj4\/59ci2f372dWlkb2yKGifS7LXJSkHjFCszMszHleQlWODFOx+04i05b9nYfwu685rZpk4Q2fRkAmaSedcX29GaO1HzErTBU1SBwmCOOoN8Kc8EaAJCRDHGpPKTULj5PVuc3NzTYcSYbCqtQnnSrjECtdca9OsSDPMkwrvpHnO4ehlTyGrw1egdf5gGxbMzO3YhNyMRUOyi7if8m8\/VRkGjsTAOYJF6urygslHDhscUgOkGRbx5luzjgYm6QUoBBe+yVepNZSIcimIbRWD6RfoJagFPLhPBaj4Tl03Apd6Ma79bI9n2\/uDcG\/qkvG0zADaJqeptPGRNj4ydyhxU8SWo2b7WF3kyC2xFO7bRjm26lJt1taX5fVlTVAsJzbvUl\/2dCptvJB7iXKptCl51re22Vx1m1vb87jbm+0AGiuZGLPcRrFgZnhzNsCmVltsCLX+OpVUt6bS31IV3DlLkads7\/OTysrDE6vIRd1tZEJAtQD0lUukc3pS5OF0cr99YGkj0f7pwkm3zrry4Xpf\/7CqPovXD5yLbBbxlHyzj\/9FjrqTbexgx03fJzX7vppZ4mFtjl+EaY6E3fjoaiz618TUXphCg9i1mCKJOgtLmqu5G01RNfd9SQkTwT2dgnSgRl1ITJPRyVY+5od92\/mnq7CVK7XbsY1F2xaibQvRtoXoOlqImj6dMn5GbS+MKwybL28Zo23UV3S77SDatA6iRcPNUrtNlPSRDLYb2\/d0rOVpjY9hyNdeCqVrt2132rY7XUG70xU6lEvdJlbgTb63uG\/x3Ijoo4o3JNDNY9mA8HalgdHqa5Onu8TyZ1Xnd+Gl5zQtyKkZBdJwTyQfaT0X83saIbtbx2rBIO\/BHFWkFcHS9hI9wbkt7wQAdLnQ\/OxUKd5yYNvo5Z58UJU+AbrRIr3MzczjyP8J2+a6p2\/AYk8Ddm1TjqcqaqvOAtvarEYL2w3MH6w2f66Z568ud6+Z519FX4Va2LBtu5g5Tr0ZF1ac6f6y7K+N0ueK0p5GNyZdNBC+V6cyoEf1Dqw0K2a+UrJIzpdnfClpGgjOmsFgOw1fhX\/\/fM5ocIgJwXeygAa\/4EQRan8\/OdOW0+jlfG4yLoKt1nFo8HWkBoHwe2JsLrBxCBdhRZ70Mho6agaTYi9+M03ZNNsfmIE+Ib8Wd8eNmwAQTWSiccZ2SHabJdBmCbRZAm2WQOOyBMqd2XP2B+ka6E4e5S5FtEeB7u02saCNb7fx7cn49so0RvMio02N6Sd57JtGI5p5HjjCEvSZg11M9GAd0Hl8PiTNJhBcY\/F1L8KGcBGOFwKNnXVQ8bLlCrlMsMPwcNk\/RaJISNjJeBl2RaFYOz1NYmOHVCRYw2Rw4mP0sy0cvplzKK5RCJQjnNNXMqtH3EvxkbPIlx7G8DsPjxYM1MDOAzVaGZyN5P4O3AK46d1C8bOnIj00UgyHeAaEQW2H8QRKXWsWyGvRdMWucdd4e0k\/+pKu\/WW8aoFcEH9pqmwIEiXMwjwvHIeM4nCyEBuogew7wildvujSAE9j9t3S76Ms7OAI5G4ut+x8zBCEKA7vDPIRwKBjdIPMzLdEJZTFqIXamsu+4PEOSUmb0w6f9XjSwZ+ANAmEhxPDQi6jFP6vMeFdJDeouIJU1DH3cBTsCZip+axUztJhLFFundgj2Qm2JQIpBG2CHTfShFvxiJntmCcFFq6mkZ\/5pGF4lvs85WA4a+VJOpYdDHuPFbyF98SEMS1Sb5ulibwB2W1tdICQmVsH\/+MeDhKlGazY8\/SOeW02b7eZbx8tbXw4EX9kMj8+ZunT80V91m4xCDfkMQ1PxmYphAk7yxmey3EIr\/iIGMUuQMWIZJPxr2EXPBoNQR1LLtux+It4miXwYizK64sEIUGjj2hH+M6xhDQc9Bon6kb6ojRqWnW7WqQ2T62Pg2cN1e6YmzHCAcIj4gMzRpuVihF6tOkbbKEZmRsbqyEIwrCiL9CjQmAw82HLo5MPF07FG0+1oyae0yq4nVPqHqsH1Mlrd2rGVJupwSNCxOm\/KvF3NZkm0pwIsB+Y+cNWYhh02bGRzZj2KBIQsrBMb9iA7T76gVMjREiYmupyOywblFpAW1QIl21GojxJpNF4cZJ48d3eJoLmJL8Z7wEOTWLPZRBeg9s7DwIHATeQvhrkpgLPHa4ojNETgVPohb\/djH5XyPKa9RK4qeBMMyoYq06OXhXuV+xy3kDuWcy73QJi5O9pYWF99i0gXMID9Yees5OjJZCiNLIFxYxgSQugiYLPctcAFQXDFkR3ikllfIeW9o9YC7jpXsoWGOXwYguOJmm27kXB9TeKz6J7m8ZsIqWWL7y+CvzW4sZ\/ou9q5IvPYx6gEtgQRx4EQYJWCY1uMiH4jrLNjRpjYqwGmEhgtvfmpI+nhRFa85HPCjhRiABgE8EfTVpGrrd3pQgoieIG66\/Y1qAvir6nhpPhO+tt3UzX86T2STLLdNqc+AbnDBngoYOgBJ\/7gpsbCasrG4XtCI9nNu45CSUK0qYZhTYJWPe1tLgqumrkmUFNgBfe4vegehMxPYfoKISG1BPJYNJmg3VkOpEGFs9RJNR0iN1\/KeVQihB0oaoGUnVRbifUWqO6+FIj2WRS99F1iMkN9mz2R51h+cDmJjLJEQMZBA2gEczeyRE16o6OIUpDBPe1icR7+Z6HLBD+VBHFrRpw+AUuvXqQKyUwkbPAXuDReMKVZVT0658WKDNa0DUQMtemNAiol7PcLQ43IknItBQg2GkAEuHshuMwO8gofQSZgUr8PORuQGOhYmIjxR2wFSvKxhqy\/rCTSH8bABEJbquzRqGRuRqNL0oeVdWpLd6l+NW7V9+9+u6Lt93bE4KPral1WonWOHVb43x2oGLWEmfEA6eUJeqyDqqONsvDcT+f5vF6zoRMNcucnS6O6vkIbr3paE6E7VLa\/rzOpbULMqkLPPabAY\/HCBwXcFBw\/vnRJpDQowXjsuH2ohlwe\/TFtGy4vXQYBbuM5OETsD8wNx\/9zsfUZTgSwrelVl1ug2U233uPGhGXXM4TEn+vdapuyAOsoAsk6hf7R3kFHf31+RH6IlpkbyqyS8XYJXzXfiTuwhr3soX+N025LB9n7iwbbN82RJ2tGdhmqhhr9aDcqV1ivuhkvR56xiIZMCwuvMEpSLYA0hSyof\/tvqK3+s\/pzhtDkSJ6id18lk8ls\/ok7dUDJGergEl1Xrf98jDK50frc1DlG\/naoWPi8yYQyPnTJZDzuhPIem+RQqqqVfkcqyeTrxzaDL4bpkJfiAQrfJvTX\/DMTsYrxXyKApqJmBEV0ahEFAGmcsipWwo5YTSuQVpATq8rc+Y1RBcAwCzdTV5F2OwpMW8JN8t22VcQjXyimFlJZKCqCO0TxdEqgxDNkfcric1UlaPwRCl3BY7UavIknih+lu95zAH7lyzyhRdgYzCnMS6Xw7CjmiOilg\/gip1CT00xXSmGzhuEoTq5+T\/svTPd9hLKnE2UCinBABOZQ5XYnPgeANbWzmQJ9a47oLHBpsVsaJrZFW3gtigntQkdmrDYJbWVDza7IlXlzHdz5r7wKHU48lkWeeYvcOZkaBLB81R4mYzg0RzHx\/mpMexQ\/\/qR5yYE\/u2JpwneB6Az\/Q5zLVYDnRdNg44+5\/p6eXCpimIr88i7UEjN0LdczE2f6udISisOsDgNURU97Km70jKbOYak29ImyiRcwZT00hTOYrb0YqYPXLozfMXNmZAuI6ynPZw5Jd1x3t76h6w\/Big3NH1wIYgU5vFsImGztpEOY+G8DxtQ8\/o8YV\/Zv9QcVdOHfzVsVPZ8AqOpk1pl9wpY32VY369TuWCpSA7pSvhRuQ5nnoXiA+cbPCxdW1OX+dxYOjrlgV4CIdVohvd8kuCzsyZmVZ3cM9WqOa2a06o5rZrTqjn1U3MqVWRKAn+p91OrYSxPw1gVDt11DNkqGa2S0SoZm6FkFO2HXFKhAhX1jtPlSq7lRVPmz+6oQHiGrfBshWcrPFvhuTnC83xlwtNonh9Mf5INlp3lhKlLIZiIvNxKP8W2l6MkhEPbrOWw9uk\/7Y3Q3gjtjTAXeDDTseHqdBUFFstLqalMj9\/0q6gGjmoD6BPVW0UIziVS64WWGubBp0i9Ii\/b9LvHrifFRO9yH+hU5Z2Td6lzstTsj0ymWPWccNnrp7tdlQx44h\/dedTDseJCp3baN76GxR7lFY9GpY+1ZY4909QtUAOa6sBNFrai+LNpVb3FI0UzHzwV3YhImlnskRZ\/ZALXVF3W5zd4HM668laYudNmeexXvX1nmxoHjA\/hFzRtHjbQw5H06ag7NhWJb+Hc+8CpJIjrf0TYRl34mJnWc8rdn3Jlz+NRNhA9F6FKhg67gPsmST9251hn+3ANiX6W5vBCQ\/yvItkPqChUkSmtN5zVjNntZq\/5MHaA5Y1UWdF87ZlJmdzSIvIfnGS8k7dOuHeS8Xb9SwSq6KltQKBPLz4mH7IZYwGa22h51YaDO1RbE+JRSNN9rK\/E4PwHYHzfxRYuGhG9OrorHOeBHJttr59w7WyvP3\/x7WwELrbPkZhN7HCh+BR0LaqcqP+oASfR5lIQ5Ki6G82dNn164RJ+J81vhupekyaQVQhKA703bxx4ad+ZUYp5JnPwB3NOoWlgasnS80K41iJJl803M4jQ4e2FL8zFFYZUWBfGf3y97wJOlYqIp2Df3AaanhRU6\/rxEjGvoo9zdbeebWKy4Vff2FYvL5Zf1eku1r52wMjW0omHWhsLP4+qfux2tVj6PbDdGBJbRWPAx6hxdYJN6x5d0D3aqrANIKr\/dVFHPdWTLp0K7x1MfHHyZKmqOif49GLQkUlqiTGfAAAIHZuDakcPYwApDzyMYmcUf6qVB3yjzY\/czTZZZDSVBj5vlp3XNMPFDhk+VclHFR86eIS3ll8ts3TLap7K7c91VgurAjeSRAR2HdokVyq+yNwtEXOP\/oyjXZ4ABMF2c0tdWRFLuW+y8WbmSq7Grki9\/gdxm76zWRHLTlV7+C7emLwI3sXME67R0MDMI3vl7jDrk6KUJ0uee22qdJNTpV3NOBNVOaH77BcRBMcBGadP4CKqKJ7UupgWdDG1VNSovhYbpdFUgnTQ2KX\/\/lZ4GSYUXpC5uDniJFlvpF07v\/7S5fUy7PCFIJBTWBd7bLQG8TJ4YLMAd5HpfutCeBTowNAh0Mk\/xekFmDKXjcgHcA+4vEeSOVE9vMsvVJwHxD+JXmPKdz98vPr0\/vjkx\/ffPyLP9Aos3cqye1jcT7B+RmoWCey4zJOhLf+hOcohD4KUB9d2iiKOKPDSDD4cMpX0eARE54NpzTjTgsYuaHyCbX1z3dkuTV7UOywRXKvIVH7QSAYqJRK3ccBBIfPzuI15JuRxjKZ6rHS6x9iPQNaBKRoajYTMwzjw4FiVEuwxTaR3nZ\/DjENgqQxFudQJi4iSzENlheEge0GqC85c6OcvwI95ABv3h6wjcOaEggd9NYjY1uhX1jNOALCOCI0O6PGvd+yh8\/AUHgPANXYg2PmfIlHbcOJ3xaem5MpTEeAnNSMhTIUVwRWwYA+l02LgpSkDyUdken0AMLuRnCJfXZFQIVa+0\/HfmmEZAM8hkynKJTg3PJZ\/bWds2odG6MUdXyo2ECzMYB\/4TCegd6A8Tg3cdawyLYq1qM5s\/O2T8DCOG3y29CEiZRwZZmQIy+JYJKHC0jAVs3SgaAqoxk3z0l5ZXwWEZFgRf2RfrtkWmoydAC6gmbnkuPchAP+M6b7KYDlfdJH+TNNylRgqp3fgos+KVRFQx1jARqfKchrQsfAkD3LS5L4P+MRZp\/ALTT\/9+Ryh+XsWxjnmiNbxNXyc\/O8wyN4aSrtSeH+s0Pm0kqou8W5c5C1ccpvMqTnU0AfKvURpPU7qHZVFPkh0yyE5nwEFjULgJZYHvg15kkjhbzdkXo6d\/Sunzv6F0\/8iWE9giSqI0kFfRKMkgPI1gOylm3DyXATcoftCdKR9TsORx2t7qfRvdLOgMCpX5zbh6IRYOJi0ZyyPgSpu0QgvnggsfnaDXom8njkyhcVJFqdE7324ppkCnXGQyDQVUSOIPkWqxzsV7kGt8HLT5THXVhkpbknQaXY7+E1HDFXkjxOEubaBmhASTTg9L8sw1B6sMhVFKs1ZIEQttkfaxwCL2LUyYmJCkRhNFJ9jTG1dkJ\/rXx6isqlDzh8TweKxnBm9qkP7lwpKkw0ZXqk8kbC6tbCa0WE1qY8XH+WcLwJEumC1T75CJAaOKxDfH3fUjWgLv6vqGLVwCddSCr4v86qyTaz6rgJjizNRi7H1YMxJaLV9FVzvV5dStBp0AK2y1PbY2JYNmid8NaYZo2Uoul2BXW9EMAQzQAgwFQc7YEeZv8jU+ArIi2k\/QTui0wjjyFNgBnspWgk+euRCSelussvu0L7xnUhq8EUOnx3yx8KT6JhuwmFDfj3yfpyq5BArPtD9ZdyQubsdzXxyo5Lp6AvTR4zcPTsNsfjMQShgMAo65H52IlKgUH6jZG7ck88d\/VnWLzwj86guPq2Ee0iueAZfcBs+QQ8FOW\/woPg18CtLRRirhCcSmPhGqoDKeigBFLh8N5C6EcY8WO8iIQaNQE+QPEp3KCKABzEpNbuE3RuRaMBmc+z6Sq49PHqhG35Qx86JZfPdgjVpFPNYk3uNhUGy6Da9MudHTVIYtqpA4cqOMiNXLvJdirqWOwJJX6Kqcm40lRVS2zyFh5s8umzzy4vnqXInPcTksybN6C\/zsbt6Xql9GW5FAnMhf\/banQjFImgpOShRc\/PC5hPC4uKhsl5q7rGV\/O19MLjq0mu+vUk3C3iraQVSFpbLvqur5bvLCwf1s+VKl7muLVuuskPPaJQFJu+o0M55kCoxvr4dLODWWcg7AeYiGretyY81ecKmhDsUUbrXAAffRqg+7FzdlPzOmvEOfaBYPuiDIiuYDj\/Mc0hlhH7MHSb2enuUd+6pRGUpRSO2W8ytDHP8WoymqRRcZoohVGz960+r6dW6rcbHBvPX6UmQkX9abHclRuOsEkFUtg6XbCfttdRegWk8NqOS4neDPOEWbo\/fMXjpCx6Y6iAfbni6RQaCXVN8DxO7IzEY5QYNVD6LovwgZnSLW6lT1ClU1Aqz1QqzR+WSrVGSlSmp5f0VNZBcWyMR93Th1Y03aAmuNgQXgpJD6o4+iw7X6otN+2At9fqH60p0L\/ahXPWteViwZYHqQhGVhIpCnlwX1+W50ik2VojSYPgPLfyWGjY5MLV+X3hzp\/k0VFg8oVDJ58Zm6jytSMZCqToHDczIW4UTeBlJf\/nY0F9X0UFTatu87yOt59KEbmv+\/bbXTPvA046fUyNyqx4swnTf7ON\/v3h7NuqvYlc7i3xx23JY+8AT5zDVXfxKe1x27sHUZsT5df7ZYdgJazXYFafWOLf6aAubH1XYPKPbPAYnnx853JM470NfiOQXlfitD2QtIYBU8OR7NYiOI\/+T6GQy8PPi4pNSg6mJlmvIcIcrbNXTKk5V3b+pWl1dTIu1qrBW6tB56DyCsE4twpuCiJWMwcp7mpcF7yrQPau4blWyvuEjL5eSR1Z0uJB3XAqUUI45rRKbYpieCrYbSjBkWexTlpmMbBOQNgXZtIvJO6GYFuoT\/VTacbilg94lueVnve23lbarqbStKoNokoPaqus2p+Fp5TQ8oYyDpzPkWYu0yAc7jvyfZCjTzanCaOI0xGa3hthuU7IX7S1VyzGYK0F8s5ssLJDSVBGqY4d5eov4yb5qnFaytkF0NVb8WNWz6z43Qeauw8h31c3snNFNBm\/lioA7x+dWeWn82cVJe7s9vrdeA1lOkr5ziRMezy5Wojc9ESPznBp313d2POHLfZMVqcsbgnb3OdmP01IXa3E70nr43vUe32Oxiu2QVxljTCpiqGjjFNYsSGvfqLvm7o2Ktuf1hXd9tq7ewXPt0MwtPL2okTz5quECRfYwr9AFoIkQJk290O0c9vN7GLtkz9+jaNZb1V98unktJOL0pJZIBvn3dsrNJc6GSQc4aDOfLmqnIXs8CLBlXeRPDmimb8ZGkedDW\/OhHvcaGFfFSGVa1My9xHcUgyzHNdNiNRqBivNQBI5gH+0339XuaFd2v+WT+OX9jp1jYvNSM5yBTQM7QhnwJBju2EHV0Q1wFOYZ2KnYo\/ZjOJzbtJFL+9wMt+Q0nmdibI8ZZ5syHgz40Izs5PLOGWLv6H7YmTnZ48eyI8YtKKed7J4h2\/lskqs743UnB7rfmdE7wmMxK+n1jy\/envOI9\/L5JyeMIi6vn8EXljGA0ro8GWujpBGNfeyXNJq2TcPiM23mxNO4cExaGgcTfHNi5v3gw6B5g5B6hlIT\/o2zVJFo8iVwajKNjwXQqVE3uRysuDaPhmbsLI6tz1Ja1DfD4PFMwp7IIFQrg8sBTW0l2hotnWTRbiotVkadoMzzBqIW8zmgzOYRzkTlf8unxZRfKQ29yF6mMk1L9xI10Jj0ogCfvsQ0IaTOrXQYS9zRkMbKbzOb1c1gDwGwTorUiit\/vCx47kT1cNs0ZT5VPh+yrV9kBI\/rHXbOPfgp+387DFCT3ZbWg0PjyYpVIiF81CW1Gc3t4WDXsSNEDExeupYuQ3g65cH1+1vhZcgqZ2EcCGyKSUN\/0CqmpovL8n2c8BjIWJxclqK5M2aCMXYMNELUSLgeY6UBTqFSHuhCyD8h9gLDRVk3S0gwICrKwCivRpRpiSeHlS+1xxMfZYbSllxB\/iDFmBaWOzgTOR2xmnmsvBSJIDNCSXVLPoe5EfAgHH6xtD\/9KpRvUXYXHc9eP5Mzhvb5NNDLM5gZO5adB62ZuBHJkBF3DcRdXJBkIIHGcf0s8O3YrCxC5kkU3AG+XRPZJ+3vTVyFj7+I5dsTpEY7scvIWWDtVAIr\/2lhKRfPx+u87YlIJDwVZVK15EtYWnTle5GwDA3qB3sAHFdPHVRRN7iXAa1URV6aQgbFyLOKTr7wGO8IFBLZxRtd6qJfbFnO2w2bKxant+XXGo7ALl13QMEosWtyruICs9jS+cTuO5fmGNuNq8cL03v9qLmKudgq8I3T7T\/htn43azrhzLVG6tcV7wTCFCNXMA26ltCv0M1jxM0vIgiOA9mLhD+fo62GYHEkLJe6yXD+9zUEgouzkwsc08e+dW\/z2TRXdu5VD1zapqRJJp46cGORoHHiEqP4yyKm0yzJfDkMOypoLHbmS3P0Tksu7rPoH1o0YSjm4zZdZXuF9SJ6lekD4Yru78VUhr2GIqTiu7cqyF819NKvV5ODpakJXZRB8+WxrNrC7cw8dWcxZ6hZ7fSeCGxzXEvkeLfOJeNESmQ+T90GqNG5nsFHqjvmo0FX+oSXEV2KNfHF0Ex1kBP6rg8pVUzAxjuB1P1JP3vZuTQe+Dgp3Dt7NXHVLAqaq76keB23A7eAijE08kcm4bx9PDS6Ym8PXgHozshFN\/Y7iuINMFDBtYoQvqcy0WkwrAnmKTA01KkIiwDLgwSLI6t82e3mfjkTNBgQoSA55ILDp2BFXfynNFlLRYCBnoRzJruJ9Prs09nlCWLjUngq8oMhAeL43RkdMlIp01kcqyTFgWoSYxYGLAHGOGvkROWaRFCKwU0BLLuF9CZuOe34+YuD3Y5MLRp5YOfBITDycNt2Rf7UmvtFAQJJunjnqiY4MPPVvgzS6S3S4IaXEcpsc5UvU4n5sldzyqrG52snLH2MUew56YUvX7h0ZxumwnkH+433j9io6Lw1BsvsOlF\/YInIXyag8m+jLDzuaFAXvdRyyVr6B+Z4e974aMLjL7Q2FDOPKepej7T5DsWKrk0clvvJJd\/39GJW1ej0DRwPXC5K14T7MvXNw8ifG8x2ZV\/KSSnjZsy+BLsZ5+5aBwLaWPW3TfLV0PnxPvJdGvwK3j2BM5edbd+LIOUrrvu8o9psijybt3SUNVgiXjZaIpZJ\/1EScbNIdI7270+ZRp1efiXCeHariWaSVbNr0YDhT\/5wofp6XsEttW4ktTpLwXlQu5F39VNNivsk0g9P0y9bEQBVlsZZWpqQpU9Vkgfm\/U9ZhMHmY6dy9bmdak8A3KawrgzfK7lY67uDstv21dEDmZ02+uwShjGIe\/IEUGSCuqTQrjEd1DtRIvHEJUXdD9cX9HUbfVJkMuclyNiQf+ur7S38w\/YEtS9cFdh5IHm20\/gQta8+qDQXPzMD1TUPNI97QCmjSPepbrQjmMwrYoXP8lEe2A6A8lZkxPQfFwFPz7mM9rwmZGvM0xxiZplEzhKYhUS5RgSNGACBpQX6mclfeXYTPtN\/wJ8NdBbno\/JWtPxTvPlif+\/g2++ef\/Oi+OcXrMs9+OLf3skUdBDBw5+BNi95pM9VpP4NOF122cnHH34+X\/7EjEW3+Oyr+u6NfcUubcqV6RqhEmwYsFfrHfNtdhzpgUiwY4htzXGnLrdctounymuOiwxRbfpX1Pic8J88C7DWCHlW3839BWu4fYFtX\/wt+fLg1Tb75z+LD3777YGPfvttu5UnC1It9hvpc814AN\/7w5zxfDamEcMdDFxpIo6m0QXwq03y3mPsExlCtT4nShGVyJ4EzcGkn++MNTYoEnh5jxoBwZ3qY3V9iGnseGvNnQmx7pMGUoyaMlFzpIGazFKmXj0CG9sAHgN5LYKhFb+U3E7Z3LU+ZCQ8sFh4MoRF8BgqTmUo\/0TaPKFBVDLAc9q0c0pYxgTsfxWdGPOBuc3DDnZrfco4S2JMH8\/TsncQSYM+5mZ72BQKe51gUy7MxcY2X5Z32+tnsc0Bc9R4c\/cYsVs1vvf+u4bd+RY9izE5WRZp6lTBsLfZ+AW5M35BHG3e4a1z5gGPmfXZbNK5x7FtK9dOLi\/Ym3HUL+fMzYLVqqGzplPeT\/tbG0X2pjvP1rj6j97IEgts1IFtu80x+c3QWTpByexLHsKL8R+TPw7wxyPwHNX3Vv6fOhv\/IvLB0nr21WIugHp7NoqzkfuztFezK7fV80XMkpeKTL6iXtmCquxI25kgbbQHx2h6z1HNzwM+HyOyv0odcXcLz+UiDUHhMlbXxmSlRbsqCNQAzD5Tpct9P2D\/95sdMPT4LdPXMtblvsixt7ew\/9t7qNZ\/VcKOyPib5weHLFQ3AZmycE5fH+7fPt\/3v325zw7ZwV\/Zi+8Z\/PH7b9nzfba\/\/\/hq2WK1N0bgjTs+VnxYURxWxxapdMj3+yveyYv9Q0tc+7dGoOx\/M9rQS3YCwP5m1Xt6WUCH346RwgFs6vglg3\/ndMBW0GWkeHlOOWVGWTVsgE2A6RkA4uTlqt\/910MWqRjf\/deV0ylf47s7a3y3t8Z3+2t8t1jju7uld7P8Yr0qtT\/BNuTUUrfknCRdIxE6VfgXZVq2Y2Iydpr4SaTa3ukmxpD2E5X1+gyskixE7y43Ld5tBdTp6RmWRIWSWvzfbYRrO4lgGNH0SJ9QQ0zRJi2pJ\/vqFr0+xl6ywzKdt\/q+281m3C4grWpcz9KjRjGm9zC1TLmR2AblUR3ZZXSDBfXwVzs1YAQGGh8U8kT36Vg86WX4rJ5sbI7bMydXWUo9bGxmBbOwO+uaBj7FPAe9O97BBhTZsZbnpaADAg0f2cW1y\/MlzBL5LAnsA4Pt1P1ilAOuqXKFzbZQKT1JPc\/tO3LKYSJvWU2P515xX+F0AGpd\/wjImkEGWqS7WQzYicSA3R3gwn4P407WpU1j63OkiHsHGtC0AYyxiBsRYCsVVeyapnzmUzVU2qf5T2XuuL\/v+muJCR\/YyNxqtg\/sbc+tj3p5wXI\/9QLmtveLY0f1cWAs3jfLrHL2fWMSnD6JXULc3W7e1JyGyLMQd3i2J9GDpvChlDVH9+Ucq9iLZEmchPPpwWlO68UJm773AddnUWlKtwtUcX6Pfwqi2W29TesYdKMCuEWCDcjEnP\/M4hYvAdcuSTNTHTcIYjc8WRRco87P1YjJ0q7SYSyct1VO4\/5qnmKFFq33otW56UqL1lqh9Y52un5k6j9AgWmxuQAAZyiB60ctmH+\/gf33WNQubC2urisOzt\/FXMzyzEJx65lZd2MOAV\/Eab8xnXG2lj9th7u0DQCK+h4B6tKPLkiPHErBz\/nt37Mwfpd126EHlfco+6+q2rA3tgz0cQTu0iWwAlb6evlNHet4F7g5MtY6uqW0W1LtVzKdvQkdOh08SS5MKEcNEtxbW1LylwNCVed34aXnIlTJ0GVOPRZyf+zOsc5eczS+y0zHIo8dGeM4GOYDveNEYQ1IY7Q8bQ4j\/JM84Omi1aVrVujiLF1jbx1DAheGAjak6ecvguLlGP3Mo6IYfTTzocDOiQPpSaR\/U\/FkRt1i5Y+dLg2PDkVaj5kLNuCbmKrBSNHAdHGbUqlhB2PEXiJoyzSjOd0zsWZjwZk2pyaYXY\/j4CZxKr0ZUALWpSd9Myu4y2WA0z1yzIX8WjCNRYUDYcN4Jo7rqQTHwtfjPDbtAbGEBES1kZFgtvtMgJPpca6NtbLzmcOUeNGIUOQdkWuY6CkK3KK7fC5JnnrTpjThke6K5Eqt8f4agJj4Ufb6QqcX2NFZpi66H2bJuDTaO7nMVZKfBL8Rm6I9Xg1j6Zk+MZgtdV2kbeVewlAAKZgUJ61CkNsi5HEfb6zimqqHvMZCNB6YG0ZGvvTyOWv5UfbYqUo8zB4yuSRJFsNryV8KJ9EKLi34d6y0lp1ANKdDjiObdREoZzlAyH\/8KOKWe2LP5KChLnNYfx3ykt\/YdgZ5UuF4tQJd+eVsI7CokiGzIYP604V7npCL38BTPZk6jcp8xI73GoSGxwes142G001wo1UkJUMRumiWW81odFhh2LbynodzxeG3N7GVvxe7kF5S01zMamE0rC13Ynmo6h6uNmlhVrj7chh2VOAQJ25E41rHO9BkBRht5BcRBMcB9bpoPFyWS+4iBTo9dEj12ZrlJZqV4bBGJ9XBHKzjkoDx5s3SWr+zpU08KhtfpzII0Fc6yverkz21ioySh+txVkbMVRCEo6t1LmfvhDD9qjFksVS\/6ANVehs53YUtP+vvcKmTq+eRiR8+Xn16f3zy4\/sJWeiSSFZ\/z\/OnUgHnhnriqlJE9YRP7HCV1YN7TwTAZW\/X4SrrKVvvWevCcHfztB7G1sPYes+a6T07zOJUUfi0AUNnbGoIJTnl3VIK\/c3mm2JPEdMVxaSqeTxicab72LUjC9KnEloHG\/lKXQZCxI1IA52+zlCKwJdR76zrIiyAUkQYY1b5f+B6us20csm0mi6Cm5pUvd20NK8aW0bzpTRWknLQrETS6fMflnFzaoEZziE20mK8o25EY\/wXeXe0E5VFae1rycZ2+7HbJgSv1VVaYW+lIghWV2NlTVWM25td47hJhvZEGLVhR1tVeLT6+tNew+pPWUtF1ZPdwRx9HlxvABLamGHun12sRPgvNUr\/SCbcaynyUXFsV1m3zgRxT3yi9sNX5S64FydTWe\/zfJHtzbrwG90xZzU3ftlKfn8jIuxfZeqBTUE02A6sG2TUDtx6nPuCx7YPdCeTQUr1tyNf2pgbaL11aSsQLsadgNXuA0yvS0RoxrOWcid8O0q6IzyOQz5L4C16uMceG+Aw+acDtxxSrDNMBXVwjz3TgNx0nJ4Uy6YROTA0desff6zReYybkpg1PYe4qWb+gbNbPFJpq7nVmm6XZPU2yej93HpZXekHe8KcchmswcM6X1J52+nwUW8iNkb97PlRFT0La8w6\/zV383ub2jzIJ9yUx+AUbSukZj6268G5xADlXexrUc5YMWVKd0b9lDMNTcqxHXIDWuLjRg9pBt+ZOT5jw5zM+2Uyypkxk5GKUTSvf3zx9t+FoHE5\/4jZcRwLDoaNJ\/TrZ\/CVxeHHLsAoS0CTH\/RlICwgAtqA7su4mDM0PqWGpi2h5U\/dO2AvA5XgrCJsJoXtsdgWtXMg2HoqjKVtqHFCT9peTTSTCYyIbbQ4SBm2i8VZisOqOOsp5TPdVwP8pVae5AECEqe16Hw4UUfgCX2c+aNi4e8wLcMsoH5XdvyUmak0rnJ38KyK9VBth\/tRhrhp7lHSESGzfNzCsqGbNIJFaA4U4Ab+p6Kip1MfDwc2FGy\/y2Xa72ZBvhsApxl2lP8cO3aVH8APfdkFs1NgxzEL9p28H1ScKN\/c5+wm3Bk\/GRJrMRTphD6jdxUP2z2oZIchiZtZN3eWMM9zVtAlCwEavIdEHhH2ACESzepEeAL+kORQKI8eI24hvOcnh7clWbQLMLaDrezUJ4Vtu0I+xG4pAwHvz+1JjQZmKDyAjtQhdS0zmMGlxulwNHfVLpJvSRV0nfJr+DrTo5lRYPMnNKbszoiyEqBwi2c4Tyq6NlOlOqYJXAzPSg9+lQRDQw\/AkbCxgu+OcRXgYzaAo8FLOong2A6HhnPB38fgDgvSr4cIPV\/BU\/grML5FD0id+z6sroWZBlU6KwqCHKSJwulFQh8WjC8fL1INL5dnT8lIpsBu8k8ri5wmTxUseWxOdKoWnz\/Fo4+kUDam1+BxpAcoMkuCySLWkDbrBAqkO\/1RU0ZoSbrwqPgxJkLWw6VCeZgd20AQxAxQuI\/7HyQyTVEkD1lPRCK5I4QNW5FzqYOsB3dSTbxEM4QfHM5gSeAta0YBNibtZp5pDb76oNIfLNKaPlRpui5Y5JlNCCWhNzFwsHgKXP2EbdUhleMOMHd64Rbb\/NWhCcHDJLhgicO6Wt3vP3d481cOebbvhqnQFyL5RSX+8ryeoI2lwndYAZTH48hfZ\/a+IbDLmHvinOvr+RxoC1f\/llS+n63aakl8Yb2vB3bf\/AFtGS38oty6abKCmdsKZU2y+BDMMwWGEfkLclUOVbiaaGIPao+txrXR82itiNrQ4aYLnXKN2e\/3m+wufSA3oUHAnVvtBzpXaznMovPWcHhk3vK5cT9cishF78x1mcMK1nDqixGAEbl0CfJ5Q6NXD\/BUFdr5J9D7fklkKlo1vVXTH6Wmkyd3lsO3Vdlblb1V2Vetst+V5cu8dWckOUZL1z0aaThctoZDazi0hRxV30z5s3pRuVWzi2lNCFoEjIslMM4Kk81xCeFPdhYMrRSJka+ODqe39HIPI83V8GvviQuGgzl8I4dTwUwGU+WCpUJvSCySrkrCw3WIt2Ionkz7LorZw0B+ZJHmk3LVLJaaV054LKfopQkPYxWgra2zOFZJ6pimVy4hOs4P0Gm82c5j2XRj\/THHNXnsV8NYnBzOPPeMnpeZ\/uNsRqumRueCVdfX1herTiKqNjPErcHVSooPuf5HpGl0DkrE3rzBgI2yIKMiQXV5oSfnLuhzBBcWF0kVdTRZzC81N899tmQ3ToTVpOY\/cO\/fu4+Fqb8w6noi+klxf2ygwsNm3qLvW8qAVlByvf5YudYovZtqtfbYsUaJwi4vPoke68pETyd8V3BWlSKVd1\/Ipy4zU5yCg+SZDEPhS+A\/+Jh3AV0Dnvh6b46ZIOtFXkX32bm6EccDF+noqWpayusSyxwvHCnJV\/vk0o6W6HuGydUiv0rk32tLrQf5p01B\/n85FIQvng1Rvumw41ojbroK+WXJtDV9A81k1r0W+fPdKk1A\/mOv6U0QlvcZJ1egH79TXl+PyqBtHzAOqiaPmLj1BI1coPpucYPuyHIxc5pIQWXgto4eHlFZuqu6ux2VRWC8WFfDDvYaAMXc9MayFfV5PbbZQRxkPZruiQo8ZhpRawZbo4nNSST2S8Aq+yBLRFH6HMOu0bWun50kSutnZhn9jBY9O3754oI+eKb\/mPhkz4vjUQE1wQzLqd58sb938O13z795UfzzC3ipB1\/82zuZ6jQRPPxZJPySR\/pcRerfFtDm4VSLUlSSRScX\/ziLLmGv5zKy1FuY3VtmHJEXZzvM\/DGk7jk7LMN+FtR2DB\/dWRlFtw8s5QGDztBQQI5d+CtRwTm\/xQ4j+NX2ooj+75VRyLv\/9xuQ9G8n7Cse3R68Ym\/Y1uijbSDlo4U1vcdzZpdtmV38nzfsSx7GR53b32AL2\/XlF9vE5h33STDA3RZ54mhl+wUJbhp0Id4y661lXp8ngDwjfNawGZRxsKFc3K1uB8CCKIytXIYtWBZd6Q5ICIxtYVIsHC08GHkhltoCxLxPEpUcewpo9Y1tomRYbRfjSXbG2m8iutneRubb32b\/vbpNPvqB0c7BhvwtEb1fQWa9fPHu7Oq3T+9\/+O392cXnPX+gEn9PJLdw4NHvsXvTb4mMj2p8OitTxrC2Ogr+n9XJ+04gfUTP\/upOZy6UPQ00o5FoLoFckGROLj\/veaBciz34UvSwKdhegGrvb9rjgfDrewPdK2EY0jrbZ3+7\/0vTmY49Z4d1gP33M2DP3qx9i5czt7iG2+7RtMwephWil+evakwMdaaCEvrXA83RBSdkfCrAir9IE9hVoZKtaSsXvCd+kZGvBlYnnKINrQSvsfebHupUhHvXMgh+66BbAhSIPzKh09XeRCM4Aa39FigVb+2zZ1\/BJkzkMMkijD6j28d8wLIolUHJK0Rd41KRZHHKvnq2vWKtcrR\/naoYYMg17Al0x8urjxe\/ffgIHHN8+fFDq0iu73SIpgnd\/w37oOjv2zXe9yKW55iBYzu8qog+bXX9h3X9Vb3JntNq\/G9INd0H9fNSYaaNjHo\/qV5P+GP4WsR0KTvYUc19WUj0FXuZyf+be9IOD42LHqWk\/xtmEvFkC26jvNVkwI0fMXfgBNiJduTOyZLktzgofXKL6V6\/JYPczezzlDfA14jyiI7KMK+WjXtrVrYL9s9\/GoCzrxHQxlQa813V2N9o+2JvWRW15LjZMft\/R6EfI+JXJ0gCrlND3LxwfBGMj1ClwSS6T+e\/UPm6YN7Qw6a6HRGoAegtq3PNidCLh1vIKzsjfCMRGO4DWth2Fz3WefIPaj0+Sn8zPaUn4misJ1JNoTbqzU3BNp3JlLoRFHre4eKpFvJtEXc7DiTQejmtsdiOdixjKBb6lEVnkQHrwm0mjNP6OEn4cME5MqOERJQyINBDHv8T+xbSomSe1TA1r\/MWxKEMs9C1Icj4MpXA0KZ\/1w10DrBGUfUxCobvUAi5ghoN2lK29XJBXvu2KyAE7FQDU7jHMuojjx\/lE76xeTw1nsfRCnuMfUxkz7bOH\/0kZft7jKYa4OeUKkxOFpu4UJOuLCVxRd1k7O0HW2fn\/FqUWsqb+26cO\/PO8\/DrExUBsNI8gyPhUU\/Upvt4AMrn71loJveZI1NrnGd0o9tW\/2A9S401c6VhSPari0Sh+quSy2I6w1XCY4bqLE532KiuNcV1uGg12ESd9H3X6\/kYGRUJKNMrqucpDMd7SPlZUNXmJ\/J+KtmgQOV20f3lBaPC29wquznPOGOW1BuXqiGLaBnxOE4UkDDOe1ExdnIC5p8ggw2eFF9ZsVhFOag4AScQhX\/sIpctp8YiOXPqHnSP7t5OlF4qtd2xGRbH3b1mQ4u+paJv0gxxxd5jLJEnMba7buI3EVg+Oil1Z+HJpkmbX1XsBSJligaj4UyzZRa2znP1tD6j1mfU+ow2C+Rz7P5HEg2m5sWKh7ve8gecJGaWohnsqFWQpaIJFeUlJ0rF3pPaIxuvUMRulFqC\/WSPrj9GhwxOFmkvkXHa2GM19TxVdCiOPYeHVewtNv96vp2vm1r2p7ZenNZ66LHQXWNTZCHjpTUkskN6qzdzF5rU51fsKlkEIDbp1GGJaVPK5xxGN\/VZF3zP40urv+b4CCtzEUG46Bz7aqnw2KkHdeyta5BiTSrPa9V7b4Oqk5fVF3b6dZ33a\/hIbPw+T+Q557HLhePEYQurVsvksnk0gqdCjIs2CJ5ThLZgrPZGbOG5\/MBEc7vBLClKUHUcwAu41mPRAPMJ4CyVPJB\/kq\/p\/pjAQSUxgeJN4n4V9qB6j93yMt8moDs62wzPT80PmWszF0qn7zIZmNak34sg5cv3RuzP17e+qTBdVENc1OjDb13NvUgMXFr5vvj2leMcheMgcOpoPCMQCaasjA4fEZp\/SlRYnxPVYYbWfG6E5RlWjnpGh2vpfRADl078PAg+zrYtG+caWHzUcEnEnABwFhUqRy0Ltiw41xK\/h3HLgQ9w4N\/DuGXAlgGXy4CJSFsGfIABP4m0ZcCWAZfLgKG6Of7pY2cZTLgCFjk3u2\/ZpGWTpbPJxw6QWmPZBHffsknLJktnkx9u3t80l01w9y2btGyydDZ5D6TWXDbB3bds0rLJ8m+TzvsG2ya4+5ZNWjZZ\/m3S+aHBbIK7X5RN8sweLGITe729zar4HY+CLZqqvmCKeMNqJDtmTnJbBt3W8ja1ljev0Z1ezEuSiJvaXdv5cnqZ696mlE9OT+NOBJ78Rvw9C+MNLYRc\/KjrL3XC9rvHThrD2kqdXrgoeLL3PvIlj1yU2y52Zmlubves+l3z7QNC7MmUVHlL5I2nAsRI3KZLBeTyhMy3LQLRCeDSju1ghpSpMX6rf+8jdAX39gJmuAJo3lfqJxX1WlKGc6bDWDg5SFDDn9EgoHkV\/Dm18GAuv46zC+VOUK\/1orRelNaL0npRjBel6B0WKO4\/MXfKVLUhVH4SIudtqCvFzWKdpmnmbdy3qoRvk1vV1NR\/k+PJqa2WTI8X62ZVxC1fJSffLU0vf+O2s2+X0J+qLKrPlf9J9M4in33Jw\/iI+VLHL19sxBW\/gV25VtHGa7YR\/zRcha0zskXTRrs7X7UkUneH6nRFtlrtMp\/P+lNzo4Qv6xslnE\/VbZmuNq5fdA+1uFqNgPSMKrkcCYnP\/mW6ABX81oVWhOf2uO\/2eMftcR27vd3tcS3dQDfj8e2V9yw9mOG3ev9uv2rP1P2tsdFt3EuP1nadurplvpsKwO1adYM9mEpus+7+J9ZJduWRzM+N9VXNMQ\/saTurajDZ7KpfGndvKhNEQrGtB3xkGmct24nRJ6onUztQVMM7EsFC7vVlJHaxloTp4kkmojQZ7sZKRukeY2f2oZD1FE2oVrCkF2TwjEzZgCepNmOFcPqxhq8EO4M3yuga35uI4p2Bgl+qLgbe4GOdMvwWXnD\/sXgQKvhNInt9mnKNZxCRv+ecLHA\/bcu3BKCxCpASSFQUDKkEZJkzkzpv7RsF7OUEkOKQwcCfbHh4\/gnUvvqg0h9EhNN2xcw5yaTiND7Uq7Ep7X+qSLzjWmx45vwCZ3VpGOspZJQkTgT80yW\/bu5t79WD1+L89nGbh+Rins0j7moCremxsF+n6vW\/Tl0ZLt9eIC5TEbfDhO5T3X6dauf9unQa1y54mXKhrULuu89tf\/\/u4PsVzG0P0qlv\/9zUSUaMLdcsAYvALyYybhiQRkxcHjv5ZIVkNVJ1Oj9XKTfvTAt1GFtelZKWFvNKW3GzqLj5iev0bDTGd5OFTumYrdxZhdy5ms6f847wuE0vstRhkAZ+GwCZf6iIAHCtBVsJzTGkIFna0t0g0\/0nJSnzc00PF3cSwa8vTlxEgrbuubYO7+kJyKokKtrAK9HkvBXnt0\/y2RNG\/dLmdJ+eziIdgv67QHnXDui\/4cFijoe5dFY8xOep3PG5FbBPMFK8SglbczaZzgi5vrPdmjdLNW\/Kwdlxxwg7fMPuGJv4IfxFNLrOqrK7rgw8pHNm0jF+mrTQWmhNQmvMb2bI7P0t\/DHiwY+C+6cJD1samwdqBKnjyMd2n8C0h2z8N138+kJRjgy7vJj8msI49usW3NPBrfsm0+pRMG+BOi8NH7LCImTdmP0i0z7S6+hDHbfAXEQgjIG1BWllTF+G69MC47zakC8111qEnUCcUx7kqUrKcIu9lvyqDyV6fR71hO9UQ4YNO05UFqVX4jZtqie9IvxUmEriUidGec+vjmySNaMka7LwKbEaU5rtL6buYqd1tNTTldPGddoHqo9NOXvZnWiuL24XcJC3tLihbnwXYrxMEzmjN+ysLHgg5\/AEvhJR6tQjePpGD6fvovJCjEqd\/b7wVBjLQLhm1y2eVPcwlOa85yIfEOwSsNifiv3PDiG\/7YUyVkw6+WfXGM7UM8\/KlnEt+7pULO3bqrvvRSfrYf1XXsj38YY8kSLWTN1QqV6ABX+18pqzGVl5pVqJzW0vxxYqh5hM92iv9coKyHOaO6tFDrPp5tTqdCtBvm3ffOwy88B828t44l\/wnriUf4oWQVUh6BGDCFfkFzRF4ITlxXWBTe5I0d5v9eKgLDqLzulSaa+39nprr7f2elv69ba3dovSpQ1b5YWpi7U2nLeUc55Ctvm8I07d8hZNVZ+nzt8LpHd9oqKuTMIF\/DsHFXQDrFUWLFtlC4atZcZzPYPUCkK6sFIqo0z8zXrElkbpbVu2mXy77L4R87F7U+4ozASfSuEuXutBXwbi6qE3zPbHN9haVU7+vMZNuJgek1LrCtY9EL12idZVJl6wqeE4ep26Ed868NgKxdFiwmh\/Lqk6rzAyhy0avNHfPkYCO1FidAt0Ap1Sv8qext6WkUqlJ7BxJgXASj0zYxHHIhE+G8i0zzItulnAxG2MBi+V2pwxD+fQYfSOp4IN+iLKu2\/6NoZm211qATqEb956z0vpSRMt2MU4W0w\/60vq5xnIa0FrnkW7JzLxMpnuvifCwszWRIX05YsXsL4nojRLhvDS\/1AZbc4XXUxG+z2DM\/OOynBy3tCkpZmGn6ybRaTds6F9RIa8h89Qj0+NTXCx7ydsehTB3qEvC1AFAeuIAg4+\/EkkQ4BEYTnkUCidUCT0Mo\/HKQ7swyNgrwP2ofycaTRajPHTKSyvmbaxSoVZdrBGoNQ163DvOm8bOraCGRMIu5JhKHwJKwQAANHFhqiIvSRRiKUzwIKEg5DRAyv48kb6GQ\/ubgffkBQ1WKmiD0btYcxaIb+GnY41XDUkgZgF8PSAHiPb4\/R3NcQBjwaonkhSLsFuZ4HgN0LnlEpU0PM7BYEBRoveqB\/\/fQehMtZ9FX9EXV\/vtFrNn1pOU9NK2q0uuofOQ5J3waaqD93Ujtu8dyuN6Ida74PPg7NFej8NY5eEG49r8bF7WA\/YVUtl\/+2gBf\/qOCXFRVvYXXB+wUpahhsR9gnOX50CuRBXzJl01DCCZk5kOUhkKp4yXeI8atESZu0I0+NB8JTpEsv+PiZ\/z8K4Jc7aEefvgJaWOGtPnNPh9D\/5t9Z+RHNV7PUcJnR0puk6rcm26SZbFfMtbngi0Xvy84Mp9I+cb1FDODmc1WW+xdaMhHozusb\/2e7qB5E6JjPwdOXy0H3KxPZS6j7m3N9cNaN7DZB9d5pNboqXhCquRNJVi2UiLJG4cx\/2sbe5kMfIzeEab5fyKEHhA7NeKRyCvXnsulBv2JoxBHb\/HjWsLSm5W70siLfd1dwpVkCr7LbK7mxxZEKsnYXKf\/M18nivwxKgE2VB6jKciN8I00LQdmFzXeuy1CbPda3jpJeFIkqpvY4LlBZqft0ke+SR5OhiixTWBoi3MFaBjMSTszT2GkASj5Mui1DEg8TXML21cQV62rV5hVs\/nNnDEm22Nqd9HmEbuw7Qx5BpFQoWB1lPRpjeYwYxT0\/lnnCWtqRV5+Y0D1NGFXpTYcKJQHjpDIvn8xMT4PdC6n\/\/16WzoUcTK0k5\/CTSLHFqVDMhcjYp9ebXlRTtYXvQJP2ZB9LP23+XdW29odww3QVeIa90BNxK+pcF3VSTdUriErvhznO1bbdM9fhQ8H8tM1Ds4CSukB4XdZhufsZEw5JO3zjdwaVcok0KBzRbcq1Sf2h6PG7tnb+Mu4o8\/t16+5pazD4GsyZIVOvIVYvQRzWyaVL\/or0nfXVVOoy81NjEBfn\/PY9htlWELxiqVliKOmsWwOJtXesRo1jcin02j\/26t2wzqYKDbM9zkP\/ZSA\/0o9y9rRrequHLVcMx5aZVxVvNrdXcGj6jaa2qGxYxYb+HVnVrVbdHqG6NDQUvmKXnkuZVlUDuzrvrxuDh8RmOdcCDnnfXjcHDAtmhdUAEn3vbTcDEYxKQXaD\/67yDVGl2JCvSjFieLLQ3PiJn43U\/xpaeh0U1c5gwkXOi06ywrdb8bh\/YdEM5VjpF90fBMR+yEP6sD9dUilKErcw2WuZqH2hw8nL9R3sdzJHy1+a6r6ER9CchEPvnpk0oTsdosbDKFtTzhGBW3oJ6Zs\/n+RylrqnzFbx+dtX859ZnXibuGmfC16KgoN6pwGWvwM8ikd0hNWEmHxgL+JC6b2udhaYbs53kXALrRV6cdmj6R+9gDduN9LEFeV6wdlP1FWF2\/XhTP1IpJbPA5rDAzrY2x77cfa5ZJ5MBnJaRI3aH6czrw9mZFyiN7b7JiGcqGTVPN42hd1jltvai59MDmXp9OB0dQY\/OUJQQXsoeUO\/O6INfuExLf\/0kANei9MFlpmOBTdMAMkGtXEMbVATzqArPtgxmjbVliKlTLoOy3ruiSoc7o+SfbA6Sa2H2wRyF2dOdrH+Z\/nXFrrBcOpyYm8i1sdO961nvtK563Q\/qBH4rbtNLuptaW7Gm7tZxBaEKKkDNoop1jEpSxUpWl6liqf+QIvBbYq45Mb83c3TOSU9H6XacJHxYBf7HVm7poOZ0cGHqlKtAvF2qyuvSLnkWXWaxSLyAt8m1taeoK5GEMuKpuFKV3EypSgT5lOIqlvteFW6ZuQh1u6W3jYnseUHmC720lgy5fVTlyOCW6upTq3iw7OESxpl+uOZOnK4tJ55y4u+TfIA1gCccO8rmu\/nawTm5tfxetfk2v1rg2W\/28b9fvH03TIUGvfsXlfhTz9NqRk9WlarD1TCzFiG\/sj\/PN2v7iYcMWrVzsRyB\/VYpbJXCVmWrr8rWiLvqzm20oTWoC4+aqKgZMXwqI4y8ml7EbbrIygdorrXk3+SxLrvov6qJSrDb2DuLmtYRY61l+o2dx1vN7BmX6tgnTLIbQSxr196mF+G6zVHKd4dTwdw0Op8GErgAKPJd8lp\/XSZ0AqfJ2SZp+z9V5AKeP+HxnzDC6uCU2X5CbPtki9OnW0wh130schbJJRqDn+x0U0orp+xJfZqo8NDBH\/\/8VWL+uL\/vkuy+UMeyuZ3t+TJHLVWUGgAa660xekZz7fYa6BTzBM+c3QpyrsnbbI5KMR4xpWJmdvS02sVMr6xOqi9IqAz9byp3Era4XpaCvFZcq87vwkvPx0R+i+qFVbBfF6kkyh+OpEstRu4KrmCJubzJTkmBFWQuTuGbg6lqyiPD6AscvgmT46pwjnmfCAe5KbMqdagNfjZ+nuoHGSynnHOsaPZp58c8BTJS6VIoaXlmWEt07QP1KY93tlDu6FItfbcP1Gj8+nxVLs9fJaf7+++OX7x4sUyLIX77L6\/jtx\/UoBTd7vPID8wYxgSnwIxPVDicEvqWmvFoaNoadbKUaRnGgdihP8uU+UrAD1ig0j3GzlLNQi5NT6dAejxv8AS\/6SYqZMafuev1hXcNC8Ij50qnOAcMO0SlMhRs0BeR6RdltqgSpkXk40tgGc17AtNQ8AcnZf8R2xJ7sB41XoLlOEuyaJcWTFQG1qbYZgPBxG0svNT8atSTivIiqV0TNXMCWPWw1RRuBJ4xuS+w1Xdw4i5sh7OYJ6n0YHe4N3pfUSaJ0PLvvFybV0od2UwNgKOiX8JLPFHai4EQgA0gmQFoOoLxG0W9ryTBRSbM41rAfj5Gpbyc0PROZBinRYSZnlTJLmUEwu9sFAi+zwKfoQWOeOJJR6YJT4amE5XeoT0pXFhEKXx838r4E5zeNu+ieFSAI0Wm8AQhrkqHyn8QwyKwFJKYHEM+bL0wIA0FFXRCSB6fJwcwueoDvSLJBvBSBbuOA+4RUSWivDDSJawgIhmoOAR0wtFxrolmHcSCjEYH38WD7xB5wIcdJBTkJZ9poCUJrx2OzpNFCIREUTuwyxC+THlwbVHbS9Qg7e8Qyu1esC8G7uNuA8y9nI+rNcdfy7cnqgd8a0LWmgi6DJMoGL5+Jt9OX2TR27cQRzne3hfwP1wk+4b6MxZLHM8x3KUkEqOi+fNiL46WAqNq0T0lr+HAbvOtr8C8+UFEIgGEEDCmrtiDFdd8tnLY6D3yDVwFPWbYNFZxbDrwgcTCtgcopoxMFp4AAV2SI8SWS6X0inrw4fZTvI6MvKfzmTvQDjQCsRQJnhrxuteEI50ZOc+9NAMR+PM5\/W3EyyTDWV41DlilFHACBAh2VAhm9cisyTlJtYHDGHnLsO1hFtNtlVNp6dCAVLoHxu7cpqCzdIugpiXhbAmLBFyEcCxgtSQtfgInF9TsBn+8Jbujtp5wS8uoCQdGzMmR+rmNTTxH2tiEpnH3iPSLXEtswnlti1OSnWPUyX6Bo\/ZJASSlq1DzCv0QkZ824pBagjIOpo1ACuWgyXYilYAWx0gZ3gHzgE3q0wMJmnAHD6ux34o\/0c60hrpBzVNTqk4zkvpj9AnnnlJZ1OGaSxN07BTvawlnGuEcrJCsSHekfEqX5vKRQzbvrF7C6QCMShcw9zKe+Be8Jy7ln2vI+15hcvWcSeJ4fz8\/csmcbS7zzye04wR0olKNmksvu2Ukvo3ts0iNXlqCBnOOp6wM6Q1tnB2l+fSEHwU3tfpOGcW14LGRotE87Bc1CG3hQUORZ12zPwnepXhR12l6zqO8sw0FWSRu09hzpOx3x9+f7u9\/v4nwMZUejaltrZF3+2zcb8SDBG65YdmPZl1JnmmIj+7GsXgdeo2b4U6T1peS8mvBMhuHSxUbRa4nYtYYAUUf40DqZjiXyAVq\/Z6AuTE8yYmYd\/3dSPMZBA9P9lvEWhaDamaxHa6sF4qLfaBnj03YDI9QrnKcqB5SyHG6Oo2jVtJ+5Em30ZNARb3fw7iQhRNBBzbDFVkfwTdEATcm8LRiNlUiPzPm3sD15vUZJmu0fvS5lccuZq1NB5TNJUFTzIRdO+pG5AhJhuOo8XjEuokQwZBxDw1RdsMTiTOuTXJTnjpis7YGiUxTEe0ChndLKS9FZs7P53BTXyrKNBG33GSPIYqtXqNNTg+Y7rEKcBOUKoXxJp2f27OFy1dlNfBw+lkXRfK977oqdne4MqKj8\/z124NDFqqbgP2r6MQ77F99fbh\/28X\/iFfemy9hW0fltn7skB38lb34nr06Yafv2ekp\/G\/VOxbFjvXkjg\/Mjstt3eyOv2WvDta141ff5DumvT7f9799ebBD+8fdvcPdvTxg33\/Lnu+z\/f1V747f3d3+DtGD3d337OX+unb33f4h01knYP93\/9b6ZrwR6F6y9yds\/2TVe3p5yOJM95EE\/VvYx7cvVr0DoCiUYGzva0v73\/y1y7ZyPnhu+eB+ubYNO35\/wP4KnPDNWvjhu7+OUdzDvDvBI+vj4O+69+34Hvk4wTfrk5IH3x5ivgiDrZy8XPW7Xx2CthXju\/+6anlx8F3p3Sy\/rK9MYkUpA7zk4jhjfQX64Um5rykpIifl3ry5Cd0ZpqDf4EwuO4UXntU20SqViQDVg8d5Nnf5eaIVNk7eMoK\/Y4L2SAOyWs9Y8rlJm76fm3cocZ2Sv+wOx\/PWUUr08ewyCESPB3lKn1W2ejgkl7QwUKVuJKcVLvIAwbhLBNQrT5ihyiPVjlQ9yowWlH1mqmwwv86kpE8m25\/BK00uKGprXgpaoPgjkzc8APhNOJeUWcP4NGB\/HTPpOU6Ub+J\/xVr+bqp2TzDPDw91ZlW\/kCEQ0iGaAl3p4wtsaj6m\/8WwDpkDXNtdmyT4Lk9YVwwAdrQL+wp8WyfrafxFFpUSw40bDNuL5N4igMZxEGLhAQJ\/7EiTi4FtMsCEvUkwGYzDxoYqI4VZhryHq8i0UGsBakiKLFaw124WMF\/cCLRN6ZxKBbnxOdW6sWrppaKEJKBrKk4A+xYIsgeatAfWA5dRMNxhA1TvcQi1qb8Qt\/jvMItsIQYmxmtK8sfaDY6DnJGKcGeYKX+GYI+u914\/6yh\/CHp0Pw0Do07\/\/w==\" \/> \t\t<a href=\"https:\/\/www.pdf24.org\" target=\"_blank\" title=\"www.pdf24.org\" rel=\"nofollow\"><img src=\"http:\/\/www.mirandabanda.org\/cogblog\/wp-content\/plugins\/pdf24-post-to-pdf\/img\/pdf_32x32.png\" alt=\"\" border=\"0\" height=\"32\" \/><\/a> \t\t<span class=\"pdf24Plugin-cp-space\">&nbsp;&nbsp;<\/span> \t\t<span class=\"pdf24Plugin-cp-text\">Send article as PDF<\/span> \t\t<span class=\"pdf24Plugin-cp-space\">&nbsp;&nbsp;<\/span> \t\t<input class=\"pdf24Plugin-cp-input\" style=\"margin: 0px;\" type=\"text\" name=\"sendEmailTo\" placeholder=\"Enter email address\" \/> \t\t<input class=\"pdf24Plugin-cp-submit\" style=\"margin: 0px;\" type=\"submit\" value=\"Send\" \/> \t<\/form> <\/div>","protected":false},"excerpt":{"rendered":"<p>Can an arranged marriage be a perfect one, or can only a love-match result in the truly perfect union? Is perfection when two hearts beat as one, when Kate submits to Petruchio, or when Mr. accepts that Mrs. is wearing the trousers? Personally I don&#8217;t think there&#8217;s such a thing as a perfect marriage. All [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/100"}],"collection":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":5,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":105,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/100\/revisions\/105"}],"wp:attachment":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}