{"id":97,"date":"2011-03-01T19:53:33","date_gmt":"2011-03-02T03:53:33","guid":{"rendered":"http:\/\/www.mirandabanda.org\/cogblog\/?p=97"},"modified":"2013-09-12T15:22:39","modified_gmt":"2013-09-12T23:22:39","slug":"build-me-a-jit-as-fast-as-you-can","status":"publish","type":"post","link":"http:\/\/www.mirandabanda.org\/cogblog\/2011\/03\/01\/build-me-a-jit-as-fast-as-you-can\/","title":{"rendered":"Build me a JIT as fast as you can&#8230;"},"content":{"rendered":"<p><html><head><\/head><body><H1>Pat-a-cake, pat-a-cake Baker&#8217;s man, Build me a JIT as fast as you can&#8230;<\/H1><\/p>\n<p>So how does one write a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Just-in-time_compilation\">just-in-time compiler<\/a> (or JIT for short)?  First, <i>why<\/i> write a JIT?  Essentially dynamic languages defer certain performance-critical computations to run-time.  These languages are &quot;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Late_binding\">late-bound<\/a>&quot;.  Type information is kept in objects themselves and this type information is used at run-time to bind operation names to operation implementations.  In static languages such as C the programmer declares the type information to the compiler which is therefore able to bind operation names to operation implementations at compile and link time, but at the cost of writing the software within a potentially inflexible and constraining type system, and having to do without any modification of the executable at run-time.  This is the essential trade-off and which side you choose depends on what works for you.  <a href=\"http:\/\/www.teleplace.com\">Teleplace<\/a>&#8216;s <a href=\"http:\/\/en.wikipedia.org\/wiki\/Croquet_project\">Croquet<\/a>-based system is written in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Smalltalk\">Smalltalk<\/a> so they&#8217;ve chose dynamism.  If you&#8217;re reading this blog chances are you&#8217;re a Smalltalk user so it presumably works for you too.  Writing a JIT for a dynamic language allows the implementation to generate code of much higher efficiency than an interpreter for invoking late-bound operations by deferring code generation until run-time, there-by regaining some of the advantages a static language compiler has.  The primary optimization is applied to message sending, and one effective technique is <a href=\"http:\/\/en.wikipedia.org\/wiki\/Inline_caching\">inline cacheing<\/a>.<\/p>\n<p>So how <i>does<\/i> one write a JIT?  There are two answers I like.  One is &quot;one step at a time&quot; and the other is &quot;the way you know how&quot;.<\/p>\n<p><H2>One Step at a Time<\/H2><br \/>\nWhen I joined Teleplace, n&eacute;e Qwaq, I had a pretty good idea of the JIT I wanted to build.  It would be architecturally similar to the VisualWorks VM&#8217;s execution engine, a medium performance JIT with good inline cacheing.  But that would take quite a while and folks at Teleplace much prefer smaller steps over giant leaps; even if climbing the stairs takes longer there&#8217;s less chance of breaking one&#8217;s neck.  So the project has been divided into smaller chunks.<\/p>\n<p>I&#8217;ve described the first two chunks which were to add closures and build a VM that used a stack organization under the covers, the <a href=\"http:\/\/www.mirandabanda.org\/cogblog\/2009\/01\/14\/under-cover-contexts-and-the-big-frame-up\/\">Cog Stack Interpreter<\/a>.  This was deployed towards the end of 2008, and provided modest performance improvements while proving one of the more complex parts of the VM, context-to-stack mapping.  Mapping Smalltalk&#8217;s contexts to a stack organization enables the use of call instructions for message sends, an essential feature of inine cacheing.  The next step has been to write a simple JIT with a na&iuml;ve code generator but good send performance which I&#8217;ll describe in this and the next few posts.<\/p>\n<p>Later steps are to write a more sophisticated code generator,  to improve the garbage collector and object model, and to tackle adaptive-optimization\/speculative inlining in an innovative way.  I&#8217;ve completed the first of these, and will write it up subsequently.  I&#8217;ve yet to start work on the garbage collector and object model, although I have a design in mind.  For two weeks in February I&#8217;ve worked with <a href=\"http:\/\/marcusdenker.de\/\">Marcus Denker<\/a> of INRIA on the infrastructure for adaptive-optimization\/speculative inlining in Cog and Squeak and it&#8217;s been fun!<\/p>\n<p><H2>The Way One Knows How<\/H2><br \/>\nKnowing what one&#8217;s doing in software engineering is a very privileged and advantageous position to be in.  Not having to spend time exploring unknown parts of the solution space, being guided by past successes and failures, knowing valid overall architectures, writing the code cleanly from the start, all help increase quality and reduce development time.  It also means less surprises for both developer and customer.  In the past I&#8217;ve written a couple of bytecode-to-threaded code JITs and spent a decade working on HPS, the VisualWorks VM, so I&#8217;m in the lucky position of knowing how to write performant Smalltalk VMs.  So while there are other ways to write a JIT, such as the in-vogue <a href=\"http:\/\/lambda-the-ultimate.org\/node\/3851\">tracing JIT<\/a>, I&#8217;ve taken a tried and tested approach, bytecode-to-machine-code translation with good inline cacheing.  Better the devil you know than the devil you don&#8217;t.<\/p>\n<p><H2>But Wait!<\/H2><br \/>\nExcept of course what I&#8217;ve been talking about is how to architect a VM, not actually how to develop it, what language to write it in and how to debug it.  One thing I <i>have<\/i> learnt that&#8217;s new is that writing a VM in a high-level language (the Squeak Interpreter and the Cog Stack Interpreter are written in Smalltalk) instead of a machine-oriented language (my BrouHaHa VMs and the HPS VM are written in C) is a great idea.  At first I was really sceptical about <a href=\"http:\/\/www.esug.org\/data\/HistoricalDocuments\/OOPSLA.Squeak.html\">the approach taken to write the original Squeak interpreter<\/a>.  This is to write the VM in a subset of Smalltalk, the source being derived from the <a href=\"http:\/\/www.esug.org\/data\/HistoricalDocuments\/BlueBookImplementation\/bluebook_imp_toc.html\">blue-book VM specification in Smalltalk<\/a>, and then to translate this into C via a Smalltalk program called Slang.  As I developed the stack interpreter I soon grew to love being able to use the Smalltalk IDE to browse and debug the VM.  It meant some compromise; one doesn&#8217;t write pure Smalltalk and sometimes using Slang feels like being hit over the head by a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Kensei\">Kensei<\/a> without any resultant enlightenment, but it proved way better than C.  Some terminology, when working with the Smalltalk form of the VM in the Smalltalk IDE we&#8217;re working in the simulator.<\/p>\n<p>In approaching writing the JIT, I had one big problem, how to execute the x86 machine code the JIT would generate in the simulator.  One thought was to attempt to auto-generate a Smalltalk implementation of an x86 given some formal definition, but I couldn&#8217;t find one.  Instead I followed my colleague <a href=\"http:\/\/www.linkedin.com\/pub\/josh-gargus\/1a\/b21\/973\">Josh Gargus<\/a>&#8216; suggestion and used the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Bochs\">Bochs pc-compatible emulator<\/a>, making it a Squeak plugin, accessed through suitable primitives.  As <a href=\"http:\/\/www.mirandabanda.org\/cogblog\/2008\/12\/12\/simulate-out-of-the-bochs\/\">described previously<\/a>, I took the core processor code, wrote a different memory interface for it and mated it to the byte array the simulator uses to hold the Smalltalk heap.  Hence I am able to generate x86 machine code into the byte array and execute this with Bochs, with Bochs catching all errors and returning them as primitive failures which are translated into exceptions.<\/p>\n<p><H2>OK, let&#8217;s go<\/H2><br \/>\nOk, so now I&#8217;m ready to dive into the VM.  I could start with the overall architecture, but that&#8217;s going to delay showing you real code for a while.  In subsequent posts I&#8217;ll discuss marrying the JIT and the interpreter, code generation and simulation and method management and method metadata and its uses.  But let&#8217;s start with inline cacheing, the main rationale behind the JIT.  <\/p>\n<p>Inline cacheing is the technique of speeding up sends by cacheing the results of method lookups at send sites instead of in the first-level method lookup cache.  Let&#8217;s remind ourselves of what a first-level method lookup cache probe looks like.  We start with the interpreter&#8217;s implementation of a generic zero-argument send.  In the below the green code between &lt;&gt;&#8217;s are &quot;method tags&quot;, method metadata we use to communicate with the Smalltalk to C translator.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>StackInterpreter methods for send bytecodes<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>sendLiteralSelector0ArgsBytecode<\/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;Can use any of the first 16 literals for the 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;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">rcvr<\/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\">messageSelector<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">literal:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">currentBytecode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rF<\/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\">argumentCount<\/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=\"#6B6767\">rcvr<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">internalStackValue:<\/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\">lkupClass<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchClassOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">rcvr<\/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\">commonSend<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>StackInterpreter methods for message sending<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>commonSend<\/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;Send a message, starting lookup with the receiver&#8217;s class.&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;Assume: messageSelector and argumentCount have been set, and 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;the receiver and arguments have been pushed onto the stack,&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;Note: This method is inlined into the interpreter dispatch loop.&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>sharedCodeNamed:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;commonSend&#8217;<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>inCase:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">131<\/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\">internalFindNewMethod<\/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\">internalExecuteNewMethod<\/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\">fetchNextBytecode<br \/>\n<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>internalFindNewMethod<\/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;Find the compiled method to be run when the current messageSelector is sent<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to the class &#8216;lkupClass&#8217;, setting the values of &#8216;newMethod&#8217; and &#8216;primitiveIndex&#8217;.&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\">ok<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/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\">&lt;<\/font><font color=\"#008000\"><b>inline:<\/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=\"#6B6767\">ok<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">lookupInMethodCacheSel:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">messageSelector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">lkupClass<\/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\">ok<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;entry was not found in the cache; look it up the hard way&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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">externalizeIPandSP<\/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\">lookupMethodInClass:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">lkupClass<\/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\">internalizeIPandSP<\/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\">addNewMethodToCache:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">lkupClass<\/font><font color=\"#000000\">]<br \/>\n<\/font><font color=\"#000000\"><br \/>\n<\/font><font color=\"#000000\">The confusing bits about the above are details to do with the translation of the code to C for the production interpreter.  The internal prefix implies that such an interpreter method gets inlined into a single large interpreter function and that it uses local stack frame and instruction pointers that we expect the C compiler to place in registers (that&#8217;s what <\/font><font color=\"#000000\">externalizeIPandSP<\/font><font color=\"#000000\"> and <\/font><font color=\"#000000\">internalizeIPandSP<\/font><font color=\"#000000\"> do, export the local to the global pointers and import the global to the local pointers respectively).  The <\/font><font color=\"#008000\"><b>sharedCodeNamed:<\/b><\/font><font color=\"#000000\"> pragma causes one copy of the commonSend\/internalFindNewMethod\/<\/font><font color=\"#000000\">lookupInMethodCacheSel:<\/font><font color=\"#000000\">class: code to be generated in the interpreter loop (at bytecode 131, <\/font><font color=\"#000000\">singleExtendedSendBytecode<\/font><font color=\"#000000\">) and for all other users, such as sendLiteralSelector0ArgsBytecode to jump to that code.  So here&#8217;s the actual lookup.  It does up to three probes to avoid collisions:<br \/>\n<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>StackInterpreter methods for message sending<\/i><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>lookupInMethodCacheSel:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><b>class:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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;This method implements a simple method lookup cache. If an entry for the given selector and<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class is found in the cache, set the values of &#8216;newMethod&#8217; and &#8216;primitiveFunctionPointer&#8217; and<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true. Otherwise, return false.&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;About the re-probe scheme: The hash is the low bits of the XOR of two large addresses, minus their<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; useless lowest two bits. If a probe doesn&#8217;t get a hit, the hash is shifted right one bit to compute the<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next probe, introducing a new randomish bit. The cache is probed 3 times before giving up.&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;WARNING: Since the hash computation is based on the object addresses of the class and selector, we<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; must rehash or flush when compacting storage. We&#8217;ve chosen to flush, since that also saves the trouble<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of updating the addresses of the objects in the cache.&quot;<\/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 color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">hash<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/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>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=\"#6B6767\">hash<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitXor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\">  <\/font><font color=\"#008080\">&quot;shift drops two low-order zeros from addresses&quot;<\/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 color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">hash<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\">  <\/font><font color=\"#008080\">&quot;first probe&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=\"#008000\">(<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/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=\"#008000\">[<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMethod<\/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\">primitiveFunctionPointer<\/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=\"#008000\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCachePrimFunction<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#000080\">#&#8217;void (*)()&#8217;<\/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=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;found entry in cache; done&quot;<\/font><font color=\"#000000\">]<\/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 color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">hash<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\">  <\/font><font color=\"#008080\">&quot;second probe&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=\"#008000\">(<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/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=\"#008000\">[<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMethod<\/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\">primitiveFunctionPointer<\/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=\"#008000\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCachePrimFunction<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#000080\">#&#8217;void (*)()&#8217;<\/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=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;found entry in cache; done&quot;<\/font><font color=\"#000000\">]<\/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 color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">hash<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/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\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/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=\"#008000\">[<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#800080\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">newMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMethod<\/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\">primitiveFunctionPointer<\/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=\"#008000\">(<\/font><font color=\"#000000\">methodCache<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">probe<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCachePrimFunction<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#000080\">#&#8217;void (*)()&#8217;<\/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=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008080\">&quot;found entry in cache; done&quot;<\/font><font color=\"#000000\">]<\/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 color=\"#800000\">^<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"><\/p>\n<p>What this boils down to is that on every send the interpreter must<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; fetch a selector from the literal frame of the method<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; fetch the receiver argumentCount items down the stack (beneath any arguments)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; fetch the class of the receiver, expensive since the receiver may be a tagged SmallInteger,<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  or have one of three different header formats, all of which require a different form to extract the<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  class, one of which, compact classes, involves an expensive double-indirection into a table of classes<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; form a hash function from the selector and class and use this to probe the first-level method lookup<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cache, a set of class,selector,method,primitive tuples<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8211; compare the current class and selector against those in the tuple and if there&#8217;s a match evaluate the result<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  (i.e. if there&#8217;s no primitive then activate the new method, otherwise evaluate the primitive and activate the<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   new method only if the primitive fails)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nOuch!  Note of course that this is still way cheaper than searching the class hierarchy for the method matching the selector.  For a typical 1024 entry cache about 3% of sends miss the cache (we could go into detail here but it&#8217;s not the focus).<\/p>\n<p><\/font><H2>So let&#8217;s JIT<\/H2><br \/>\nFirst I need to present two keys of the overall architecture, when and when not to JIT and how to relate bytecoded (interpreted) methods to machine code methods.  JIT compilation is akin to interpetation.  We make a linear pass through the bytecodes for a method, decoding each bytecode and generating equivalent machine code for it.  If a method is only executed once in any run it is not worth compiling; we may as well interpret it and save time and space (the space occupied by the machine code).  If a method is very large we may not have the room to produce the bytecode (there&#8217;s about an order-of-magnitude expansion from byte to machine code).  The first time a message is sent that binds to a particular method, that method won&#8217;t be in the lookup cache and we&#8217;ll do a class traversal lookup via lookupMethodInClass: above.  So a simple way to implement the interpret on single-use policy is to only compile to machine code when finding a method in the first-level method lookup cache.  We avoid compiling large methods, which are typically initializers, and rarely performance-critical inner loops, by refusing to compile methods whose number of literals exceeds a limit, settable via the command line that defaults to 60 literals, which excludes a mere 0.3% of methods in my image.<\/p>\n<p><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">c<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">c<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><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\">SystemNavigation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">browseAllSelect:<\/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\">:<\/font><font color=\"#000080\">m<\/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=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numLiterals<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">60<\/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=\"#008000\">[<\/font><font color=\"#6B6767\">c<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">c<\/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;<\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/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\">.<\/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\">false<\/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\">{<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">c<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asFloat<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">c<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">n<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">}<\/font> #(92918 243 0.002608387630016853)<\/p>\n<p>While there are useful tricks one can play in mapping bytecoded methods to machine code, such as &quot;copy down&quot; where we produce a distinct machine code copy of a bytecoded method for each class of receiver that uses it, which can help in making sends more specific in machine code, we can also keep things simple and have a one-to-one correspondence from bytecoded to machine- code methods, and that keeps with the measurable improvements as soon as possible requirement and so is the approach taken in Cog.  In Squeak, the first slot in a bytecoded method is a SmallInteger that encodes things like number of arguments, number of literals, primitive index &#8211; if any, and so on.  This header is only accessed from Squeak via the CompiledMethod&gt;&gt;objectAt: primitive, and in the VM is only accessed via the StackInterpreter&gt;&gt;headerOf: method.  So one straight-forward way to implement the map from bytecode to machine code is by keeping a copy of the header word in the machine code method and replacing the header word SmallInteger with a direct pointer to the start of the machine code method.  If a bytecoded method&#8217;s first word is a SmallInteger it has no machine code dual; if it isn&#8217;t, then the header points directly to the machine code.  By making the first word of the machine code form of a method look like the object header of an empty object we prevent the garbage collector from ever examining the insides of a machine code method when it follows the header word in scanning a bytecoded method.  We include a back pointer in the machine code method to get to the bytecoded method from a machine code frame.<font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CoInterpreter methods for compiled methods<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>cogMethodOf:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">aMethodOop<\/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=\"#000000\">&lt;<\/font><font color=\"#008000\"><b>returnTypeC:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">methodHeader<\/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\">methodHeader<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rawHeaderOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">aMethodOop<\/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\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">methodHeader<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#8217;<\/font><font color=\"#000000\"><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>headerOf:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">methodPointer<\/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\">methodHeader<\/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\">methodHeader<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rawHeaderOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodPointer<\/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\">isCogMethodReference:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">methodHeader<\/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\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">methodHeader<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#8217;<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodHeader<\/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=\"#6B6767\">methodHeader<\/font><font color=\"#000000\">]<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>rawHeaderOf:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">methodPointer<\/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\">^<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">HeaderIndex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ofObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodPointer<\/font><font color=\"#000000\"><\/p>\n<p><\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">typedef struct {<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    sqInt   objectHeader;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><i>makes this appear to be an empty object to the garbage collector<\/i><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        cmNumArgs : 8;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        cmType : 3;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        cmRefersToYoung : 1;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        cmIsUnlinked : 1;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        cmUsageCount : 3;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned        stackCheckOffset : 16;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned short  blockSize;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    unsigned short  blockEntryOffset;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    sqInt   methodObject;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><i>back-pointer to the bytecoded method<\/i><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    sqInt   methodHeader;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><i>the bytecoded method&#8217;s real header word, whose header is a pointer to this CogMethod<\/i><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\">    sqInt   selector;<\/font><font color=\"#000000\"><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/font><font size=\"0.857142857142857\" face=\"'BitstreamVeraSansMono'\"> } CogMethod;<\/font><font color=\"#000000\"><\/p>\n<p><\/font><H2>Inline Cacheing<\/H2><font color=\"#000000\"><br \/>\nInline cacheing depends on the fact that in most programs at most send sites there is no polymorphism and that most sends bind to exactly one class of receiver over some usefully long period of time.  Since the selector is implicit at a particular send site if we can cache information about the expected class of receiver at the site we can avoid checking the selector at all and merely compare the receiver class against what&#8217;s expected, avoiding hash function and probe altogether.  We still need some class-related cache tag, but that can also be a lot cheaper than the full class fetch above as we&#8217;ll see.<\/p>\n<p><\/font>In Cog we implement inline caches in three forms:<\/p>\n<p>&#8211; a monomorphic inline cache; a load of a cache tag and a call of a target method whose prolog checks that the current receiver&#8217;s class matches the cache tag<\/p>\n<p>&#8211; a closed polymorphic inline cache; a growable but finite jump table of class checks and jumps to method bodies, (closed because it deals with a closed set of classes).<\/p>\n<p>&#8211; an open polymorphic cache; a first-level method lookup probe specialized for a particular selector,  (open since it deals with an open set of classes).<\/p>\n<p>Respectively, these correspond to sites with precisely one receiver class, sites with some limited degree of polymorphism and so-called megamorphic sites with a large degree of polymorphism.  What&#8217;s nice is that while these sends are increasingly expensive moving from monomorphic to megamorphic they are also decreasingly common in roughly a 90%, 9% 0.9% ratio, at least for typical Smalltalk programs.<\/p>\n<p>When a bytecoded method is first jit-compiled to machine-code each send is compiled as a load of a register with the send&#8217;s selector followed by a call to a run-time routine that will look-up the selector in the current receiver&#8217;s class and update the send site.  Here&#8217;s the JIT code for the same bytecode above:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>SimpleStackBasedCogit methods for bytecode generators<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>genSendLiteralSelector0ArgsBytecode<\/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\">^<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">genSend:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">literal:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">byte0<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">15<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ofMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodObj<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>genSend:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><b>numArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/font><font color=\"#800000\"><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=\"#800000\"><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=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#800000\"><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\">hasYoungReferent<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">true<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/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\">ReceiverResultReg<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#800000\"><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\">MoveCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">CallSend:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">sendTrampolines<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">min:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">NumSendTrampolines<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">PushR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReceiverResultReg<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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>The &quot;(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\">)&quot; phrase is necessary to add the generated method to the list of methods that the garbage collector must examine when doing a scavenge (an incremental GC in the Squeak VM&#8217;s parlance).  Since few methods have references to young objects doing this cuts down on the amount of work the GC has to do updating object references in machine code.  <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/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\">ReceiverResultReg<\/font><font color=\"#000000\">. loads a register with the receiver from the stack.  The &quot;<\/font><font color=\"#000080\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\">&quot; phrase is there because we generate four run-time entry-points for sends, one each for 0, 1 and 2 arguments sends, and one for N &gt; 2 argument sends.  In typical Smalltalk code arities above 2 have low dynamic frequency.  The <\/font><font color=\"#000080\">CallSend:<\/font><font color=\"#000000\"> phrase, instead of just a simple <\/font><font color=\"#000080\">Call:<\/font><font color=\"#000000\"> adds metadata to the method to allow the VM to locate send sites for various uses such as voiding inline caches when bytecoded methods are redefined in the IDE.<\/p>\n<p>For an example of the inline cache&#8217;s life cycle I&#8217;ll use the <\/font><font color=\"#000080\">basicNew<\/font><font color=\"#000000\"> send in the following method.  Since this is used to instantiate most classes its two sends soon become megamorphic:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>Behavior methods for instance creation<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>new<\/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;Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable.&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=\"#800000\">^<\/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\">initialize<\/font><font color=\"#000000\"><\/p>\n<p>whose bytecodes are<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>21 &lt;70&gt; self<br \/>\n<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>22 &lt;D1&gt; send: basicNew<br \/>\n<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>23 &lt;D0&gt; send: initialize<br \/>\n<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>24 &lt;7C&gt; returnTop<br \/>\n<font color=\"#000000\"><br \/>\nWhen compiled on x86 this produces the following code sequence for the basicNew send:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>0000440f: movl %ss:(%esp), %edx : 8B 14 24 <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>00004412: movl $0x003f199c=#basicNew, %ecx : B9 9C 19 3F 00 <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>00004417: call .+0xffffc014 (0x00000430=ceSend0Args) : E8 14 C0 FF FF <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>IsSendCall:<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>0000441c: pushl %edx : 52 <\/p>\n<p>This is called an &quot;unlinked send&quot; since it hasn&#8217;t been resolved to any particular method target.  It merely calls a run-time routine that will do that lookup.  You can see the effect of the <font color=\"#000080\">CallSend:<\/font> metadata in labelling the address following the call of ceSend0Args as the return address for a send call.  %edx is ReceiverResultReg, holding both the receiver for inline cache checking and the result of all sends.  %ecx is the ClassReg which holds the selector for unlinked sends but will get updated to hold the class tag for the current receiver if and when it is executed.  The machine-code is nicely decorated; the Bochs x86 emulator includes a disassembler that I scan for addresses and look them up using the VM simulator.<\/p>\n<p>The run-time routine ceSend0Args, generated at start-up, is glue code between native code and the rest of the VM, written in C and hence callable via the platform ABI.  The routine writes the native stack and frame pointers, in the x86&#8217;s case %esp and %ebp, into the interpreter&#8217;s stackPointer and framePointer, sets the native stack and frame pointers to the C stack (more of this in a subsequent post, just suspend disbelief for now), and then calls into the interpreter with the relevant arguments.  This is very like a system call in the OS, switching from the user stack to kernel space.  Here we&#8217;re jumping from the Smalltalk stack zone to the C stack.  I call such a jump a trampoline, and use enilopmart to name jumps from C into machine code.<\/p>\n<p>The method called is the following, the core of the binder for unlinked sends.  Some slang, &quot;a method is cogged&quot; means a bytecoded method has been compiled to machine code, and so a send site can be linked to the machine code form of the method.<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Cointerpreter methods for trampolines<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>ceSend:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><b>super:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">superNormalBar<\/font><font color=\"#000000\"> <\/font><b>to:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/font><font color=\"#000000\"> <\/font><b>numArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/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;Entry-point for an unlinked send in a CogMethod.  Smalltalk stack looks like<\/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;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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args<\/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;head sp -&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sender return pc<\/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;<\/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;If an MNU then defer to handleMNUInMachineCodeTo:&#8230; which will dispatch the MNU and<\/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;may choose to allocate a closed PIC with a fast MNU dispatch for this send.  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;attempt to link the send site as efficiently as possible.  All link attempts may fail; e.g.<\/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 we&#8217;re out of code memory.<\/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;<\/font><font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Continue execution via either executeMethod or activateInterpreterMethodFromMachineCode:<\/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;depending on whether the target method is cogged or not.&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\">class<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">canLinkCacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">errSelIdx<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cogMethod<\/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>inline:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">false<\/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\">#cogMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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\">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\">(<\/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\">rcvr<\/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\">rcvr<\/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\">sendBreak:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BaseHeaderSize<\/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\">point:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">lengthOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">receiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/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\">superNormalBar<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><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;<\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#6B6767\">class<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchClassOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/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=\"#6B6767\">class<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">superclassOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodClassOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">frameMethodObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/font><font color=\"#800080\">)<\/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=\"#6B6767\">canLinkCacheTag<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isYoungObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">class<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">not<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">canLinkToYoungClasses<\/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=\"#008080\">&quot;We set the messageSelector and lkupClass for executeMethod below since things<\/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; like the at cache read messageSelector and lkupClass and so they cannot be left stale.&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\">messageSelector<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">lkupClass<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">class<\/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\">argumentCount<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/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\">lookupInMethodCacheSel:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">class<\/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=\"#008080\">&quot;check for coggability because method is in the cache&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\">[<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ifAppropriateCompileToNativeCode:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">newMethod<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\">selector:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">errSelIdx<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">lookupMethodNoMNUEtcInClass:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">class<\/font><font color=\"#008000\">)<\/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\"><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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">handleMNU:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">errSelIdx<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">InMachineCodeTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">classForMessage:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">class<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mayLink:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">canLinkCacheTag<\/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=\"#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;\t&nbsp;&nbsp;&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=\"#800000\">false<\/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=\"#008080\">&quot;Method found and has a cog method.  Attempt to link to it.  The receiver&#8217;s class may be young.<\/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; If the Cogit can&#8217;t store young classes in inline caches we can link to an open PIC instead.&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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">maybeMethodHasCogMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">newMethod<\/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\">cogMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogMethodOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">newMethod<\/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=\"#6B6767\">cogMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">nilObject<\/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=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">setSelectorOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cogMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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=\"#6B6767\">canLinkCacheTag<\/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=\"#008000\">[<\/font><font color=\"#000000\">cogit<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\">linkSendAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">stackPages<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">longAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">stackPointer<\/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\">in:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mframeHomeMethod:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">framePointer<\/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\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cogMethod<\/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\">checked:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">superNormalBar<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">receiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/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\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;If patchToOpenPICFor:.. returns we&#8217;re out of code memory&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;<\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">cogit<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\">patchToOpenPICFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">numArgs:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/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\">receiver:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">rcvr<\/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\">instructionPointer<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">popStack<\/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\">executeNewMethod<\/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\">assert:<\/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;\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\">popStack<\/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\">activateInterpreterMethodFromMachineCode<\/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;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n<\/font>The method handles both normal and super sends, hence the <font color=\"#000080\">superNormalBar<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font> phrase in determining the lookup class.  Early on in Cog&#8217;s evolution I didn&#8217;t maintain the subset of machine-code methods referring to young objects (the young referrers) and so allowed the Cogit to refuse to link a send if the receiver&#8217;s class is young.  Now the Cogit refuses only if there isn&#8217;t room to add the method to the young referrers, hence the <font color=\"#6B6767\">canLinkCacheTag<\/font> phrase.  Then the message is looked-up in the first-level method lookup cache and, if not already so translated and small enough, is compiled to machine code (<font color=\"#000080\">ifAppropriateCompileToNativeCode:<\/font>&#8230;).  Otherwise there&#8217;s a full lookup (<font color=\"#000080\">lookupMethodNoMNUEtcInClass:<\/font>&#8230;) that may have to invoke doesNotUnderstand: or cannotInterpret: (<font color=\"#000080\">handleMNU:<\/font>&#8230;), Smalltalk and Squeak&#8217;s responses when messages are not understood or classes not fully present.  If the target method has been compiled to machine code (<font color=\"#000080\">maybeMethodHasCogMethod:<\/font>) we can link the send site to it.  When the target method was compiled to machine code it may not have been encountered via a send, but instead by block value (in blue-book Smalltalks, and current Squeak,, blocks are embedded within their outer method), in which case it wouldn&#8217;t have had a valid selector, and so we ensure the selector is valid (<font color=\"#6B6767\">cogMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">nilObject<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font>).  Finally we can link the send site.  For now we&#8217;ll ignore <font color=\"#000080\">patchToOpenPICFor:&#8230;<\/font> and look at <font color=\"#000080\">linkSendAt:<\/font>&#8230;<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Cogit methods for inline cacheing<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>linkSendAt:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><b>in:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">sendingMethod<\/font><font color=\"#000000\"> <\/font><b>to:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">targetMethod<\/font><font color=\"#000000\"> <\/font><b>checked:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">checked<\/font><font color=\"#000000\"> <\/font><b>receiver:<\/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=\"#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>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#sendingMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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\">#targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">inlineCacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">extent<\/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\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">between:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZoneBase<\/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=\"#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\">inlineCacheTag<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">checked<\/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\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagForInstance:<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#000080\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;i.e. no change&quot;<\/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=\"#000080\">sendingMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmRefersToYoung<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">not<\/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\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#800080\">(<\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagIsYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">inlineCacheTag<\/font><font color=\"#800080\">)<\/font><font color=\"#008000\">]<\/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=\"#000080\">sendingMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmRefersToYoung:<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addToYoungReferrers:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sendingMethod<\/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\">address<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/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\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">checked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">cmEntryOffset<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifFalse:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">cmNoCheckEntryOffset<\/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\">extent<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">backEnd<\/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\">rewriteInlineCacheAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/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\">tag:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">inlineCacheTag<\/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\">target:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">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=\"#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\">flushICacheFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/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=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">extent<\/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\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>CogIA32Compiler methods for inline cacheing<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>rewriteInlineCacheAt:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><b>tag:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">cacheTag<\/font><font color=\"#000000\"> <\/font><b>target:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">callTargetAddress<\/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;Rewrite an inline cache to call a different target for a new tag.  This variant is used<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to link unlinked sends in ceSend:to:numArgs: et al.  Answer the extent of the 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; change which is used to compute the range of the icache to flush.&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\">callDistance<\/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\">callDistance<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">callTargetAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\">)<\/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\">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;<\/font><font color=\"#000080\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/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=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">callDistance<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">24<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">callDistance<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">3<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">callDistance<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\">   <\/font><font color=\"#800000\">8<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">4<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">callDistance<\/font><font color=\"#000000\">            <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">6<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">cacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">24<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">7<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">cacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">8<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">cacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;&gt;<\/font><font color=\"#000000\">   <\/font><font color=\"#800000\">8<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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\">byteAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callSiteReturnAddress<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">9<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">cacheTag<\/font><font color=\"#000000\">            <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rFF<\/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=\"#800000\">10<br \/>\n<\/font><br \/>\nRecall that the send site looks like<\/p>\n<p><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>0000440f: movl %ss:(%esp), %edx : 8B 14 24 <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>00004412: movl $0x003f199c=#basicNew, %ecx : B9 9C 19 3F 00 <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>00004417: call .+0xffffc014 (0x00000430=ceSend0Args) : E8 14 C0 FF FF <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>IsSendCall:<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>0000441c: pushl %edx : 52<\/p>\n<p>As with any numerous beast a send site isn&#8217;t guaranteed to survive this far.  In typical Smalltalk programs as much as 40% of generated sends may never be executed and hence never linked.<\/p>\n<p><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">sends<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">sends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><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;methodZone <\/font><font color=\"#000080\">methodsDo:<\/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\">:<\/font><font color=\"#000080\">m<\/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=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMMethod<\/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=\"#008000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mapFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/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=\"#800080\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">annotation<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">pc<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">annotation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">IsSendCall<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">[<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">entryPoint<\/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;\t&nbsp;&nbsp;&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\">sends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">sends<\/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\"><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=\"#808080\">entryPoint<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> backEnd <\/font><font color=\"#000080\">callTargetFromReturnAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/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;\t&nbsp;&nbsp;&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\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> methodZoneBase <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;it&#8217;s a linked send&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=\"#00EB00\">[<\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#00EB00\">]<\/font><font color=\"#800000\">]<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;keep scanning&quot;<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/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\">{<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">sends<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">linkedSends<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">sends<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">roundTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0.01<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">}<\/font> #(6352 3943 0.62)<\/p>\n<p>(Being able to script the simulator makes gathering statistcs fun).<\/p>\n<p>Continuing with the example, <font color=\"#000080\">linkSendAt:<\/font>&#8230; above rewrites the send to the following<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000440f: movl %ss:(%esp), %edx : 8B 14 24<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00004412: movl $0x0013de38=Dictionary class, %ecx : B9 38 DE 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00004417: call .+0x0000155c (0x00005978=basicNew@20) : E8 5C 15 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsSendCall:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000441c: pushl %edx : 52<\/p>\n<p>The load of the class register with the selector has been converted into a load of the class of the current receiver (in this case Dictionary class, since the first use is to instantiate a Dictionary).  We call the &quot;checked entry-point&quot; of the target method.  But for now we don&#8217;t use the send site.  Instead control continues with <font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">executeNewMethod<\/font><font color=\"#000000\">.<\/font>  But the <i>next<\/i> time the send is executed, possibly with a different receiver altogether, the checked entry-point will be called, and its job is to see if the current receiver is the same, in which case the target method is valid, and can be executed.  If the receiver&#8217;s class is different however, the execution of the method must be aborted and a message lookup must be done.  So we&#8217;ve converted the costly hash-probe in the interpreter into a fetch of the receivers class and a compare, and we&#8217;ve replaced the indirect jumps involved in activating a method with a direct send of the method, across which the processor can prefetch instructions.  We win big.<\/p>\n<p><H2>Inline Cache Tags; a Class by any Other Name is Still as Sweet<\/H2><br \/>\nAn aside; when I emmigrated from the UK and arrived at ParcPlace Systems in 1995 the first work I did on the VisualWorks VM, HPS, was to reimplement inline cacheing.  The existing implementation always stored the class of receiver in the inline cache (the load of %ecx above).  But that meant that checking sends to the tagged immediates, SmallInteger and Character, were a problem.  In VisualWorks SmallIntegers are 30-bit 2&#8217;s complement integers with least significant two bits equal to 3, and Characters are unsigned 30-bit integers with least significant two bits equal to 1.  To get their class, those lsb tag bits have to be masked off, and used to index the sysOopRegistry, VisualWorks&#8217; array of objects known to the VM.  This code sequence is loooong (tens of insructions) and putting it in the checked entry-point of every method causes bloat.  So Peter Deutsch decided that the best approach was to abort if the receiver was an immediate, and have the single copy of the abort code extract the classes of immediates, and reenter if they matched.  The checked-entry point looked like:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lmiss:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call rtSendMiss<br \/>\n\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;Lentry:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %ebx, %eax\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>mask of the reciever&#8217;s tags and <\/i><i>abort<\/i><i> the send if tagged<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and #3, %eax<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz Lmiss<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lnon-imm entry:\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>if the compiler can prove the receiver isn&#8217;t tagged avoid the tag check via non-immediate send bytecodes<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 4(%ebx), %eax\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>load the receiver&#8217;s class from its header<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp %eax, %ecx\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>if the receiver&#8217;s class doesn&#8217;t match the inline cache, abort the send<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz Lmiss<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lno-check entry:\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>no need to check super sends or sends to constants (by super and no-check send bytecodes)<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>method body\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;we&#8217;re good to go<\/i><\/p>\n<p>But that meant an extra call-return (of the abort sequence) for all sends to immediates.  Indeed, as Ian Piumarta reported, fibonacci written on SmallInteger went slower than fibonacci written with blocks.<\/p>\n<p>So I hit on the idea that the inline cache didn&#8217;t have to contain the class necessarily, simply something that could identify the receiver class.  So I rewrote cacheing to store the tag pattern for immediates and otherwise the class.  So now the check became<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lmiss:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call rtSendMiss<br \/>\n\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;Lentry:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %ebx, %eax\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>mask of the reciever&#8217;s tags and skip class load if tagged<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and #3, %eax<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz Lcompare<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lnon-imm entry:\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>if the compiler can prove the receiver isn&#8217;t tagged avoid the tag check via non-immediate send bytecodes<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 4(%ebx), %eax\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>load the receiver&#8217;s class from its header<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lcompare:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp %eax, %ecx\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>if the receiver&#8217;s class doesn&#8217;t match the inline cache, abort the send<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz Lmiss<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lno-check entry:\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>no need to check super sends or sends to constants (by super and no-check send bytecodes)<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>method body\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;we&#8217;re good to go<\/i><\/p>\n<p>Suddenly immediate sends were just as fast as normal sends and the triply-recursive Takeuchi benchmark went 10 times faster (!!).<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Integer methods for benchmarks<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>takeuchiWith:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">y<\/font><font color=\"#000000\"> <\/font><b>and:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">z<\/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=\"#000080\">y<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/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=\"#000080\">z<\/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=\"#008000\">(<\/font><font color=\"#800000\">self<\/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=\"#000080\">takeuchiWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">y<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">z<\/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;<\/font><font color=\"#000080\">takeuchiWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">y<\/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=\"#000080\">takeuchiWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">z<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/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;<\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">z<\/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=\"#000080\">takeuchiWith:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">y<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">]<\/p>\n<p>I&#8217;d been with the company a month, understood inline cacheing, cleaned it up usefully, and got a useful across-the-board speedup in our macro benchmarks.  I remember getting the thing working and playing with it until about 2am.  The next day I went out and bought a car.<\/p>\n<p>Squeak&#8217;s object model is optimized for space, and so the above is even more important.  Squeak provides &quot;compact classes&quot;, an array of up to 32 classes whose instances contain the index into the compact class table, not the class itself.  This means the most common objects have a one-word header but it also means that the fetch class sequence is tedious:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>ObjectMemory methods for interpreter access<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>fetchClassOf:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">oop<\/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\">ccIndex<\/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>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\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isIntegerObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">oop<\/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=\"#800000\">^ self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassInteger <\/font><font color=\"#000080\">ofObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">specialObjectsOop]<\/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 color=\"#000000\">(<\/font><font color=\"#6B6767\">ccIndex<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compactClassIndexOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">oop<\/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\"><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\">^<\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">classHeader:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">oop<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">AllButTypeMask<\/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=\"#008080\">&quot;look up compact class&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\">[<\/font><font color=\"#800000\">^ self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">ccIndex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/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;\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=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">fetchPointer:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CompactClasses<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">ofObject:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">specialObjectsOop<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\">]<\/p>\n<p>(Why not fix this straight away?  Measurable improvements first).  So in Cog I allow the inline cache to take either the SmallInteger tag (current Squeak has 31-bit immediate SmallIntegers and no immediate characters), the receiver&#8217;s class, or the compact class index, suitably shifted to be unambiguous with the previous two forms.<\/font><font color=\"#800000\"><\/p>\n<p><\/font><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>Cogit methods for compile abstract instructions<\/i><\/font><font color=\"#800000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>compileEntry<\/b><font color=\"#800000\"><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\">AlignmentNops:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">max:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">8<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">entry<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">getInlineCacheClassTagFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReceiverResultReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">into:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">CmpR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">JumpNonZero:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">sendMissCall<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">noCheckEntry<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/font><font color=\"#000000\">.<\/font><font color=\"#800000\"><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\">recordSendTrace<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#800000\"><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\">CallRT:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">ceTraceLinkedSendTrampoline<\/font><font color=\"#000000\">]<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"><i>CogObjectRepresentationForSqueakV3<\/i><\/font><font color=\"#000000\"><i> methods for compile abstract instructions<\/i><\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><b>getInlineCacheClassTagFrom:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">sourceReg<\/font><font color=\"#000000\"> <\/font><b>into:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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;Extract the inline cache tag for the object in sourceReg into destReg. The inline<\/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; cache tag for a given object is the value loaded in inline caches to distinguish objects<\/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 different classes.  In SqueakV3 the tag is the integer tag bit for SmallIntegers (1),<\/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 compact class index shifted by log: 2 word size for objects with compact classes<\/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; (1 * 4 to: 31 * 4 by: 4), or the class.  These ranges cannot overlap because the heap<\/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 hence the lowest class object) is beyond the machine code zone.&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\">jumpIsInt<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">jumpCompact<\/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\">#jumpIsInt<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">#jumpCompact<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sourceReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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\">jumpIsInt<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><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=\"#008080\">&quot;Get header word in destReg&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\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sourceReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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;Form the byte index of the compact class field&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\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">LogicalShiftRightCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compactClassFieldLSB<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compactClassFieldWidth<\/font><font color=\"#008000\">)<\/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\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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\">jumpCompact<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><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=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">classFieldOffset<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">r:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sourceReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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;The use of signedIntFromLong is a hack to get round short addressing mode computations.<\/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; Much easier if offsets are signed and the arithmetic machinery we have makes it difficult to<\/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; mix signed and unsigned offsets.&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\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">AllButTypeMask<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">signedIntFromLong<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg<\/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\">jumpCompact<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">jumpIsInt<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cogit<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">0<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nSo the prologue of the machine code Behavior&gt;&gt;basicNew method looks like:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>5958<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objhdr: 1003<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nArgs: 0\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: 2<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blksiz: 148<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method: 7C8DE8<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mthhdr: 1C8D<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selctr: 3F199C=#basicNew<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blkentry: 0<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stackCheckOffset: BB\/5A13<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>00005970: xorl %edx, %edx : 31 D2 <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>00005972: call .+0xffffac71 (0x000005e8=ceMethodAbort) : E8 71 AC FF FF <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>00005977: nop  : 90 <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>entry:<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>00005978: movl %edx, %eax : 89 D0 <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>0000597a: andl $0x00000001, %eax : 83 E0 01 <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>0000597d: jnz .+0x00000010 (0x0000598f=basicNew@37) : 75 10 <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>0000597f: movl %ds:(%edx), %eax : 8B 02 <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>00005981: shrl $0x0a, %eax : C1 E8 0A <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>00005984: andl $0x0000007c, %eax : 83 E0 7C <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>00005987: jnz .+0x00000006 (0x0000598f=basicNew@37) : 75 06 <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>00005989: movl %ds:0xfffffffc(%edx), %eax : 8B 42 FC <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>0000598c: andl $0xfffffffc, %eax : 83 E0 FC <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>0000598f: cmpl %ecx, %eax : 39 C8 <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>00005991: jnz .+0xffffffdf (0x00005972=basicNew@1A) : 75 DF <font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font>noCheckEntry:<font color=\"#000000\"><\/p>\n<p>So while the inline cache check avoids indirecting to Squeaks specialObjectsArray to fetch the classes of immediates and compact instances, the sequence is still quite long and one of the reasons why I&#8217;m eager to implement a streamlined object representation when time and funding permit.  By the way, jumping to 5972 invokes ceMethodAbort with %edx containing the receiver and vectors to handling a send miss.  Jumping to 5970 invokes ceMethodAbort with %edx zero, is called by method frame build on stack overflow, and vectors to stack overflow and event-checking code, allowing the abort call to do double duty.<\/p>\n<p><\/font><H2>The Life-Cycle of the Lesser-Spotted Inline Cache; Emergence as a Polymorphic Inline Cache<\/H2><br \/>\nSo far so good.  For those 90% of active send sites, sends are now much faster.  The method code sequence is a simple register load of a constant, a direct call, an overly complex class tag extraction and a compare against the tag register.  This can be faster than a C++ V-table dispatch because there&#8217;s no indirect call through the V-table.  Modern processors provide support for indirect branch accelleration but these facilities can be overwhelmed by a large working set.  Of course, the class fetch can cause read stalls with a large working set also.  Your mileage will vary.<\/p>\n<p>But what happens when a send does miss?  A natural approach would be to retry the lookup with the new class and reloink the snd site to the new lookup.  In HPS Peter Deutsch crafted inline machine code to probe the first-level method lookup cache and relink the send site if a match was found.  In 1995 that code, handling 10% of the active send sites, took fully 15% of entire execution time in the macro benchmark suite, by far the highest single cost in the VM.  The Self team had already shown in 1991 that <a href=\"http:\/\/labs.oracle.com\/self\/papers\/pics.html\">polymorphic inline caches<\/a> (PICs) were a more effective solution.  Instead of rebinding the send site on every send, allocate a jump table, essentially a small machine code method that extracts the class and then does a sequence of compares and jumps to target methods, and rebind the send site to call it.  The PIC will grow over time.  When first created it will handle two cases, the send site&#8217;s original class and the class of the new receiver.  As more receiver classes are encountered the PIC can grow to accomodate them.  So one issue is how big to allow the PIC to grow.  In my experience there is a near exponential decay in the number of cases.  So large PICs are unlikely to be profitable, and as we&#8217;ll see, there&#8217;s a better way to handle megamorphic send sites.  In HPS I used 8 entries and in Cog I use 6 entries.<br \/>\n<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">Bag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodsDo:<\/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\">:<\/font><font color=\"#000080\">m<\/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=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMClosedPIC<\/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=\"#008000\">[<\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">add:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICNumCases<\/font><font color=\"#008000\">]<\/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=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sortedElements<\/font><font color=\"#000000\"> {2-&gt;231 . 3-&gt;57 . 4-&gt;8 . 5-&gt;6 . 6-&gt;55}<\/p>\n<p>Clearly there&#8217;s an anomaly here with 6-entry PICs being relatively abundant, but things are reasonable at first \ud83d\ude42  What happens if we double the maximum size to 12?<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">Bag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">new<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodsDo:<\/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\">:<\/font><font color=\"#000080\">m<\/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=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMClosedPIC<\/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=\"#008000\">[<\/font><font color=\"#6B6767\">picCounts<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">add:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICNumCases<\/font><font color=\"#008000\">]<\/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=\"#6B6767\">picCounts<\/font><font color=\"#000080\"> sortedElements <\/font><font color=\"#000000\">{2-&gt;236 . 3-&gt;58 . 4-&gt;8 . 5-&gt;6 . 6-&gt;5 . 7-&gt;5 . 8-&gt;2 . 9-&gt;9 . 10-&gt;5 . 11-&gt;2 . 12-&gt;34}<\/p>\n<p>So the peak at the end is caused by those send sites on their way to becomming megamorphic, which suggests an obvious optimization I&#8217;ll discuss later.  But for now let&#8217;s see what a closed PIC looks like.<\/font>  Since we need to introspect over a closed PIC (e.g. when the garbage collector updates class references in the code) it needs to be well laid-out.  So early in startup I compile a prototype and derive various offsets and the size from it:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Cogit methods for inline cacheing<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>compileClosedPICPrototype<\/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;Compile the abstract instructions for a full closed PIC used to initialize closedPICSize&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\">numArgs<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">jumpNext<\/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>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#jumpNext<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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=\"#6B6767\">numArgs<\/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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compilePICProlog:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">numArgs<\/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\">jumpNext<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compileCPICEntry<\/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\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16r5EAF00D<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">JumpLong:<\/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=\"#800000\">16r5EEDCA5E<\/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><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\">jumpNext<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">endCPICCase0<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">numPICCases<\/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=\"#000080\">do:<\/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=\"#000080\">h<\/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;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">CmpCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rBABE1F15<\/font><font color=\"#000080\">+<\/font><font color=\"#000080\">h<\/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;<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rBADA550<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">h<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">JumpLongZero:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCoerceSimple:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rBEDCA5E0<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">h<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;void *&#8217;<\/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\">h<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/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;<\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">endCPICCase1<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">16rAB5CE55<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">JumpLong:<\/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=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICMissTrampolineFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">numArgs<\/font><font color=\"#008000\">)<\/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><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\">0<\/font><br \/>\n<font color=\"#000000\"><br \/>\nThe first comparison in a closed PIC is very similar to the checked entry code in a method; it fetches the class of the receiver and then compares it against the class tag loaded at the send site (waste not, want not).  Instead of falling through on a match it jumps to the unchecked entry-point of the send site&#8217;s original target method (the jump to <\/font><font color=\"#800000\">16r5EEDCA5E<\/font><font color=\"#000000\"> in the prototype above).  Each subsequent comparison compares the class tag in TempReg (%eax) against a constant, jumping if there&#8217;s a match and finally calling a specialized miss routine if no cases match.  Here I have an admission to make; the constant loads of ClassReg above as yet serve no purpose.  They&#8217;re there to speed-up doesNotUnderstand: but that&#8217;s currently unimplemented; so for now please ignore those constant loads.  Apologies.<\/p>\n<p>When first created then, the closed PIC for basicNew above looks like<\/p>\n<p><\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5F98<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nArgs: 0\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: 4<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blksiz: A0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selctr: 3F199C=#basicNew<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cPICNumCases: 2<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb0: xorl %ecx, %ecx : 31 C9<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb2: call .+0xffffa699 (0x00000650=cePICAbort) : E8 99 A6 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb7: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb8: movl %edx, %eax : 89 D0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fba: andl $0x00000001, %eax : 83 E0 01<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fbd: jnz .+0x00000010 (0x00005fcf=basicNew@37) : 75 10<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fbf: movl %ds:(%edx), %eax : 8B 02<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc1: shrl $0x0a, %eax : C1 E8 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc4: andl $0x0000007c, %eax : 83 E0 7C<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc7: jnz .+0x00000006 (0x00005fcf=basicNew@37) : 75 06<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc9: movl %ds:0xfffffffc(%edx), %eax : 8B 42 FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fcc: andl $0xfffffffc, %eax : 83 E0 FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fcf: cmpl %ecx, %eax : 39 C8<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd1: jnz .+0x0000000a (0x00005fdd=basicNew@45) : 75 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd3: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd8: jmp .+0xfffff9b6 (0x00005993=basicNew@3B) : E9 B6 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase0:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fdd: cmpl $0x00139164=SharedQueue class, %eax : 3D 64 91 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fe2: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fe7: jz .+0xfffff9a6 (0x00005993=basicNew@3B) : 0F 84 A6 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase1:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fed: movl $0x00005f98=basicNew@0, %ecx : B9 98 5F 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005ff2: jmp .+0xffffa6c1 (0x000006b8=ceCPICMissTrampoline) : E9 C1 A6 FF FF <\/p>\n<p>The cePICAbort call is unused; part of the same unimplemented optimization for MNU.  The abort when no matches are found is the final jump to ceCPICMissTrampoline.  Both cases jump to 5993=basicNew@3B, which is the start of the basicNew method whose entry code is shown above.  The ClosedPICCase0 and ClosedPICCase1 labels are offsets computed from the prototype and allow the VM to find class and target method references for garbage collection and send site unlinking.  And the send site is patched to call the PIC, not the original target:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000440f: movl %ss:(%esp), %edx : 8B 14 24<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00004412: movl $0x0013de38=Dictionary class, %ecx : B9 38 DE 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00004417: call .+0x00001b9c (0x00005fb8=basicNew@20) : E8 9C 1B 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsSendCall:<\/p>\n<p>If we let the system run until the site becomes megamorphic (in our case more than 6 cases) then the PIC grows to the following:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5F98<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nArgs: 0\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: 4<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blksiz: A0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selctr: 3F199C=#basicNew<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cPICNumCases: 6<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb0: xorl %ecx, %ecx : 31 C9<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb2: call .+0xffffa699 (0x00000650=cePICAbort) : E8 99 A6 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb7: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fb8: movl %edx, %eax : 89 D0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fba: andl $0x00000001, %eax : 83 E0 01<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fbd: jnz .+0x00000010 (0x00005fcf=basicNew@37) : 75 10<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fbf: movl %ds:(%edx), %eax : 8B 02<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc1: shrl $0x0a, %eax : C1 E8 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc4: andl $0x0000007c, %eax : 83 E0 7C<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc7: jnz .+0x00000006 (0x00005fcf=basicNew@37) : 75 06<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fc9: movl %ds:0xfffffffc(%edx), %eax : 8B 42 FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fcc: andl $0xfffffffc, %eax : 83 E0 FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fcf: cmpl %ecx, %eax : 39 C8<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd1: jnz .+0x0000000a (0x00005fdd=basicNew@45) : 75 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd3: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fd8: jmp .+0xfffff9b6 (0x00005993=basicNew@3B) : E9 B6 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase0:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fdd: cmpl $0x00139164=SharedQueue class, %eax : 3D 64 91 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fe2: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fe7: jz .+0xfffff9a6 (0x00005993=basicNew@3B) : 0F 84 A6 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase1:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005fed: cmpl $0x0013f76c=Delay class, %eax : 3D 6C F7 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005ff2: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005ff7: jz .+0xfffff996 (0x00005993=basicNew@3B) : 0F 84 96 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase2:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00005ffd: cmpl $0x0013da5c=OrderedCollection class, %eax : 3D 5C DA 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006002: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006007: jz .+0xfffff986 (0x00005993=basicNew@3B) : 0F 84 86 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase3:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000600d: cmpl $0x0013dd94=Set class, %eax : 3D 94 DD 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006012: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006017: jz .+0xfffff976 (0x00005993=basicNew@3B) : 0F 84 76 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase4:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000601d: cmpl $0x001404b8=UnixFileDirectory class, %eax : 3D B8 04 14 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006022: movl $0x00000000, %ebx : BB 00 00 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006027: jz .+0xfffff966 (0x00005993=basicNew@3B) : 0F 84 66 F9 FF FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClosedPICCase5:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000602d: movl $0x00005f98=basicNew@0, %ecx : B9 98 5F 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00006032: jmp .+0xffffa681 (0x000006b8=ceCPICMissTrampoline) : E9 81 A6 FF FF <\/p>\n<p>So as each new case is encountered the jump table is extended until the limit is reached:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Cogit methods for inline cacheing<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/i><b>cogExtendPIC:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><b>CaseNMethod:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">caseNMethodOrNil<\/font><font color=\"#000000\"> <\/font><b>tag:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">caseNTag<\/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\">#cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">operand<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">target<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">size<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">end<\/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\">coInterpreter<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\">compilationBreak:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">point:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">lengthOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">allocateOpcodes:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">5<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bytecodes:<\/font><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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">assert:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagIsYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">caseNTag<\/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=\"#6B6767\">operand<\/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\">target<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\">  <\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogMethodOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">caseNMethodOrNil<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cmNoCheckEntryOffset.<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\">CmpCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">caseNTag<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">operand<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/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\">JumpLongZero:<\/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\">target<\/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><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\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">JumpLong:<\/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=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICMissTrampolineFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmNumArgs<\/font><font color=\"#008000\">)<\/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><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 color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">computeMaximumSizes<\/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\">address<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addressOfEndOfCase:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICNumCases<\/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=\"#000080\">inCPIC:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/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\">size<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">generateInstructionsAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">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=\"#6B6767\">end<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">outputInstructionsAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">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\">processor<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">flushICacheFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">address<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">closedPICSize<\/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\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICNumCases:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPIC<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cPICNumCases<\/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=\"#800000\">^<\/font><font color=\"#800000\">0<\/font><\/p>\n<p>So what to do for megamorphic sites?  We could simply handle the send in the miss routine, but that&#8217;s going to be slow; apart from the unnecessary comparisons there&#8217;s the cost of calling the miss routine and then repeating the interpreter&#8217;s slothful lookup in the first-level method lookup cache.  Much better is to create a first-level method lookup cache probe in machine code, but specialised for the send site&#8217;s selector.  If so, the selector and its hash become constants; that saves time finding the selector and reduces register pressure (which is an issue when we improve the code generator to pass arguments in registers).  And directly calling the lookup code from the send site gets us to the lookup pretty damn quick.<\/p>\n<p><i>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleStackBasedC<\/i><i>ogit methods for inline cacheing<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/i><b>compileOpenPIC:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><b>numArgs:<\/b><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/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;Compile the code for an open PIC.  Perform a probe of the first-level 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; lookup cache followed by a call of ceSendFromOpenPIC: if the probe fails.&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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">jumpClassMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">itsAHit<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">jumpBCMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">routine<\/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\">#jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">#jumpClassMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">#itsAHit<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">#jumpBCMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;AbstractInstruction *&#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\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">compilePICProlog:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">numArgs<\/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\">AlignmentNops:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#404040\">BytesPerWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">max:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">8<\/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\">entry<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">genGetClassObjectOf:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ReceiverResultReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">into:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">scratchReg:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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;Do first of three probes.  See CoInterpreter&gt;&gt;lookupInMethodCacheSel:class:&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\">flag:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#lookupInMethodCacheSel:class:<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;so this method shows up as a sender of lookupInMethodCacheSel:class:&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\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/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\">XorCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">LogicalShiftLeftCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">annotate:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">CmpCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">objRef:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">CmpR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">jumpClassMiss<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0<\/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\">itsAHit<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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;Fetch the method.  The interpret trampoline requires the bytecoded method in SendNumArgsReg&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\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">SendNumArgsReg<\/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 the method is compiled jump to its unchecked entry-point, otherwise interpret it.&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\">objectRepresentation<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\">genLoadSlot:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">HeaderIndex<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">sourceReg:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">destReg:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">TempReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">jumpBCMethod<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">genJumpSmallIntegerInScratchReg:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">jumpBCMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">interpretCall<\/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\">AddCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cmNoCheckEntryOffset<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">JumpR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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;First probe missed.  Do second of three probes.  Shift hash right one and retry.&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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">jumpClassMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">MoveR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">XorCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">LogicalShiftLeftCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">annotate:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">CmpCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">objRef:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">CmpR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">JumpZero:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">itsAHit<\/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;Second probe missed.  Do last probe.  Shift hash right two and retry.&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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">XorCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">2<\/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\">LogicalShiftLeftCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">AndCq:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MethodCacheMask<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ClassReg<\/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\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheSelector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">annotate:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">CmpCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">objRef:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">JumpNonZero:<\/font><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=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveMw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodCacheAddress<\/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\">(<\/font><font color=\"#404040\">MethodCacheClass<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&lt;&lt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">ShiftForWord<\/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=\"#404040\">ClassReg<\/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=\"#404040\">TempReg<\/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\">CmpR:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">TempReg<\/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\">JumpZero:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">itsAHit<\/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;Last probe missed.  Call ceSendFromOpenPIC: to do the full lookup.&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\">jumpSelectorMiss<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">jmpTarget:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Label<\/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\">genSaveStackPointers<\/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\">genLoadCStackPointers<\/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\">methodLabel<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">addDependent:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">annotateAbsolutePCRef:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">MoveCw:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodLabel<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">R:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/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=\"#000000\">cStackAlignment<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/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\">backEnd<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\">genAlignCStackSavingRegisters:<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">numArgs:<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">wordAlignment:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cStackAlignment<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">BytesPerWord<\/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\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">genPassReg:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">SendNumArgsReg<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asArgument:<\/font><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\">routine<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cCode:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">&#8216;(sqInt)ceSendFromInLineCacheMiss&#8217;<\/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\">inSmalltalk:<\/font><font color=\"#000000\"> <\/font><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\">#ceSendFromInLineCacheMiss:<\/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\">annotateCall:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">Call:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">routine<\/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;Note that this call does not return.&quot;<\/font><font color=\"#000000\"><\/p>\n<p>Again allocating <\/font><font color=\"#000000\">a prototype at startup allows us to know how much space to allocate.  The open PIC has the following machine code. Notice that since the first-level method lookup cache includes classes, not class tags (something that when time allows could be changed), the entry fetches the receiver&#8217;s class, not merely its class tag (hence the load of SmallInteger at <\/font>00017279, and the load of the compactClassTable at 00017280)<font color=\"#000000\">.<\/p>\n<p><\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17240<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nArgs: 0\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: 5<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blksiz: 108<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selctr: 3F199C=#basicNew<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017258: xorl %ecx, %ecx : 31 C9<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001725a: call .+0xfffe93f1 (0x00000650=cePICAbort) : E8 F1 93 FE FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001725f: nop  : 90<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017260: movl %edx, %eax : 89 D0<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017262: andl $0x00000001, %eax : 83 E0 01<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017265: jnz .+0x00000012 (0x00017279=basicNew@39) : 75 12<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017267: movl %ds:(%edx), %eax : 8B 02<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017269: shrl $0x0a, %eax : C1 E8 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001726c: andl $0x0000007c, %eax : 83 E0 7C<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001726f: jnz .+0x0000000f (0x00017280=basicNew@40) : 75 0F<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017271: movl %ds:0xfffffffc(%edx), %ecx : 8B 4A FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017274: andl $0xfffffffc, %ecx : 83 E1 FC<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017277: jmp .+0x0000000d (0x00017286=basicNew@46) : EB 0D<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017279: movl $0x0013aa60=SmallInteger, %ecx : B9 60 AA 13 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001727e: jmp .+0x00000006 (0x00017286=basicNew@46) : EB 06<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017280: movl %ds:0x10da80=a(n) Array(%eax), %ecx : 8B 88 80 DA 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017286: movl %ecx, %ebx : 89 CB<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017288: xorl $0x003f199c=#basicNew, %ecx : 81 F1 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001728e: shll $0x02, %ecx : C1 E1 02<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017291: andl $0x00003ff0=critical:@268, %ecx : 81 E1 F0 3F 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017297: movl %ds:0x108148(%ecx), %eax : 8B 81 48 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001729d: cmpl $0x003f199c=#basicNew, %eax : 3D 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172a2: jnz .+0x0000001f (0x000172c3=basicNew@83) : 75 1F<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172a4: movl %ds:0x10814c(%ecx), %eax : 8B 81 4C 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172aa: cmpl %ebx, %eax : 39 D8<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172ac: jnz .+0x00000015 (0x000172c3=basicNew@83) : 75 15<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172ae: movl %ds:0x108150(%ecx), %ebx : 8B 99 50 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172b4: movl %ds:0x4(%ebx), %eax : 8B 43 04<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172b7: movl %eax, %ecx : 89 C1<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172b9: andl $0x00000001, %eax : 83 E0 01<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172bc: jnz .+0xffffff9c (0x0001725a=basicNew@1A) : 75 9C<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172be: addl $0x0000003b, %ecx : 83 C1 3B<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172c1: jmp %ecx : FF E1<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172c3: movl %ebx, %ecx : 89 D9<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172c5: xorl $0x003f199c=#basicNew, %ecx : 81 F1 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172cb: shll $1, %ecx : D1 E1<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172cd: andl $0x00003ff0=critical:@268, %ecx : 81 E1 F0 3F 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172d3: movl %ds:0x108148(%ecx), %eax : 8B 81 48 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172d9: cmpl $0x003f199c=#basicNew, %eax : 3D 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172de: jnz .+0x0000000a (0x000172ea=basicNew@AA) : 75 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172e0: movl %ds:0x10814c(%ecx), %eax : 8B 81 4C 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172e6: cmpl %ebx, %eax : 39 D8<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172e8: jz .+0xffffffc4 (0x000172ae=basicNew@6E) : 74 C4<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172ea: movl %ebx, %ecx : 89 D9<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172ec: xorl $0x003f199c=#basicNew, %ecx : 81 F1 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172f2: andl $0x00003ff0=critical:@268, %ecx : 81 E1 F0 3F 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172f8: movl %ds:0x108148(%ecx), %eax : 8B 81 48 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000172fe: cmpl $0x003f199c=#basicNew, %eax : 3D 9C 19 3F 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsObjectReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017303: jnz .+0x0000000a (0x0001730f=basicNew@CF) : 75 0A<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017305: movl %ds:0x10814c(%ecx), %eax : 8B 81 4C 81 10 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001730b: cmpl %ebx, %eax : 39 D8<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001730d: jz .+0xffffff9f (0x000172ae=basicNew@6E) : 74 9F<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001730f: 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;00017315: 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;0001731b: 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;00017321: 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;00017327: movl $0x00017240=basicNew@0, %ebx : BB 40 72 01 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsAbsPCReference:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001732c: 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;0001732f: pushl %ebx : 53<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017330: call .+0xfffe8b17 (0xfffffe4c=&amp;ceSendFromInLineCacheMiss:) : E8 17 8B FE FF<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsRelativeCall:<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017335: addb %al, %ds:(%eax) : 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017337: addb %al, %ds:(%eax) : 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00017339: addb %al, %ds:(%eax) : 00 00<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r1727E IsObjectReference   (16r17347)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r17286 IsObjectReference   (16r17346)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r1728E IsObjectReference   (16r17345)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r172A2 IsObjectReference   (16r17344)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r172CB IsObjectReference   (16r17342)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r172DE IsObjectReference   (16r17341)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r172F2 IsObjectReference   (16r17340)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r17303 IsObjectReference   (16r1733F)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r1732C IsAbsPCReference    (16r1733D)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  16r17335 IsRelativeCall      (16r1733C)<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nAt 000172b4 through 000172c1 is the test that the method is cogged and the indirect jump to the unchecked entry-point (16r3b\/0x3b) if so.  22 instructions ot dispatch in the shortest case, but more importantly at least 4 memory references and an indirect jump.  At the end of the open PIC is metadata that identifies where all the object references are, and (on x86) the relative call of the run-time miss routine ceSendFromInLineCacheMiss:.  The plumbing of the call into C is from 0001730f through 0001732c where we write-back stack and frame pointers to the interpreter variables and at 0001731b &amp; 00017321 switch to the C stack,  preserving platform stack alignment while passing the open PIC as the argument at 0001732c &amp; 0001732f.<\/p>\n<p>So that&#8217;s almost the complete life-cycle of a send site, born unlinked, hatching as a monomorphic in-line cache, experiencing a growth spurt as a closed PIC and then maturing as an open PIC.  The final steps in the life-cycle are either rebirth or death, to be unlinked, for example when a method with the send site&#8217;s selector is redefined, or to disappear completely when code reclamation destroys the machine code method containing the send site.  These final two steps, plus some chicanery we can play with PICs and MNUs, will wait for another post on method management and method metadata.<\/p>\n<p><H2>An Obvious Optimization<\/H2><br \/>\nWriting a VM in a high-level language with an IDE makes exploring the VM very easy.  Once I&#8217;d implemented open PICs in Cog I wondered whether it was worth skipping creating a Closed PIC when a site becomes polymorphic if an Open PIC with the site&#8217;s selector already exists.  The benefit is avoiding lots of code space modifications and an allocation.  The downside is replacing faster Closed PIC dispatch with slower Open PIC dispatch.  The question is how many send sites would be prematurely promoted to megamorphic, or how many Closed PICs have selectors for which there are Open PICs.  Asking the question is easy:<br \/>\n<font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cpics<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">opics<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">openSelectors<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">cpics<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogMethodsSelect:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">cm<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cm<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMClosedPIC<\/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=\"#6B6767\">opics<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogMethodsSelect:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">cm<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cm<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMOpenPIC<\/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=\"#6B6767\">openSelectors<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">opics<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">collect:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">ea<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ea<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asSet<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">{<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cpics<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">size<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#6B6767\">cpics<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">select:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">cpic<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">openSelectors<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">includes:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cpic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">size<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">}<\/font><font color=\"#000000\"><br \/>\n<\/font>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #(303 52)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;52 \/ 303.0 0.1716171617161716<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nOnly 17% of polymorphic send sites would get prematurely promoted.  So I&#8217;ve implemented a simple sharing scheme.  The Cogit maintains a linked list of Open PICs, and before it creates a Closed PIC for a send site will patch it to an Open PIC if the list contains one for the send&#8217;s selector.  So here&#8217;s the binder for monomorphic misses, called from ceMethodAbort if and when the class tag check fails.  About half way down you&#8217;ll see &quot;<font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">openPICWithSelector:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\">.<\/font>&quot;.<\/p>\n<p><i>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C<\/i><i>ogit methods for inline cacheing<\/i><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>ceSICMiss:<\/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;An in-line cache check in a method has failed.  The failing entry check has jumped<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to the ceSendMiss abort call at the start of the method which has called this routine.<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If possible allocate a closed PIC for the current and existing classes.<\/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 stack looks like:<\/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;receiver<\/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;args<\/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;sender return address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sp=&gt;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ceSendMiss call return address<\/font><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008080\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; So we can find the method that did the failing entry check at<\/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;ceSendMiss call return address &#8211; sicMissReturnOffset<\/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 we can find the send site from the outer return address.&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>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=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">innerReturn<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newTargetMethodOrNil<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cacheTag<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">extent<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">result<\/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>var:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#pic<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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\">#targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\"><b>type:<\/b><\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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=\"#008080\">&quot;Whether we can relink to a PIC or not we need to pop off the inner return and identify the target method.&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\">innerReturn<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">popStack<\/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\">targetMethod<\/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\">innerReturn<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">missOffset<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#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;<\/font><font color=\"#6B6767\">outerReturn<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">stackTop<\/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\">entryPoint<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callTargetFromReturnAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/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;<font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">newTargetMethodOrNil<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">lookupAndCog:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">for:<\/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=\"#008080\">&quot;We assume lookupAndCog:for: will *not* reclaim the method zone&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\">cacheTag<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagForInstance:<\/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\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#000000\">objectRepresentation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagIsYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cacheTag<\/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;  <\/font><font color=\"#000080\">or:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">[<\/font><font color=\"#6B6767\">newTargetMethodOrNil<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">notNil<\/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\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#000000\">objectMemory<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isYoung:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newTargetMethodOrNil<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/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=\"#6B6767\">result<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">patchToOpenPICFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">numArgs:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmNumArgs<\/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\">receiver:<\/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;\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\">result<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">not<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;If patchToOpenPICFor:.. returns we&#8217;re out of code memory&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=\"#800000\">^<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceSendFromInLineCacheMiss:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/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;See if an Open PIC is already available.&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\">pic<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">openPICWithSelector:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">isNil<\/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=\"#008080\">&quot;otherwise attempt to create a closed PIC for the two cases.&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=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cogPICSelector:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">selector<\/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\">numArgs:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmNumArgs<\/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\">Case0Method:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/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\">Case1Method:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">newTargetMethodOrNil<\/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\">tag:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">cacheTag<\/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=\"#008000\">(<\/font><font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">between:<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">MaxNegativeErrorCode<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">and:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">&#8211;<\/font><font color=\"#800000\">1<\/font><font color=\"#008000\">)<\/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;<\/font><font color=\"#008000\">[<\/font><font color=\"#008080\">&quot;For some reason the PIC couldn&#8217;t be generated, most likely a lack of code memory.<\/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;  Continue as if this is an unlinked send.&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\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">InsufficientCodeSpace<\/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=\"#800080\">[<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callForCogCompiledCodeCompaction<\/font><font color=\"#800080\">]<\/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\">^<\/font><font color=\"#000000\">coInterpreter<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ceSendFromInLineCacheMiss:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">targetMethod<\/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\">extent<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">backEnd<\/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\">rewriteCallAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/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\">target:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">cmEntryOffset<\/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\">flushICacheFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/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=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">extent<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">flushICacheFrom:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asInteger<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">closedPICSize<\/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;Jump back into the pic at its entry in case this is an MNU (newTargetMethodOrNil is nil)&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\">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;<\/font><font color=\"#000080\">executeCogMethodFromLinkedSend:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">pic<\/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\">withReceiver:<\/font><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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">andCacheTag:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">(<\/font><font color=\"#000000\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">inlineCacheTagAt:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">outerReturn<\/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;NOTREACHED&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\">nil<\/font><\/p>\n<p><H2>Let Me Tell You All About It, Let Me Quantify<\/H2><br \/>\nLet&#8217;s finish up by looking at the numbers.  First, how many send sites of each kind are there?  I&#8217;ve taken the numbers in this post from running an image throguh start-up to a point where it prompts for user input.  That&#8217;s not necessarily representative or unrepresentative of Smalltalk programs in general, simply a convenient source of numbers.  Actual numbers will vary according to work-load but these are not hugely at variance with my experience with the VisualWorks VM.  Take them with a pinch of salt.<\/p>\n<p><font color=\"#000000\">\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmethods<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nunlinked nlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmono<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">npoly<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmega<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">nmethods<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmono<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">npoly<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmega<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><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\">methodZone<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">methodsDo:<\/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\">:<\/font><font color=\"#000080\">m<\/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\">nmethods<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmethods<\/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\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMMethod<\/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=\"#008000\">[<\/font><font color=\"#800000\">self<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">mapFor:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">m<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/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=\"#800080\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">annotation<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">pc<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000080\">annotation<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">IsSendCall<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">[<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">target<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">offset<\/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;\t&nbsp;&nbsp;&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\">nsends<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/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\"><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=\"#808080\">entryPoint<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#000000\">backEnd<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">callTargetFromReturnAddress:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">pc<\/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;\t&nbsp;&nbsp;&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\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&gt;<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">methodZoneBase<\/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\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;it&#8217;s a linked send&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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#00EB00\">[<\/font><font color=\"#808080\">offset<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#EB8D00\">(<\/font><font color=\"#808080\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">bitAnd:<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">entryPointMask<\/font><font color=\"#EB8D00\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">checkedEntryAlignment<\/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;\t&nbsp;&nbsp;&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=\"#EB8D00\">[<\/font><font color=\"#000000\">cmEntryOffset<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#EB8D00\">[<\/font><font color=\"#000000\">cmNoCheckEntryOffset<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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\">target<\/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=\"#808080\">entryPoint<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">&#8211;<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">offset<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">#&#8217;CogMethod *&#8217;<\/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=\"#808080\">target<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMMethod<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#6B6767\">nmono<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmono<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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\">target<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMClosedPIC<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#6B6767\">npoly<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">npoly<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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\">target<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">cmType<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">=<\/font><font color=\"#000000\"> <\/font><font color=\"#404040\">CMOpenPIC<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&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=\"#6B6767\">nmega<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmega<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#EB8D00\">]<\/font><font color=\"#00EB00\">]<\/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\">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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#00EB00\">[<\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#00EB00\">]<\/font><font color=\"#800000\">]<\/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;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><font color=\"#800000\">false<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;keep scanning&quot;<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">nlinked<\/font><font color=\"#000000\"> <\/font><b>:=<\/b><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/font><font color=\"#000000\"> &#8211; <\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">{<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmethods<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmono<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">npoly<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmega<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nunlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nsends<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">roundTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0.001<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmono<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">roundTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0.001<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">npoly<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">roundTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0.001<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nmega<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">nlinked<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">roundTo:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">0.001<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">} #(1752 6352 2409 3566 307 70 0.379 0.904 0.078 0.018)<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nmethods\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1752<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nsends\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6352\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nsends \/ nmethods 3.63)<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nunlinked\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2409\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nunlinked \/ nsends\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.379<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nmono\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3566\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nmono \/ nlinked\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.904<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npoly\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  307\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npoly   \/ nlinked\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.078<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nmega\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    70\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nmega \/ nlinked\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.018<\/p>\n<p>And how fast do the sends perform?  Let&#8217;s send the message yourself, which answers the receiver, and so compiles to the checked entry-point followed by a single return instruction, to some homogenous and inhomogenous collections:<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">void<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousImmediate<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousCompact<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousNormal<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">polymorphic<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">megamorphic<\/font><font color=\"#000000\"> <\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"><br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">void<\/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\">1024<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">withAll:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">homogenousImmediate<\/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\">1024<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">withAll:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">homogenousCompact<\/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\">1024<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">withAll:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1.0<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">homogenousNormal<\/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\">1024<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">withAll:<\/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\">2<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">polymorphic<\/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\">1024<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">polymorphic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">size<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">by:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">4<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/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\">:<\/font><font color=\"#000080\">i<\/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\">polymorphic<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asFloat<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1025<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1.0s1<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;scaled decimal&quot;<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#6B6767\">megamorphic<\/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\">1024<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">megamorphic<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">size<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">by:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">8<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/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\">:<\/font><font color=\"#000080\">i<\/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\">megamorphic<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asFloat<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1025<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1.0s1<\/font><font color=\"#000000\">;<\/font><font color=\"#000000\"> <\/font><font color=\"#008080\">&quot;scaled decimal&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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">4<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/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\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">asFloat<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">6<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">\/<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1025<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/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\">at:<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">+<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">7<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">put:<\/font><font color=\"#000000\"> <\/font><font color=\"#008000\">(<\/font><font color=\"#000080\">i<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">*<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">1.0s1<\/font><font color=\"#008000\">)<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">class<\/font><font color=\"#000000\">]<\/font><font color=\"#000000\">.<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">void<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousImmediate<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousCompact<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">homogenousNormal<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">polymorphic<\/font><font color=\"#000000\">.<\/font><font color=\"#000000\"> <\/font><font color=\"#6B6767\">megamorphic<\/font><font color=\"#000000\"> <\/font><font color=\"#000000\">}<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">collect:<\/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\">:<\/font><font color=\"#000080\">a<\/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=\"#008000\">[<\/font><font color=\"#800000\">1<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">to:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">100000<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/font><font color=\"#000000\"> <\/font><font color=\"#800080\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">j<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">a<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">do:<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">[<\/font><font color=\"#000000\">:<\/font><font color=\"#000080\">e<\/font><font color=\"#808080\">|<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">e<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">~~<\/font><font color=\"#000000\"> <\/font><font color=\"#800000\">nil<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">ifTrue:<\/font><font color=\"#000000\"> <\/font><font color=\"#00EB00\">[<\/font><font color=\"#000080\">e<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">yourself<\/font><font color=\"#00EB00\">]<\/font><font color=\"#800000\">]<\/font><font color=\"#800080\">]<\/font><font color=\"#008000\">]<\/font><font color=\"#000000\"> <\/font><font color=\"#000080\">timeToRun<\/font><font color=\"#000000\">]<\/p>\n<p>The sum of three different runs on my 2.66 GHz Intel Core i7 MacBook Pro is<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\"> #(8260 9121 10895 10869 11691 13389)<\/p>\n<p>Subtracting the void case gives the following times, in nanoseconds per send (timeToRun answers milliseconds).<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(8260 9121 10895 10869 11691 13389) collect: [:ea| (ea &#8211; 8260) * 1e6 \/ (3 * 1024 * 100000) roundTo: 0.1]<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(0.0 2.8 8.6 8.5 11.2 16.7)<\/p>\n<p>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;homogenous immediate\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2.8 nsecs<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;homogenous compact\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  8.6 nsecs<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;homogenous normal\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  8.5 nsecs<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;polymorphic\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11.2 nsecs<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;megamorphic\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16.7 nsecs<\/p>\n<p>Closed PICs are faster than Open PICs, but the cost of class access is a significant percentage of overall send costs: 8.6 &#8211; 2.8 = 5.8, or 35% of the Open PIC lookup cost.  Interesting.  One thing masking the difference between the other sends and the indirect branch in Open PIC dispatch here is that in the benchmark it only has the one target Object&gt;#yourself, and we can be confident the processor is correctly predicting the branch.  The indirect jump could be much more costly in a larger working set.<\/p>\n<p><\/font><H2>Let me explain&#8230;no, there is too much. Let me sum up.<\/H2><font color=\"#000000\"><br \/>\n<\/font>One thing I&#8217;ve found in moving from the VisualWorks VM, written in C, to Cog, written in Smalltalk, is that using a high-level language results in a significantly improved ability to push the design further, in no small part because programming in an IDE, with no compile-link-run cycle, yields much swifter gratification, so there&#8217;s much more encouragement to ask questions of the system; they&#8217;re easier to pose and the answers easier to act upon.  Anything as complex as a virtual machine really <i>needs<\/i> to be written in a high-level language.  The only question is <i>how<\/i>?  Slang has issues, but <a href=\"http:\/\/www.fast.org.ar\/smalltalks2010\/videos\/Implementing+a+Smalltalk+VM+in+itself?_s=fNpK4QsWHv25u16U&#038;_k=3STLcI_A\">Gerardo Richarte and Javier Burroni have found a better way<\/a>.  And that&#8217;s a subject for a subsequent post.<\/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=\"szQHAA==\" \/><input type=\"hidden\" name=\"postTitle_0\" value=\"cyrNzElRyE1VSFTw8gxRSCxWSEssLgHRlfmlCsmJeWrKFkbGBtYA\" \/><input type=\"hidden\" name=\"postLink_0\" value=\"HcVLDoAgDAXAE5UHuvM2BRQxQA2fEG9vdDNz9n5vwJxT5Vi5eLYfSmqAk2CTBCzaGOgV2sCOmDzlnZiu2IkbHdz+HxnkuOAF\" \/><input type=\"hidden\" name=\"postAuthor_0\" value=\"S0zJzcwDAA==\" \/><input type=\"hidden\" name=\"postDateTime_0\" value=\"MzIwNNQ1MNY1MFQwtLQyMLYyNgYA\" \/><input type=\"hidden\" name=\"postContent_0\" value=\"7b3beuM4ki56vddTYKqmetldsi35lLaz0j22Mt3pnsrDpLOr1kx\/Nf1BJCShTBIsgrRS1avXxX6LfbVfcT\/CjggAJGU7ZVnU0WZ2daYtkTgEIgKBQMQfP8SnP\/TTMIC\/BfdPf9gx\/3SUPzz94W3r9CNPt\/iWx69Fg8X5z+wc\/kr+8O3RbuvFS81CHjXYeSYDn4WCcfaXy8+Ma9blOsV\/hypjHo\/w8b3myx92oNkfduLT\/\/FDfHqlWF8NmK+EZioSbJDIFFv4gbN+IrqvvumnaXyysyOi7YG8lrHwJd9WSW8Hf9v5S6bTLRltpTIUf\/dUGMuAp1JF35z+WvqGmW9E8sMOP2UbKqHxdeFf3VdJuvknxi5kotMG+0GeDvrDH3bkaT4QeBS+f6O1iFLJg2DI\/GHEQ+mxgEe9jPdg4L7oioR5Ikm5jFgsEmgbSOKJLQ9akR4PaAhZSoPTLFUsyczYthn73BdalFrjiWB\/+C1T6cvJiPAjT8XfOzLyZdT75hQIILY6Kot8nK1pBzsZxoLJiAaGg2BSs2sRp\/AZU51fhZfCsPoi1CK4wTFEPvwKz6T3vJdp4TOe5nPA+WD\/TMHUzVNAIUHzLD6SYRyIEKhoiABjuoyYxt\/KpNSZ10eWaeNoWJyoXsLDEKjrCy8AytAo744KesLP3UKzQV9CO5KeBgoqICnvBNONFKdqGya6BDK6ZjjvButkKX5rugZeV13iG1gI+kyrbjrA5RxIIGYE3BSrNOcjGH8gvsiObdaDrtIEGIjexgnqoU5F2KBv+\/yGPlcgKtScwq6jIQuVL7vAYjRy6B\/7FV+EB8xGLaejrAYkMVRhwrE0g159saW6XerJkE5LXxi57SsF7OmLWEQ+yig8AI0OVHKtSYbgIWj5NqsOBoPtVAQiDrgntoF835x+dr8SY6LqOATVMRmPtxP1WybSvwNDIK9+c2o\/wKa2OhwZ0lALZ4dLAGRG1p6s9asQFiTlwfU3p\/mPpCs0sdXQ6rkbgdRAYpAG0CHycBcJYB+AlU5Ae5rlh4F0AtWDV1ATGLEeeZSzvDMUqQR7kynwvNBZCIs3HCUyrL2CDn+2\/MVzJcbvaCQGzaqBWeZRZkYG6okIOR1ZFtYYWCZEmevLHogKE11gJikibwhvc2BZJGMqEhgV\/E39yehGXeMQClVTCA9Memj0YYKPUBe2Q+w+A44Lco5sGPHcglcS0bOsr1UoHCNz\/4bDyEkr3tYVhbD3uTZqFGgnQ54MYTjQvPw911g8jgMJPAKzB2nX+DYwPy6UkS7ceWDmwFkSFjkVXj+SwF746mQcdBmBVoAtiHt90sKSfmf4u4APkJm2b215sNfgrkebTXnnMxvOZyQM8Uw6UDBGPRCJZpegfK5RkD9ENDij3vFt4P0YhZ2TZjKfWy0O1EQyF8\/jRwM+JKa6jmAoMBy7Ubgx\/vB29xT7uMqb\/QzNws69C6ZBwnZO\/8fPfZCwS\/argnn6LJftBov+IDhoH\/FSsP8Y8N8a8FCf+6j7gIXSIesp5TPQLtwtMvLxJQwI2IxWqIN2BIoWapkMTIoOEgIIC+uSZgnpTg3LC9uB0\/s\/SZ3x4GcSl5\/e5WaJ0YPIAyLqwThhsWH9fZmF5U2aBoAq1Q5tdOlgIOcZqnjuhpOi\/fNbZlYLtKXV310VXNNekdPCCBZMG60DjbKO\/wJFQY3ewI89CXNmgeCxfsnEDWqsLvMCGXbyDQQMClh27FGzQEU9eItEJp9iAOxsVQzSswP6h2QTeCJ\/JhLeNUzjSrk9FVUoSg1QFjr15Q0sB04cqOmG6fWz6Frn\/HBZqEBfaLBqOsKwVhcNJ+JR84bdPgbIvdAc92FjC5TOEmtU0OIC3X56Z0hqbAmcqHfNQJx45MQW1IqZLQg6UEuTsrh3nwllAk3zDv5FIumpHqrend1m83in2dpp7e9Qa1vUEvwNrPYl1VvwwhY0utWRva0u2BliK4t3YG8BrX1FA7osVB+JsN1BBxxtvjhQQ+JY2OJ9u6eiLuky6PfIKBYgtiEubNMCCFVmO9DM8C3pZm35iB43q+ekI0TbBVUd2ApggCfwrP3mp3cNZqeylaotQ8IQVJ3h2nfmp2KTyfnBzZ8W6D7SiwhtBzMlWCDsEGzYADgELJTMM3oet4KyMtU445JV0RUcpJVeRsU+IlGoqyMYglFbOSfCeJwW1LRvFaLJwVD7AwhuQLtwaVeBUaAVRqKLwxghsWFGx7wwA8e8aBvQFu1UJI2mKwZgoem04Hu0rZ3McsPSboS0MFrF0Aqa+Ki8RsfVYPi4XWXqpMeTjtm5QMY8HDptPmR+E4cEhmtQq8GioGLxeYx70lZ5R9vRMeg1POncCKOucJ2l3awjdWO+ARWPWrRkvBAXpSOSa3hJC9PxQAKNzATBEsliMMc7WsBOGKXBrcaGIsVxAvckxhpE03DiSQZowPb6tDfcIDVhYWSPTLYQ7HPo6gJeRLUyEAK0Cnx+ITpJhpt7aRDYr\/ANh9zWDGAIeJn2RQQH1W1fgFy\/o0\/Ya\/qI7DuY\/eX7T5dnbuxgkifc8DiyLllXj1oBVB043SugGb+mH2WaCx4xeTeL\/qW8zaIs\/Ay7MW63\/x6h2fZWDco7LX6IzZPdXdbrvrK95ucMs80JMr2QuRmouyFaRTegXXqoaWFAuVGlgBjA7tIZhiQWQPr3Ki2dNzQa\/mRVwH4KOo8aB1UPo4pGFZJWgdltdUyWQAelnfUyUoBg48XoDoADnodKwohel8sA94YGGSL4+A0PpE\/7I2qc0r6PD5UPVyRsHuyeEdgD3USFbsdMUmSwgPVFEMOEPNgSNW7Y0DCYH9hrIvzMw53sRgQqRgXM7AEJbA4eaLQSweQymyvsXUBAHDCyQwdsKfeiMKwNPJWCzZqYEy1tsTjRMpvaAwmHQWeo1nCnHsK0YAqoutM+HhucAgGdZ4iDlE9JNjz4lpjdbA7s7cerxj2GTwOPEK7f0Og4wYLMux4WCw19O1qjGZprtFxvpqVzyU\/vtLEczP6U5lapMSlBxeiyToShN\/IjvBGorRvVy+7u2wEPOz6n3TcLgPigP2nrjoACO3tHB61vTuFY6uEooVEU1kaZomgRIT3TRFquTmF7xR9jULew0TRGCBySXS62iL7QbqSNn2i82QfmqrVAYMHh2JLby3QyGv3cV5EdXTpiRKPt+DOX6b+UJfrNFw9dL7itqizRwoh2aXpmN4QFoJNeB8\/6IM52uXKZIDMKDG4QVw4SQoaxfcZyKCifhmk8PzXlqyVTs2X4xTudDNRGao8X6LHogYKGcwrqaDqngLQlkTGGS9blwLgU0EDOD6dg35HDA4+VWwGOphjCBpLOasiShZXvxffaX8R1pZN9zqObZJaA\/CA9YVu2Sw16StCJoug2HLLzRGVv+VscX7H3gzTheG910N40KrQHspnSgQUIc5baffOSjED4ik4juJzk5jNrdZ+RCof6HnG4z1O+8xaMBhghvPJaeRmZgDsfPny8+vFs2xBmG32yIAN4CLYsbZk+X0A62SUSND50bMkp7zdYpR59za0Obe\/EiDk5G1aVZ4knrAYHyxn2Ob9QstPN7zzIxLlS15cjHomdDnzcgY\/\/DpbS31Pl2Znjx1v4OQ4Wt9vCy1VefaMZ7EoaP6AVb2EMPDrVtNmN5CMOF+tZJLsWpnaFXILri2dsp959t6N4I4SFJ7SCYQBjkNwE6sZRyvkY0WgmJs\/7u3z9hrbYBDZ4c1404mZWw+w8uOmkxv+BphpQG7adl3QYQE9BrmCcwkYTpeiBdgx4F3cy9NGS7Y\/TArNWBJo8B3aYoD7MCRR7R38\/7s6T+tz\/XURayG9Ozb9kRpX9kei9ggHBRARo1F4fpAnX2vhKyb2lkJfQ\/9BxCha0aZu2GfQliwQsQAXHtyGqLlhTt++Rrh6lKm5YxXHIbXijVB+IwuXmmrIPwiEDjTiVFOfcKBc36rJkb9DeZnwZuCJwZsS5wIKHDadBjb\/BLP2Xo0Oni8y27lwdxomQO+HuDMVpX7SPU9IyqPOBUmFMFjfPYEPLXy\/z9C1XH6rDiMbRk+hcIMaiLR7PQV2wWfExszCXuBMFfsFiXWncYmTUGPV6iS6OQA3wNDs05j2\/b2tHbYA+cmCbCD2\/O3HW2flV6f4WHA16md5p8Z3Obmvn+MXeN6d\/gc\/Zn+nzklsYFFOvBxs6TgP5mrwE92me+1n0XHl9\/c0p\/cNibwulCWiCwiksmY3eCI2zROJWajVoHGSgUUGlGDMVu03oqKIzaVzq6GSUaPlrozAe65I42mnt4n92yWGrytIt1TWeCBwyHFUKJwvonBsJlnowtEYQ+oGvrQWckMsABwqmKXIZmsiK2MKX3S4YaxGqFTiqDo0G66Jbipy4KRE2pHOrTJ0jDY0m2AgTPhzlSlwBYsS+CvxbQgYKJAZKvBV44r5koFSdGsy59I4wkFa+1SGOp5AgdLOgwNMiNko\/g8pOjXSikS+SRCXaWvVwSoisuIZogeYrlZ8zrEeAjvJun7CeL0FGGV1NjXhB\/70BZk9h7vRU2ZL7cE02NxqFhd2NxvyQLCpzPHROSlLzRtDcudmptPvOO0YyR2ytnnKXQCIAium+sePRAEVTxNDW3AmQwW4v2fJDvPFujDhEpIbzC97gJsmwpOpy46i08TXuuPNpzzE84n6FDaivkLEisLnoaFX+VKQc7QN7MKarRG09rGUil6hzyy435kmI96xmDDzAXa0v7XBh6HgblavzkZfd1Vfh4AcdCbaFoCsbdHfQHRdshvkb+LjZ0uiYa+cRgAhmMXl7yecERyuhy3ao1epkK1rzd+RV0wGM9MfSrBMRktbFIwHdwuJ1Yp+87w80RDuRoI+0uyL4WdxmstJS5n3es2eYBZYe+10kagtVMy0jTrQ44nbAQhoYf0+ChxXiDNjQB\/jLH4L05R968H\/XS3GlbQef8p42HzTu8MbAOB2By0Fvh1lEzrX7dn8y7JwYlzbx\/+sPUUfHLyf\/G444dN4oHzfMqMyhn9bYnSfpxsaK\/+N76pxiYz8Cv4C8XwnjIWueJT19btv\/YaczffNdFeFldaCSV99826Q\/30xBjx1s5\/R2a0fwv29sSEEbTIuMLNmhM8DMwah1CAxIszO0o23EznPbhjXY5ldwkkd2kv\/7KyQwfbF7vz08P3xx+OKb08S7SaZ4\/U7XK8kDpjXr93f8O9lsO6cnr4i5H0UU8y1wUHcKmuJ3SFPLkSdTNoHfboz91ssStLUKGZ56qB2ZnkX+yVQMZL5tHSYXY1\/fHPvt9hrwn9uU2iqL0vlzX3NtCfZ4nbREKSX7BAw62ot\/4kEmqohBc+25PAD7rh1wree3cu5bcz33jk6KFVawK+BoRkP+0D2Z5xa6vdI2xEykAY1fFV0JDOQ0j83LvL0VElXRvi2Pex0sWRwpxQURERrm0EThbeaAlR88EuEJONAXZycPGX31bdrR6Z5pDVvnCbtlwpmb4fK2am7m6SZKi9T52OE0OuOpmsE9upnyiowMXpcGHme6L9CPaV0w5MtvrNmKvVcprBfd49ijMl1rBBR4l3uXyhcUvtQxOsmQheN1YFDTGroNvkoPfABPz32eCL8NNvZ7Hgq0k0HHTGckEIWNv7nQWVa4p9Lb+SBl1OZaVBkb2fF7rfHk6q34UXqmRuGFjPz3YvCOJOC52waOKG+Mu7ymS9n+fC++FAdxM9eqM+98jQ3XwcC5cL5xGzCfe+NNyFeSReaelR4xfow71gHsOBjXOe1kH\/1CntCDJhazWjo\/D1kl3UDDJL+fvcEDI\/nM7eORWyb7OFkJ9rv8Zugy8sUX+8DzcE+q61k4Jx84iq63kWGMq6r7d5pkYp038McyzDL9u3RUu4yMvLfxSgxUVxV371Qe7vvP8aixqgxlMjfQ9hPipPttnu4FD7Q4mdI0L\/ZD2MeSIQXWYORkl\/LX7H0tXaa+pJO\/DYCnCCmeUMDSKm0Ps1WKf5uncII5RqaT\/F1cfoQ9+OrjOjDyStm1Rr8Z7XYZtZ+VRlnJg1fNy1OTkPvFAeqzor16\/rz8y62D4L0PTfLMZzpHRV0TX9vBGCYT802R2h0MBcZgF1+kXAa6lK9vAo9KqQc2asLEhmIki4uWiBPlmyS7slPPZs05BqS0UvmF4neksOH3JvNiNGPbnvV6Ir3lNMQcu6gXIPJE0hv1H3azyMsDuqhlmZoIwEBhlLsJiaaMSRPJVeQFslhRSy4hgJKGMFeBAvuLnG0YgMmRxUAu0ZOa3tkYiXYblL3N967GI7cWGuzYJx4p37C4DZygSswEDXns2bUXqA4ulCMIUSrMn7Vf24fNm\/mzicCQdzygBsNNu\/Szd43GCe+FHKweWltFwZnxsOBM5xTdudf7sTNeLqcwyY2pnItEJ481FLmFVmZT9G6zDeARF5rFWnutxvgFNjz\/BvgGDv4+Tm6imI1Nm+KdUNCpSX5CzAZdpDs9FNeFM\/o1C2Oz4oQp4guTXDWS0U2KhNJ57A2USQ4ghJzMvp0IG\/JngsNvlPQpIFtqjF89mZHXa4prw3F6depdqPN1ZupMtQXpR8YtuSNcZ\/oD4CQbz9IOAeXT0cg9kwsO1UVG9r1hrJeUamAOVm4bs0kHpfvFxXkPjdtQ6ntOd+Q0rOAwvLB740ejqkuPLm56JtKdoYNpm31AZTSQmMJtP+\/iOfmWM3Pl+e4st6ISsWXCmTUsV0hXn3gG1w7PiWHkMVledqP6Xx8+0Y8DZW0ZMDETyjFuYDZ5Rm\/JZHHrkyHXa7SWBsKiY+B4jZzYWO3RjC4wzyhZMm1Yj4OZre7LLm5+CSZS2bSj1EZGxzbTaHHTIowEGn0D92EyU022J+aAYsILZqz1cYzbtGgmNl1q85LP9phJTusYRC7QECbuft149eezT+8v3\/\/5hF1JzHnJV6wE8oazNrhUFlrAAiDkrJlbWaSqKJHCqsoGWM2LW9QwAw5NBI0f1HQ3yOAHug+irCmP7lcwmRO2+m32s7iFhUUpl\/RSA88TRA1uk+g1v3F4bYnKOsECZwXEzWKf55dDd8juMO\/KW8M82XC57DuLeyPkkAqvkwqY283TsrXDat4tLZUoj+ebaQNYH2\/Sfy3y\/n+p5KTqVc9kDsH7W5\/k+oJsAuYnKtbG5FGDLZUgVhbma2mTpZ\/ruyer0qbQK9PwV0XtVz2rY7+J\/\/vmtHT0fcf19by5zCRzEXHXwDgbn6JzNOZbFwi48cBtcE78Kp7v9GQJG6jr\/fvZMN\/YG3FHzc0K43xV4d0HdoGjCdKfHljCh4R4YZLweJt4LFH+VkvHLKTj6zdRyxaNcbbJkb0jmz5p8KHQjc\/JQ8lcqys4iwi1cN9GE0XyziTlq5bawqCaJHj6mfDn1xzdKx8D6LWVSDxxRdcUJxUSOOrNbkKx+Qis4rikgsX1hCSrfmHFNRxyf6qq+Hi+dQ5wvHPf+OPmxuYkKWNPfvtwSvy\/5+nUnMddjrkhNlfXMnIRwD7iLD\/s9\/hlPov+LDxr4702M\/K7EQpVL31ZJQ1zbseitXMKauEpU9Sg9grWpmDtFay9grV01F7B2itYewVrr2DtFay9grXY1F7B+oXaK1h7BWuvYO0VfNJewd0n4xWsnXS1k6520tVOutpJVzvpaidd7aSrnXS1k6520tVOutpJV79QO+lqJ13tpFunPP\/qS0noMeO1vi1E8zMiPVCl1o5CsDtfDQgOwlWDVxETNwIWh+on3kbvQuCJaalFctt6yQjvHbGJHMpQXqLcVnyzIHUW9MEYALPpdLT+yEjhFOg6dNTIC4hvdEQkeNqniol5rZLN2Q3GAInYmbqRETqdiDQWotU5WEk+7pCqcAMBU97rYRl0rK2JeF89eHXaoTHEEaEaLAhYQwNCvLKiIDFWHEeUQSxFneqGgVTr2tK8ifgtk8loBWMq800letOEGyzB6QdHdGq4sVGnDYd1Yr5E3CAZ3SiqwYq4VjkJfYIx2ZKRD0PMIRoVERBrHkODtoXK64pT5gZWJodjzLm7jKpVQpAxZeclgcIZlKGxRWgr0NAgaXHC0nKTbuQANqaXRlF+Oc3AsK9ME1qkRIwUKrgLn8N4jyMgJZZQ13l9dRqBgWAkCSkB7nGsgg2cJxAQjKeiVPN3egptyG2xfbevSJWKUqeIsoMIOzeuV8RRssQzIIOI6zU6sOJ1KnpUenv6wZb6BbkIhnbct+pnT6+sXLHszOv\/C2NYz4iYhgodm62CuBYBr1IJymAAasnDsuIIFNrniCJHhbEtmI9Z874EBQ+fFohzeenptHg2Lz3L2AXVxU6HsUSozVZzd9\/aDgamysC47n1HNaGpDnQotS7QgdjGQNji3T1lxN6gvBJ8I9XqlmlpoQ2YWVd5md4sKorbffXt7umVGil5\/ZfLz+XC4heEv3AJKyN8I84CC3AQ4se1GBY4RvcWDif8JuQP+oHGovKq3n0s3KyAw7H4eY6dCRZxsTv7mznSIzw5Urndfg70xPYMnmuOeMWvpbEAqCVhoLBMLeqQX6NSR\/AbnrCYE2kTlfX6eR14qq5sy5c7KfDxU1xMAYMogD5xHq4OOX4JewYICVUuKQ\/WVLpHAM1u3iaOk5jc1ppHljc4tLgzYzUUmeIzSLWBStK+nST08xLxbHHP5Bp+AqrnFMN3SAnhtocgZ+a3GBFuN4gP6UfleVksBRaTtnXMi8Fu3h0mGU8G0s52jIOirZV0lFKhVfV+Zrf2nEIbt5QccTeIEkHFbKnuVsh7kUwznxB6eaTzDQabuL3sDoPWwIKYCeYAoLY4jJHkjowM13BY5CSVXgYTyJeTHrETHKgC\/66TK+qRsubEwqJUrR6bNeIPlgCQR+coqexGcnYfTrpBZTZAqzmKJWoY5FMHcDlqnaLlaoBit3BLjVUgvSEz+yqxjoUxviMcJG5dSXiopZWctBg8iInDcrUcZ1ffCl3D2ki0CRo9hsoallESZDHC0SLJQC8K+ALUJ9lYwN5bXgIPod6TUWShc+FhYMNEWCxriyooc4xPBGDGHTTKwg68AgonL+wtvniglzTJc4ighViIhywgXAUHHoxDQXk3q+6LLoctlYh42MzbcnOCJoMM5R\/JBvNrbhtV7MYCRAxhriHC0OXadMVL7XgV3o1WDittFlOtAsEUrUyh5\/mT1TV6NdRwmHzPb2SPj\/HVTuL9AhuvSlRKogZanAUW2\/pkDRK\/xl\/XnYydbrjWWIRfn8GErJKFFslcV4myCtKXryo4og6ba3r3UPlCfZp4jwUqYm\/B91cPZeJOEgOxttxSqejVw+wSrcy+vVLssr3CGn5yR\/0vq2bO\/GNuxvT23Ezt7QUb8Xmcgb4IFE8rtLBToazSxkrtAJPRc7PCfP9pv2XfbhzvHreO2O7+HpxBm83dw+bR3tGLw71ms3V4dLC3Wdx+kQeAnH94IM80nKQDlibSu7bFdHiERY7ocjLkcUwVo3J321ccbEVBGXOJSRV58C7J\/IouhoTcQc7rgxclOpWRd8v35Ur58Dt9kluM\/Gn5nVF+I0RHdSoHhMd6czTHefRFEJt5XBMgvHGQIoo\/FiqSXemZb8sTGRgSEBb8tRBYTBHe1c4HQ75I9GVxpNZWqrZMBaIEix+pyBfolss9UmYCBbG2RtyRjaJUFfaki5JboeA6S8g3Ad0m6sYVNIFxKCxxpVmstJb4gL17IocQ+e+UKzkBq5copFjKrwVe+rC26qHDLmJXv2WCXzcKFw\/TgUrJn3iX8ugjHbllM2OGqZLv0xIokNdlt0t+W9i4xxfTKHnpJRYzZu66RGJRlmHDzYQcsVTdxd6\/OT8o9zyEivYNrc10cj9O29aMtoVRbOKEQc8\/S0+Kzhu2Ehi99dO7u627Fm\/XFHJtmlF96J5YWhmPHbKEThOOBTC2gG8HthbnXe8dSNgot9zxzuFF9ZD4w7jnysWuLE0GKskncY\/b23jXBFYucxcM5RdHFpY4EIUTbwpdZS9X7kunPEnza+m7HTlf8G0Gyv25htPMcO\/wlEQnMV02jTTtZzwgtiAHd+58bZiLqNJkaLDaDj0YukGXG4MBng+dNihYnwZ037ToPlOV3NtUY5UYvVQdw\/avTDmhME6H7htSeOLGLXaPJx10PWPRq9LNP4YbMPGFhzJy45KRlr6p+8DvXVLy2Uq8ZA4CNdD3cYMGNRYZnrm9IMZrC9oXnZf4Pd71u8Uew0hAUqz5Yil7V0MTiPstEmIow\/b4kIzZmms\/yNO2+lr5r1vV5DXV\/5qnRdk59VTP6CHQEtMWCuC2BRU\/kYISPJYPFpNYfjWIx8zIlLH6PIxFe9o6GbdD\/tqOc9gfJ4n5Wz69ZnH9YATzLemyJ1p5ZfqpLjHcPeGDt87YqXJAnEyTba9ySOKqJBDMSGRmG6f8SKVV2QbonPYLtpxudzX0myTvpFavtXpdafU6OStvr0PQ98Y8SS51rqs+CQra9Rajhjef4S3g+Nvto\/mv9jPfbatDEUw871+e47Vlc4Jry0dQsLpVNLqhPG3D6Ol5HibbHo2b8Z0IVTKsINmUjmNXuQqEj+G3S\/TnVxiN6n6gaS3GDLod437\/Q\/Splr+LV980t48OXrT2d\/O\/v2Fd7sEX\/\/NcpjpNBA9\/Egm\/4pF+pyL1PyuEdpaHNG3n6TAWvujidUTmpewfc5znwiVmFvRh8Ef\/dgktMOu1N1y8wM1InmKagTbpJDyOMdUgVZTidus+wTre79wjkBe7XtFiRbNIy14kfGb\/eOH7LDxLepqdsKOXtQxMQjF0ZQO59mpyTUQuOkLqz+o\/VRb1gG6tmm4T0e1S\/xWLi1\/DZzXRJiXaXzGFyeRt1xI6GdEoob3dF971h24XM4CB2w5ryo2jnO6rBOyiTqC86ytosKbWpNR6gym6hs9qoo2xuM05zZz3FmpxY8TL1q3wptvxLLVVPXbVlnBOum+V8uAyGHRQjoFq2EzQInCQjwa0wSe5+7Re66+stYMiWEU1NtM5\/7NghpeP8hi93T29jChjmEDqZNQzkAjj\/KT2Bc++wHwRU2yysknXBi+GU0BuqHSKcdO9hIfAw6n5gNCJtEzJb4DB1dLgdKhgGKokBuYOi+ji\/A1Nme4GlYZTlCRFL98JqEaABqZV6ALE4cFAwThjkUhlYiVlSOnpOTxPjmSCmBhhHEgP0QXS0Yz6fNQY0GkjrU3SvIwMsg4m9Ju0f2wUQWw8RDu4O0RunqDGXMy2SUNHG+82kgaNBBEnIp8ytW06vANmyVu1yCwWjGUAxMv1ixtLw\/SDPYwC3XBXZRB6SlVP4LqYSEsDEEKoGERU6mXLYFn4lgAp7zUIj4NWLA9BJ6AjDM0egRYhJoFlseO1iFIIGWBQHgrwAS3EbRyPS4oDR6IVsciyxJDahIAi\/BGuiT5x77sYbQ4MFSnDZt7Iqy9psNw3gav5xAzqC\/MsZhICDyUYSJoHs6KeBtIFMCxaPu0AVgrMHLdE+XqYqRNuiigjnkB\/dwfsBQrDuQvxuDvuXqIGFHGPi9BFfALBfs3C+BZKkhsgTgm\/NrkQZiId5UvEYdqw3XWExxGLQSKQAEIQ2PBq+3UZh0iU8FbyYUdMgV4YGXU+3K8DMxgepAwHAljwLTrJiBxa0CPGNqgLA7N1a5y2+68N85PAPjCMPhhSOLYuJ0IgWYx+osZiWD+phdU4o\/LWKD9IAkIADTBwX\/SQDaH3O4pNqy3kJ7IDetyRp9QQtzAU97eBglmW7kh6IseAG7gsGS2s2kRFASSCjYMgNoYleK1Q3aAuoODnslwQWxQjg9aG1AyJtS9KbSHsBIFyMYKWwfwDdtz8rsGOv2PNbfgLAWNUA3VYAC+lBjvIQgJRDH3Kg+t8j9gukn3E1\/I5TOD7rzLdyiOiS1kqFLlNuTaksOH5\/CmuR0Q8ET2pU5c4YDRuVNhkBcQdxakbDBmrCAhtJcmiLQJmgZmnOerGANUlcvNWFt\/aXKJJlALBisW+Q5\/Kdx1Y9LdlfBn80gACWdgdehqx9wrMHlSqJ9Pfx8pTE3FACSTnHMQedK9MR4LS884sOJBKTFz61MBVp9DQFUza5sO7EgpN9ICf286+fif8DEIvLX1OZp5r6L71yhkIFQZqE6bmBy+NvNdcSuGXPOP5YG4hK6prDPoq65y7KOZWrSAyV1NVaNicQcBIIROdedRCuRNqWUy7U4VsY+kyl3zwxcesGFN12rSSyVPvv1peao3oubGIiBmp6ZrvZH6lg+ZbBGW11nORCEpwZKelsxG\/6fwDwx9EGZ8G8GINBHJGpto7sL\/fDU6q768VWvhjhaA4tLf1R5H8rBK\/Sn5AlcC8q4+fRK9C55+qdP7JntE+ETjxQwPZXuf9ZzbcNtcij\/WeMfmeMUMN1v5tuRqskgTjscDGzz0kvvVe9iAnDOZuNc6RFQid+Mnq8Bktc5sj4ug83Uvo0fyc8BBBniOhF14Y7GHf0mzUViijKtwKSutqZpSytzJzw\/bbrHASfO4S9zHT\/dpInZVzvTlR\/AMi6xt4t6flcrGQdXE\/4dqEVQgEA+MJQUpx3xSFslc1xaWaDSILpE7LCPD5PfZd8CesJWVxnywIv68MXpP2+I2I4OENHplrR7yk5wH7c9vdgFnEs5\/e5ZdZMU8CRM3fzMMyunmBFG0w6xKX5kyX1kOKVDfLo23fFBXlZamtBGXjUXhIocZYeUgl1\/QRjATRurCeiDJ3bTJvrNzPLXw9GFvtLKidBbPSw3QTre+9h85DDIr6U3gFa0uCPFBrbw0O8nfUlAkDcyEng0JFsa7KkuKmncoHbVm0PLx+pggHU1uM7vzxs2aDtegafbcAcnQP4sf4MD73nuEkS0+ZhwzI5N0QBXOljlU9hLbxSrtGNQVqwPxhBMrQgxUToN0ib2gXaxbGtqETlkgDNjHRC7+i\/s2LqzzYyQMdwMagUdtyUIU8Bx\/M9waO8Q8OZhJ+D5SHS1MK40Ny3gBtVKYNlqmDVHXRZqMxWrRh3AVmxQiTBDM+Jcak283i8vWbPCiECkpFtO\/EQV5ksNx2vqMEsgsfDT147LKIKDP12h4gWIdr6b1\/qHiDiS6x4WwUIYLzLJA0bXChqbKVaROkgivIo1Qi+Siw0QYmMYllWgbKRuwQTipIA4YTleJwTuYGOngugJGlGsUbNIOFWWC4j6mFMXfAQaqZ0VnRRP1yKdSzSA8wkpMquRUFgfyCarcKQ7INg+1Lsdy07JtG4UfKwMiaaj4gRPgDaKELrHRm68KZ0CDkJffk9gQVV6dml9WpjVrRpppMlMfb7vnaTkRrEw9aFFcDnVZVandbDC\/aXzRpuyKKGEGY7Wlrd5e6ed2y3cC2xHL6zaXDPdNhs9Rhidpz6XLfkLJNXVrYSxWP7ct+SQGJeSgh6OcvR4dGv1tccH1rKyB7QRtroIjQcxQ18124hOKU9vebiPmsbgL2ndYnG98JHW822HfC\/4Ip5uestc+AUKuhg82AW7t2wP\/a\/NJs7nVbx8feq28dLXHsHo79\/Jgdt1nrmO1dsGZztWbw4sSEjm5\/3\/zShT9eE8i8gdPB7\/earzyBpiDFOW7CXN4c4Tq0m+ziAv+by4Z7qbFLYyCuEq28ExZnuh84njzYZYXnxlhUNn4arEGzEWYuEZtieM35Ig8Mh9N+ufIhCHIiNFYbNuZtNLxbOdGG+eNhIM2zLqBPPT7w11fmFxPODm\/\/p8ooIUILY3mKbhe9DNY4mOxYUJjmYG8GvCOCwOWIgOUOU9EltWOSCUyyQoml0Bg35gjqvNJ7CRUVxqrG8BIMmEgOBL5zmm2wvgrImO+oO+dUMhcLM7xIZOG2ELkp70uB15TZYQ5aJLcW8d9dz9gaCNiZHg2gxl5G1llTvgMRHlMyTNg0rSm+XbKcMI\/DaeDb8dcGtr+AJZc6L1Rqz3AjoeXSxNsDO2ClVHKjvaR2z5XX17QriBAYyUR85yUWfanR0g\/BdLMlCC4J5dysgFkNYaK\/CagdWgxhQsyWijRnLzjumZa3y47MO+xYWvZGydkHfRIK\/lYWN3AavSCzQOcdkQ5QKiJOVQ3ygq924XJ2\/eldgw3gBJzaigymogTtb8g9I\/UoYxgoYdCfnV9aOrrxYRN2u7Q9mort2JopH29zHaksOD0HZC3i5NFpgJsWvfCd6OB0IntqLRW8LyL5sXULqFR0Yj+gUpoTDcYdjNuuwDxV4yDSkGWOgpR1zI6P9Qd02jDndJ1pTJFDHgDZlaJLix6pwaarooGmBSmX++ZR9gsF4oZjrQzn13AVJvLatZKK\/mqqYmj0gKXghyuYKbRkKjXnjiU4mSZ2PikWDUkiEZjauTbhoMjISkxO0cjrhXvEtPE7OldG6YQq1IzEOAVMYhLHerL2ZquR11IXkQxUHGKpBmgkQuqbPCXqsG3IM+KTLQuC1dx2a5C3DLKGLZOa5EczzCcU96kVqoQBfeuA43tmOynXCfZUryfcNhMKHun7clXQyUy7zT15KrZiiy0VwkvZhagUOuiMp\/HcUwkiL+1QeGm2qyR5tJX8SsWBtHz5WCmpw6ikhcVn6ywmOLgpe8O332NKZ3DOJ+6TQDGn6zDxblYi9HwVHS1vCpev2SujUWE1ijfPf0bRvaWTcD81JX4WWX\/NzGEFcUTn\/4KzrGpyL+QFPi9xXjKpEfwCTBG2hc6aR7+NugG2M3veib2nSKE1mNMlVZZ69\/6vxsr18XadDmhg+QQCPr+M3hnbpg2mzWd1gsbmXvOlPQWaQ7UEgxRRAtDgwabg3TWYesiHcA5W6A+2l2h0bZan0H+8bLts7y5mRuPM8qma06o0F5ewqX3AK9KB1Ouwh3E4IIYxmfC4UY\/mMaMjQnS70pNwfsF08aIcIEzzDJOn8R3bBoIkDIE8MnjJxHZvew1mX9xiF+cmxARBf4ypR4bRRHOayUpQoA2tyCgT1o+C+CLoFRASedg5Vyz0O1p0iMMAklHKOjZfXsChr6QcTtZg8Q0YDoUTRehRohmnhOxRRg3Jj5CMHAHpRLd5NUz5ylWkIe9ilfd59CNoOwJf+sx7FVoSSXIlgkv\/S5XRFIhiT7K4zsqmLa8NVW54UrlAYBUuKw0FweGfbbHCAqqjJ9NKJc+1SNI2Abz8LILgLCA80HUovlQxMsTMfB5ZLkeLTOW3BYirV50Y44KcAZZJUiVR52+LIKW9gmurLPDPBdBzrsT8pVK+zFOQPzwPnieCXy85o\/D7KhHvXAuDJHv1YHjYepaVIrf7\/FIBZyS7gYh6ab9a8cEJIU3WcxmdQ35OOm0l9FKVy7t7G3pVDdPq6SmDeZVQnOIwPQ2mzTwKj1HMUjXF86Bc1SUJl8MvszJ0UB95VfhkAQVGjVuyAjcf2YbmOkoKx3pXKrtQhbfKMWBjp7RZ4Vj0yyrvmJWckFU08CJzrqdnlMnVTCUATZUu4WA9CdpcVd+SZStbVaxtEt3WV1pGo5IQGF+kNgJPY0WrqxytH0N4r7O4beDt1e0br47AbErt8gOjtQjeMIGlFHGe2hDvBMMzxk\/eRjcSfDiwA\/A6RTaKLkUiT5jEthKO1lvznK+OnPg8ur0axMkXfH5kmVwZrwhNXIQ2FbqbP7tMEtW5IpSZq4lo8m4uI6NryaQBmV2yj5GYdt4myFP0KZR3XMooou0UIyd4RwYyHeaQEUVchauyQGgAK7S9rDdK5BMi06wZ+CyOExUniOnQNnken9V7yiR6OGhpvH0eiYG9Ka+pP145z13BP2kn3PPWgeMdbFPGVy3R4WhMIKM43qt37\/\/6JvUuo\/Y8bZDqEQL\/Z363LazypUatfh8VmTEjPs4zBE6WFBbpBnI7Q2Gelz0THCQuVPLOeCNOlhC5mt8Y8CF6904WFPy6Xcvg2NPR+w+fP705a7998\/p5nXmeSEzhJPHCk0SOrZEH3XrDuyrD+qqRyZbneLgvQPTObicSKSZTBybxtZqq6BQw+LDrkC3ELk0ev6msCCoxx6nRKUIVGKDbHCYwuo2kaPACHHVc2VNMLbNokevjY5\/vDTcfduwNzFuu84Dv2RzPl1EGa42DiSYI7XhcjsAST1v5SKePApqcl1bYCppfZtEMHfGvKqzQjMISIhmYkIT6zDrHI+isYhi0SN2V73TyPUsBSNUc3ZxHK2U\/zlr9POKk+RycobXjawFa5xnTbraciocbRA87S2cfmZoXpSKIQN6rVGUpUFHvrFJQahmpcKqg1FpuZ6wlo5WNhg4pgvmtciHRSw2Grvlutnw3na33OGuzXq1ZrRbFJgn\/pGqaSJ229jz4Zc75mJOc5Z7PMadCFlr5vuKyywiZ7bP6EIvo42X7QiUn29sWYFA\/APdV38rVh631yPi\/w+PzdtnWazertSugoedaQrJesCdkB6ydT9cNHK+3k8xDdMlxB9dVuiuMVUxIW09rQWZEHJsk+f5pXoSuRYTRqqt3NutAuF\/WIV+uVnRLqE45K3mdENp4bapx3BGvhY3Nlmg0QyxV+zFh4toUJYvIgWbyztGh5so+mxpVX6+4tlLet7wuNsLlA8eEMnI1wExuhwkH3GbsDU+CISJNYzEu1ctDIcWNCgzu9iXzpV\/EFIYcFAi3KZJUrIocFSMFzlwBoASh+hPqWdkwRBMDo9kGvm4+Mk+JRG\/mtYyw3pLwS1GN8D48lhkcfIPubku3jJbIvRXKKbUN42Tsva0\/bdozjWmYOMzetJFgYbZinonC+lQKC6vdqmV9z8i\/zh7j4wfsOpl41KiMBYFDx6US\/haslisSLROdbgXiRgRuPG45CU8ByNfA2SBKAg8QXWFI4AkJj3RgCrghgbG4DRORynr9hsERv7+2FNuolrBo6zBslmsPGErny8RZN0O8fjOLjanTkVxXpi4eRvBSWXWql30DVGS+Evq9Sv+KFT2wurJ\/grjpBlEiV60nXxvBnUQS11+jVCoIaXv1Wyb4dT69ROhYRdrVK7dra8qU4yJlZjjKoNi7EF38BskyZDAo4HIqIdm9BwP+wepgX5vPA6Gsm6NBwSO1F1wA9c+OYUeHNOBj+EmapcH50fLQ2EFwEOAAuMInjH8j2A2qy+jK1XeGrBMo75rdcKw4uAHy0IEftjpY5zBfAW2KobnqjGYtGg3zqiG6CDvCx\/pqWDXDSJVM0Nmaly3bpIKBpnQIlQmEQQ8Q0rVQDTT2PgyL43ikn5eXzIuxDbAOnc4SMVp9Ekvs0QsbdYzjomMcUQtdyIijWH2Vu\/EZU1excMZj\/cNehIH0k7o7rXJwOj4vyAmaadLwlLyJKjX5cKMr1+Irx\/3DplyxHt\/IoDtT4jsFwRWQ\/RNdgJwZ\/ORJjyYUV9GZGjkYCPC4+PAKxfmMinxcd8WF8JS0Ne9P2l3JjzhlAcJbFdumZayZFmtfQAGSpzHdWVRlmEKqVrUyQ72ojoiPV131mi6jjJDZ22dQBYg\/Zhe+P2H+SyqidBYFgFZyrVa8dkhly+re9mx59yoDNpbof6lIYNGDKrSL\/NmMo8IYsEj5jzJ8IDPooSocq8vmVdRKFRDCW1brcilTRxssCr9\/1HvwSVi\/F0cHdBUPwAj3wtH8MkLfnycqRUtMUpr6l5qDn1lJgenP+rN345Wv2+S22GaRYl6fRz0xgxvt1T8bbcza+XP\/VhV+wusfbdHJZwPgvlyqzsnuegjp62hCQP857QuXBub\/ZL6nr8lqQfyyKCCQNduXKijkOcl7lQiqFFZiHbTsjOMtZ3Ly4r5vV+CTu30\/qVhEcDLu+GXtD3P8cRcs05\/iZmQDcVebtDampzF1v5+fd+kxd0szP0hOlNITvonSZPih29UirbDjsnlmhk0yjfeqjcSezWzW3x\/1GN9ylfpSHY40r\/1QU+akDBKJEau5UXxWqbD0WGd2vTSPAgXgczjn1EvwuCVA4+hkzld06+CniRPlwTxU8tQOpVRpMsh0\/5JEBSP156b\/pmiPrsxbLyscYFtL6f1+I+ApMU01fL4V5pNqcYyXZ3u7Ns48mWNE41fsliXENpptetqOH3dZm+9H08\/zMzWxUobZBDcjn8xyI+J1mY8wah0nxTjzZbcrKJbcBrkjz3EWiQF80KOsDQrpTiSHZ+DHTM\/87npaUHCXJ5Ph1OCwbvKYMLbdExi2ewK6xmX7M4H5IoiWHukBiBjGRBsli6k9VAutlGG25ImZiywboW9pTmsGCiJLTcR9Qo\/Ysct8WWlPvoVm\/kTjwZCDX0tz2\/1EQ7Gmn+p8Kk+P1YYL3X6n34Oq3DBp2YuEfxmln9WPKuqt\/fHkvlSWp2RsdobpPB0za3cwgd1j9gGZM9LHOYV66ctyNPMUJNrdrxIHKtOz6cIA8hU6TC4uKuigl7Uoroco7tai+LAs1KJYi+L8RXGvFkVogo0n0lEti7Uszl8W99dfFkt\/aqmopWIWUnG4alIxnTe9PrPVYrjOYviiFsP6vFaL4bLF8OjZi2F9VqvlcPlyeLzecrg+57TtNUD8GI\/y22qOwsva3z4JCiUhVMpRHEVEhNMskNfCBUctWayxu\/39ZveEheomYN9pfbLxndDxZoN9J\/wv7IQdnbPWPtvdZ6sBMmwG3Nq1A\/7X5pdmc6\/bOj72Xn3b4Vp678UAx+7h2M+P2XGbtY7Z3gVrNldrBi9OTMDR9vfNL1344zWBzBs4Hfx+r\/nKROw0MVZnE+by5gjXod1kFxf432znYod2qbHLNgzrZKVo5Z2wONP9wPHkwa4TnzNNoJ6MR0MWZaFIVIboqFynDiuY5K6M8dvLeMKjVJgAIp0lNxJBYzGoq8sTRF2NWDqMJaxOCec1TlQv4aFmXLMw8\/r4737zOww36olIJAS0a6KtCO1U3IgEBsJseQIDwmvwgs13JkBre8Z6YG6hRTS1Cu+b6V5N2cpkM6jI\/ZUnPk2E0dT0qQLT35xsX54pkYs84AfKk5pI39fqZKXB7ScBtjkZP9ElcPpsrf+wUmL952EsFoxXvN\/E\/31z2n5XOU15vcugT4nZMYvqwzyuWByuCtf56uRZV7d0eCRV9Bah51cBY3m4i9hbB924ZO1beR2qatHitPBs9eiSaxD9bebmvntXIPQAlY1aOWv9KbzAVuHIMe2RrgrUyGQh29s14zyySuB0UvsA91g8jElTATHjecSNX8XK+4oJUHPIYjnkq7d5418fhX2eJypQCfMyLRWYKqU\/1iXUF2KUvjn\/ukWyUCfXbDyO89zkDKl+GfvuL7X6e7gq7sNFaSdRHNdCxExjVTgZ9cZoC3d4\/qUCGNcylnVso\/+Y653A9gJuDLaXdivhdMTOEu5VctgtlUX+Z1XlHr+53WxVcOX805U8+3bjcO9gl+0d7++x5vbh7qa729o4R5wOxjsBJeRrL5GxvRmXYRZwrJIX8muhWY9jpUh8WKNrQ6eeZt0s2syvydrQk4wyfILu\/QxoAQ\/jQDQeW2cNBqRusIooIULo4qrelvvsKqxISggjUwKZPPqFya\/jF6bj77twb+35Yu\/o1WtJ1aV5MjRVLMv37ntH7PUb1gJOaC56qOWbdfyodXDguZv1g+MXR69cnMC\/7TbtzfpBm7UOMERg+tGW784XPOGvX49\/ptq\/3M8RPahAbiJ6IFoiKUQoL1ZZKi4a3YgEL67hrKDQor7TjPvFVt50JRKoUCddp1MlzbtMoqWrmkulbRHLAyE9qGwrZqKkWGEWeizexDKOPwtmo2oEM5u0BSRldKbZivFQY75wIxspUgpNnGcGzMVUemS+KoICMi3uFIW8tHVIgRRpogL6F3SPsCEHc7keseECwJwT3FC5nc\/MjMoQy9NIfEkREomlMizNCQjsQhEaLFZayw7WxKTYiRLkTb6IPEgVEA+0ccOs8l1iw9uwHh2zLtgshjjIVLNfVccuqBbCFWu+wybSalweitvVV+9WmHVFVG2xVx6VYyuKSrlfrwhdTLGvBhiA0bB7BzaBFa8tz9j+wgwYE7qALSJx0Rs8L9NsKxe7h4CRkF+uVFE\/9EaUJMhg6eg0wALFur8VJ6ojXHlnWZR4d6LWFSlQQo1Oyc3FjARxb3giDDnKvSYiDrhnO5WRL+H9lP2ahbGmqsjBDYk0sxXmaV\/Oy\/g6bqB3iG1GqAK9eQmwjl0q\/CJH86M1ibE2No4dBTnJSHy1kd0BVu+VvSLe5e3uqcHcYgS6xT7znoYtmVGFZ6z9iyE9VEGavQcWwTW8SpHhQENdDQRC4kITVtWewYS09MVLU3L5kokwlD0TlNNNsKY39PDXfzfESxKJROAp+8gT7yOSi10NQdZDQkpqHR8flLTTQCXXphw6FkzHz3+SOuPBz\/C5Zj+9a7C3H68aVAKZ6pVLtEVCZLRbOGWm3jdwHOheJHv+IN3hgMAN+FCD3aMSxzJOyxYi41imBFy1kZZ0PO2\/ZNZsbjutgKWxBUJV0Y8kx2RgUaySNXVS3ushX4Sh8FH7alvi2kJxE93afZ4A16DkDLBuOsfFB5MuNCFTZaqU3zUlmPeaWx2Zst1CMFWJTvZB4r+AgrcQVkZ2pUfjHihgHdAr4jfoAYe81xgdkekjiwwYjevs8e22cI0UQ71jakTbHQuYH7RSoDtIKPOOqzQOghxyjZpRdbtmWA6bCqRPfDE6bqg\/qPgTbbvJsFGmlSUIciUf4hIaABrNrmGXitz6\/PTO4Y5RSW0NI6ZQMlMvXilYz41URMQtIHtO9DZpPHGWGoZLHQPdp8zhTVSLQ6cMPJ5hWfIOsFZqlNtH0lGvRZZqEHFfeNInTrVRrh2BQXdYIx740skD6U+3BeR8jF8iAJtjN0M3Q1I6FUS9AFVmPHQKyLRDk4f9DVe9EBFhpl3iXWwtASuGdCo1ANPCis20V3wuKLBFFGCGAqjVYUIYnXsytcn\/YyjR8b0oC5BMoiRF0\/MddLywfl2p6in7+5HovjgywdEFdGPnC55Q+JcF+EjlKWqF0h4uRdksATVidnICr5SnxN7255LN1rWKuQrE5aNfwGF9u2cotbBOf41+ZyQ6U3NUpKIt0AFGp52sot9cnjpT2KGaGptJWbVXsoyLg4ndmfmNkr7bqo32YjeSMztro\/kM12BODipKvVCuQQnb30AZ25xSyIA+ZMaMsePJlKPdF85lWCFkgRP0wpjmZZwci2SXrxDDV6LEJ7S93bEOG3bjdCploRSbhUxvGVZfZaGOFItsMoEZrM5iEGJjX6ukMLThQEjuDc024HhjnkJlm89yVHw3F7pYuGMZw6+j\/OEKUjo\/5IKl31OK6N1TRCNrq9067oBuJVOR3BNbCQUmsI0Re9LZ0ZsG4xdMqXyxCnOSjje+IAeHZpfQ7EeZhTxJOR62yT3QgLNiR0Xc8yRDZzKY4nhYHDlCDfCoowNloHahlbuv0DkFDG7vWufnZLC7L1kfTHd7+ASbmxc298hJEI6ohT5w5xN0WnFn9pPeiASe2HkigyH64uAYBsyocPHxkGAOiSoLfOwqSmV3OLo5USPmQHBJvnOVFmdc8vngCTbfqmIOUwPCE3B3TlPie4WH+4G0\/p5Su+ify48pcK7w4PxfG+S1Qb4Ig1xfy9gKClkjz80Gt47F2gyvzfBFmOGO305qO76242s7vrbj0eTNfLA8wSod1ajaXDv8ipduHHO1zb+RSsDMtk\/gMpB2TiSYtWD0e1miMb37M78WmdeXYE1GXh+s92tjkLeadE9qmsO763\/5lyLYZBriO3O\/XLAm71NXrFWT2ln8DAeFqWu3DCcNvTSlv6fr5Pe1xfZ4JJm+GiD9qkJEVjmI4CnBBVUJ9Z6k6vfvk8VePi2SjlajfeplGafijqMx6EozCtxZbhWLWxvD1O1UUXp8OjSph2T3aBRJqi47+riyo1X54mgCYLLhs5eb3xcvNxPorVp0KqXX+\/OTmN+frcTMaLutuNkMJ5OYr5mR5nh4aQ+yvomYzoOpyaUVDTGuEt7vN1gW+SLRKR52b8UENpgXCI4xazJlWYyhY90swIsZPMn2FKKYmc9s6OUWdLDVUTzxmY6F8OEdGTGVYQIFPFA6auK1FUtEKMIOHEd7wsSA0eGYLnowrpGiPzFCLODDPKUCRxKlMkCXU5ayXR7amCmMLGY+H0K7dHbGb\/FteKzXx5F6PCnurX7LBL\/OXV0mqg0I4osAo9ZUDMdu+TuGZ6JrJeaeDQLTyt3P3VB4m7gB0oZ4oyRDvGzjEUWjUevktJU+nN5tQDgSHnqxUWHmQ2y2iK4DemH84G4eOTag0D4TeO4JPXJfZgL4KCg3X1fXPEsxnaXBIlWKREOnKPC1i9XDe0gT5BwqjYwUhhhobAP86IaOMxWJLVgL3zpTWQeoKrEyJ1DCNWBv+0xsrempHAKYCl+qTE8ftDY+7UyefigVxbtVircIXuaeR9Ct6MiZYxZb55TIQGHCH7pTOyiUilcYYWsmxUA9vLb+sv74HWNH8YcgHY9mBQxjlK5hlel3rDTJxueaUlr8ShBlriddqa2P02iFKtvwQ0K4+WyBhcZjsP03q7iGpEIJBkJMhcWWA+mhFnYu7\/FL3a3GLsS4sfAkD0xDGFH\/UDb11J721RXiqbT7dKWPF+A1syaVZSOYD+3oc9Ankxj2mwvGUZsMjXXtQCTn6+p\/6PJmEUyL3PqWrPXlMeu8wP2dZj8LgvMsRYzWd1xfP3AgXlcWHb06mRpABBOH8GQ5ckB8XrBDVSR52cZM9QPTolxzNRDmXKzLBewZMzO4SwaT0DWz1Aw\/w+PULJziGz\/3h+QU7covBgVEpwmX5CAe8OGfGHsnuM4SAgOSIYXdYha4Nun2myYDQEasrXrsEnMybDLASKoDemT5tWBCEkAAfj+SbIHRuRsOccI6ixHaZK9lMsPzwLJbmeoUxVf62sszzDcbY2I4GxgfeNdFTP7jBtOZRGfxkOm+7KYmwrCD6eo87MhehhVL8ruDOBE36Mul5PSuSkK9PVYt5XAK4xZn5v5gWBuZjjiCbSw14x1tsrPLCBBf9QkfzcwnbPt\/g\/Gld0+6R\/NEUJttUFrFfeYskL0I5em9ivXsS5G5beh8mAr9USQ\/q8SvVAzgy8ncKiZuToEatwaM4loThtXnXSqmIj\/+yDsieNoLYe7zPglQ3dqhuVSgWE+kBheHYHHI0PvMe4itXMVu\/GT3rU9CZwEMtkoxT7wQrTKWzyKMHxrB2nLFjOSmDSSq7Jivtsyf6jWe7xr\/JQvj9yr6L5GoSma8TTV9sBDH2mvaSLUxv+ZNvfM9Cf6HsxSYj5gp\/RmODGJOd72rRc9FOlarbkGgTz59rqKZPEEL+2MOsgy\/hrFC42YyZ8I8Dq4f7jHXLlRinAQ\/7T0cvyRPZ3DynV001Fh7cbrYKK2yxBMTWw8dZxFO15sv9IMG6bJv5Mu3PW9K+HOjTineI47AL2y8o4xYTkwTSGhnu00Rleb1RYK+m4k8HoZ\/dIac9STGZbpZmiDHGx5kBorSQIyWiUOJs75Bvsyk7rsoyHWYu+qW0GNt3KjBvHRKI0cEsJSQJTck+huRZqOexo3WZmMd5v4Vp2buyuwMYcF7J2yXUQyrlr8Lmq0LciXH5q243HWY90aL\/ZHtA9OesD3zY2d4wvY3C0+vhasBMdaCJTzqYfAw1eRjCg7aAY8JucYBS\/cFj9di4kWdagMsO0BYTwtFS4u6iVzeEUNlc61DkG+ScwTn\/B2hkFfp6ntu4bUIqXyJsW8V27A3enWY7ukNT6aN0XW2xLdVVqU0lHQYi8pjsXdEZ9YwvCzsQvZH+92axBMvcvWml4d6\/b56EMP7ugqkeAc72qcqsW6PPFHMzh\/5mEPG9tNYrLPIb\/92sqT0wKe+SFPu\/tMFYM+GHyq6mSeLUt5epRP6n0XqsunoVAJnUctaK2+ZzlJjvxvMb70f8OzWe8Ui+f1CJabCCWKO2QO66t5zdu9KEfjPRgZ+hPc9Hlyhq+ITRqBNty2Oj4gZjQIwKbIzSoi5wNX68ep8KQHJ7iKXqAcM9mCkz2Ytrqtr2j3Ew5NEQFcxC\/EAOeYQOcnQ5yVgP0s\/7c8tEWfeGQGby1mUR2uH+tQwlb+vPjc8dXN71uot12sful0t0tqIXxcjHu+D8bIIDHdTxu4ySvEW\/0cs7iY146zPvWtCy4XjLZV9ZrqPoNDc9xOhsWga4euQzZ+ZwAa9vQ53Tu8yr88E19KUa1PEuaamn63o53B9eSLTfihS6blrp2SIpVwJS8eUkJYp3dZKLwtSoNY6zD+UX8oTzesYWkJsP5sT29T27RRZyw\/or9siWOux2Vs390741zD+TKV\/Z3\/OmcXV7UyHWdnD8WCM6eYqM854LIf5wmPY966UK2McqF4m8nrH5ZiGcwHbi1QJ3ufh\/135eFcpFdP\/dcWyoXaOB8cHR3PZqh79HtijfT85Ya1mc281RhSdJT19wpqPfpEug9nuasyiE1xr+TvQdX9FFtow8Ql70T56\/WZVxpT2DfPBmFZjRFoEXgoj2rtoHR+3X33rdMDKMJWprMKaK0KuFM4qlKxhjqEn7Px85+CstbemGEc4zIPjF80T9kUlAftO+FQ\/yP\/CKD7w9S5b74ntnlCVRLb9ffNLF\/5w70WLbTS\/0DQOxNErT7wjPXGGZYg2YdZvjhg8ctZmFxf433pP\/8UJi1TMYFrHTbYaByxbj2+tyXp0wkJ1U4gLR3E5Omavm2vOL\/wED+oB+1crIc1mq5jfHnvTZM3Wmk8RLAKs+4UKwc6w6RTCwfFR95XbAP9t7wWqgxcHWEppvafcdezq65MN5NnNYlHPWXPNdfxR64TpfmKYlucza7dQlTfP1nxy+7cl8oV3SyJftNd8ii9uS2Tz8AGJhAfWe8rHJYk0hgn88e7K5v4uu1j35fUKDnYTvcXBaz9FULBeGAdUeDOf294xax+t98SOW4VomqXzu4VovtgtRLN1ZkXz9cWK2JnlnPqvmZtFKfJBH1Nd72Q+mrKXVByXEsRkIrzUlgM3OXKajaKNnVFBBvja1DTIM6qERhfcrULhLogtr9LQsIVQixIIOpVwfPktkynmLNmyFioSRcFnrlWE5R6GzNXtCJnglKWHiF9xQDBkjCNemeAhzs53CY7JSLYwNCIiKhtJvXQzmDD0GIsklFic4txUTB\/wYYOhq9kSAjkBpnCj8JZq5DxlsuToOGnLT7hSHXktYuzoBoaiEsqk7KOqoOodptgoVmeFnv8y0lvzwd5+F4lqIPnw8Gey+axPs5twmF4nkwGSkdF5nvLauoEaNG4PZ\/Rr+hbrdqSmHiqOCB2pDYPm5uZmKtrSsRNzQ\/G\/DEHh\/Cwdbt\/GNXu7e4oXpD\/KrthqD70gX9gfBTBNsnUVqxTzEU0qNKNc6JfsTSiSHrEIxwvUjyoYhiqJ+9IbefCHHWi+cAh3eYJlSLA4KdD0ghL+sEjIcfM77BU4ESuKEt018Btwoy0+mggqXR\/idaapJ2orp1iikje5zLWwesR5sM49SfVHqfQydpJXmQWqMSNQRCsqZ0IJhkOSi0B8yQuS9JgwucnIpLgInNnyyoz3OEpPnqjqOnSlSrAEdke4KqhpH2umsPb337OftqjQCebuxlSauJTUmIgcBg9R86LSMOHrBMvCUIe2DejrHVAgoWLbWCsEuceWcMEyuljexVYVsS11EhD3PlUWAf5MjPRhgZSUsi673JOBTKXIx4+EAekMQsPMnAV4R5PXutEC5fNDF8iSJVo0SpVbbG0VaMZMD3SAj3wdBDaJ9Z62qEgLNPifVH8HNCPH71ER3fCk4OFzGPAAa7j0eRwLUkIicpKL1Z9JfP\/E2BmLeJolPGDwYKKANaG3LMD6QigiiQAdbbMy1XUWF6iBkRjYaeCqJyJQMro2OtIyKbM1bPBJ87bJYH778Yp9pPItr0WWaiRBwimz1yr4kZsQaATG1TE7AOE1bgUg6EH5JgRxkGlTsEPJR+LkBa\/4ua1zPcBCvhjKYEbTOj4+MOVujL7I1VzLiB6pjbvilyL+MtVNYq0DehB0D3AQiIPwMmIa0ta2rM+tSkmEzwidAb+g5FOyruz1Me0VYyoCnLtO3cs\/vbMyfSUCGBDsFDBKkLQAGQYhHtUAM99xKi0zlR846yei++qbfprGJzs7Ae\/obQViChIB4rmDMB07MYftQ+\/E0tPb\/TQMvjmNS8pqJJP+hx1+yjY+Xrb1pqmIzE19JNHtCksbFdCsiagg0EalJKIjzU41uhxAHVhD4Cz8yOhoD7EvOW1ers4RqlkgKkciA+tiMvsob1gWoClbNaRL8mUjOCLD8LxQg6rrlJR5CDvVBuATr1cd1kbD8hPO4dYEsCQ3Doc2X1waoI0Rw14C6hh1Aq0\/fPszjoAYF\/hc8NQU3qJnidcE4W56XBc2hu2lqGSVyJ6MQEZH5uUypLu5lLmtG3o902aF8t3cmTqomYEIIAAggcI0hINHNURjh6mB8lOh8nFF4OvQ4KOiZQM6I6NdBFiOdSTt+gVcKjaDsULQipGtcAjLAkwmXW53YregSADXw1fQJi0w80HDDx2\/RxnVD8NV4gb3ALo3mhBZkKaQRXj5GQwtsCmoiK60bEO7EFbutvQLsFK3Ubyl3YPDaykqoYExCu1ahKLHnQgU8l4orksMmPLZEZWVl5Z\/cuhY1OKH7it3072AOKBZJJeDHmgjV+iVSwuf5bCrRLee8yohOSCgU0BzNecJJWX03H+pqAoQllWWr9XJGkSL\/W3styfjJ7rWiAhfn8GEUb4hhrgtuFxNDi35rh3AccgH9f9sy3ONzRf529xUe1791K9U\/bQS68Gyv8\/CNv86kM+RA3EbD\/G2Gup3lssCB1qwKN8YT9IDDf1jdwtjyXb3Wmyb7dHPBy\/gx3368Qh+OqCfDuGnQ\/P1wT\/dibINR010ANyyovDQr8AyHzKy7uh4eLhFN8nGWOtgzVk8lHE8J6Al34GzFzkZzKkavjYmnfGX0cmfp9Zi\/v\/+3\/\/n\/0YTunSShaPcQDjHjTlbfZFhFhogKLDkWrt\/mi2YX21d1dZVbV3V1lVtXdXWVW1dPR3rCmfPRg2o8VtUbkAdFgbU0XgDCn56kf90ZF6Hn47pp2P4qdXMv2618u9bpqe9\/X+WbkIpawDLCtna7OieonsUckl1hvbOqHBboZ8VHpS5k6sjsCA8Ze0Vfq4GXrF6faazXk\/olIw61TElgVScylD+bm5BLguHmi+1l2nNwKojdyPeN+A1Ct5FBSLN7UMthLmH4MwjHUNOwiJ7wfEFY1cSfYQDdGSackUSbEiFN7gG3HK0hQ2x3du2l6JAiR5POngRAgsW0BUhy2Kf7nKNjzQRBKXqYa5eZEFKfLGJjljsTlsv4kDA1AIu\/S2VpcbtaIxeSdeRSZrF7LJAX0avY6ow1J+8gL5I0BN+wxNDOpdS6JzHhFOaqBB6rZC0cV8lpLKvXmLemKyQo+LqGuV7wkc3S7Lspm13rlj95aTWtl0ec997D0C2hRPGy5syS5EQEd9JdEnjanmOBFfw22hG5AqSYRbHlCgLMeWlIr7oe\/FlJuCiK8lri4ennJKcK4lNuborO5UIVCn20ZzMYlpJTTOzSuygqc0Wg5Dec1Zc22vAfY+T9yXWmnFWAqzew8VxngEzIxxLuxL6YeswOXhzdtFsvl5WBa2JKng9g7XEmEYEYJg9HMCshK+tROKJK4rkq8xzb163zw7eVBhOqk5mYFhgKO9klsTmM1PziwatKOp9+qjf0TXUfALFzzbXXq+1liKkVAcvCy0n6BWGJnwA16agwHLXeHVuXfrrcBBftSqplc2887PzN62L1sHYjr6fYuFWrcpqzTezPR+cn70+OzioApP+fYV3+\/W5ZM2Yzh1kpq\/3e7Reh5lzc5ZZRwlZ3CHqaH2s4dlGaPQXHGAxC6P1VljFmi3HIuIw7jmtttb6tDrDcIva3zp2uzg7P2i\/OTio7Zra3zpfE2UxhhRov3dS66Lk+YVK5nepVr1SRe03nhNs7QSJh59dOrVNhZVaURLxSJiV1Myk6cpQBjxxGd0EsQCPmDB\/SsWlN01M0ksMq6LcdqHv5qmOwEtQdm6eiguvlTEDCogBW9\/bhr0VWbgbA8QOYJFKG2zAYa7w0+ZoBnKXB4HJPzbYACrKE8GhuyLxF5Hwo5F5bcVKQpN22GOSckeShtkGPm2ymNWM7l5syFop2qwDmx9O9A2nuL2OyWweWcqcqqOkhLasB4dtIBrOZk7yMvyDgxCR3TtZs4Z2BEKCs0dICEti7vBW5O\/CwINgyYAUI9OgncjmOJsGYOxvMV\/k0sDoYxqJj29Q3rwiWH1XCNyMiXiAmMhtmoYKmOk7BOprkdwgJ7A4S2LgX5OWPbQDT1z2MQKHxEL4W1lMWeHvVfrXyBcJ9uGf2IwUXsQvelmCJdhhllmUA7YIYHGt8nhH+BQmxmQvUtQPxmCODhvzsWOMcKCsYBv6d09eOIqDA4jIZRC7yeGfzZyL+MlbmCWPVjYHF8dHCwvKroimvL+wgTrA5LPmwrr8KtjvogZQDgNH5OpF9UuAVd1OAXNrcLo8C3PbPl70SO7g0h4eH+e4tIcHzVceRiyVQWnh+7NDA0q76MGWUWSn7dvCvi545F8Hal30SCZBVl30mMZBoXa9+6FQFz3Gh7BLFzwebzzY6KJHMwk66KLHNA7O836uah4ueoyPwt9c9OAmAcxc9Ji+jnC54JH4rTvsxQv28v2CvfYPHHstWiz9PctehbJvItE6SLRz0FrN\/L9Fjww2xF\/h1JgDeh53Sli7x3sl4Twnu+OYnYPRcVzN7siTfCjGa9FGgO9b3qXVaO0dtw73X1314djq\/0cmMntuLZj6NTvcZ8ct1tpb\/PqI3VXlHIFqvYQEe8zHMk7zgh3tk8E6S95pLZp3hD+6Hgfd46Niqs38DHF+zI6P2MHFUpamuzsq1PzQK2pcHHawxkX7jtPWSjcYLu5UwdwxH512xfHDQtBplkWYvPaSxTwpHFYIpjritBhN5kS3wrv3f7XwdQYYlfIpI2VcNBYrjqASsRODv4gOL+fdum\/wmAuq0r719bgnb\/OhSzm1zVJupRv47VJXA3KolF2N2kIekjPETmBUkZF\/apQ\/WYA3bmZOLjXTVK0UvknLvOVjQxS5HNrup3cEHIxAgCUMvhHHXynHFGl7KyXVwaMWzktEsIsQ1hO9Q3cABmGShH1qchItvCnh3zXQy0m\/3PJATp9UOhV37+838xOAphOAjjfzCjVgobX22e7+QgVuf781oqVbe77YO3r1WhL9OTKQ21Ccbtg7Yq\/fLGFDgaG+KDka6IjXOfYKe6lT0ma7TedpaLPWeTVNdqmv8KIcOs755ZIQdQJh3etDnYqQJVkELJrKwCYvA09S9jh6cEsYiRsyYghFi\/JuECcJyPfQKIBN4+F34JCIDJm727vKIjNPz7e197L2Xt7nvTysvZe197L2Xtbey9p7WXsva+9l7b2svZe197L2Xtbey5XyXpZ5p\/vi0Hv1WgR8eA\/XtNnFi6VwTXdluaZ7m2uOJ+Ca4xlzze6iuaZ7i2t8fuC9+pD4WMijXfgZ73DQQZu9PlsCBx02myvKQTCy2xx0NAEHHc2Yg\/ZOFj3r2xzkH8OeJdK7PHO8z16\/XgrPtFaWZ1q3eebFBDzzYsY8s79onmmN8sx+c79z9OqvkfxyIQPxmqqmqeSefescDq77eAuw8HXaXVkO2r3NQYcTcNDhjDnoYNEctLv6d7WHzb07d7VHE9\/VHt1zV3ulMDZdYIQ+1cqjGHF9p\/ZWUfCMvv2SighzHYqrl0CGMsXvEmxL+HPGjp0aihkxZ0891XtDUwBKnUxTCcDlMU2awIn8\/N5UGp2+v6KND8l7GUzad8p71fr8\/EDJg2kXg60n1qk3LQD9XHBOQVQMTzwC3XSpdQhmgf+rYpHwyK\/QgolFqNAA9\/1E6CoQxIi0XeF1MdX816VSRZOwOy9xB4oTrMK6djUZyvijFMt0Djvj9UnFxNkqNZiEAZ1\/WqUvzNwoCXJ+CIOm2Pk7EaoHEGTHr0Agol7a\/9BddSZ4KAF5yfvHTLLQXTHfDzFG6+kqCA1VgBk6w1RUHkDzOawXFrOfu4h\/ErDbYDln0thV8HDovNLG4wqYz5f6P+E01ask95NY4lVQDiKVrjIbTWX6zRP3fiWo8Rgz9gFiTIMIcr+lVgWt3R5mKu6Rk52UqyODcI3z7lWa8\/cVVJoXvldtRIMgbPsPFC\/+NNT91Pilj9KXSwcgfQpLNT3EVfXj\/EyWCiPN3xsMoeexYtXxNtcBzKqyq2dV8Z+et9KY0UF4Flv3IlD1npK+qYHzVgM4b0YiBNbnM0Pem7pa5RMQYpuF+s6UscdSk3odTsiPuqdZItKuHeeH7psITr94X7xMyX642PLq11GRUdtc78+PiivC45PfJC6RwXsiglNeKkoFOfVZejLnK9gVWSGxCI9lxQVSWQoK\/lktjxtGnCgPhqqqHAa6Qab7l+Txv0hUeLKU2ILZGE4rcLSq5BUt18Nedfab8W69\/kbD93MzF1bkMD0hOHYRnznoI6S0Yr4B8y3jWiDghf4TYz8jgksWICoLHGGHrI8ZlKIAa7HYzGW048ZdGOGeIgxqxTrwWqAGLxknrJ4cdyaLIoGKkjBKchBnfQt92QAia4LK8XJg69HeC1ztRMSCp+4ZWdwj5e3BUNJ+NwsIUDiL3WQIlHgrEDcicOA29gGKEt1m7F3m9WEuKTRGGD7KQhgz\/tDLiLDTIbjwEH6lyFPlW5I5+GhEPsb1uB932wVaIM53l2nVsM+ZT2n6MtWwULpvEUtyNGb9kpaFaX6DwNgyJEQj35FopI1E+Bli+SSiJzXOE++vdZYg6rjDLuIR\/K0zYYCTBjCtEKZ3I+xC+YJZ20wRdHpMwEFJL0M8Jo00cI3rTQsC5FM4fQlUmyKALf2wwZxjCqigHkIZZTmuin0alzodMp+HEfstk951Djz9g3x86LBx4Fyl3Ls+BzXktyneV57OPZyYikx\/iEVUJaB4otickqVo6x5M3d8kxciXvUGaaMU\/\/Jap9GXbkLlg2y4JAVNAdwTuAeb8KBL4MAQBNwJswbruSvtcJj12Do8Pjx5RSAaHCFROZ4gY+AiegupV4OUV2puO+SwYvp1\/l8tAbxvyrfA6zyImGDMUrqwEoZe0YlPknq\/YDij4s7cyrTiS8\/a7h1l2fDN2033i8cKLSgCYAafNKRngrAOHd+6VD\/HrkhawjEWsIuP1Ci57BafXrvXarYL0VdjX6gWc4yUfmNhgSH5MsBJQFXfSJMeLpxHfcBbIXoSn5fcq1rMPcnARI+fDVGg44fyskiqxciH\/UiXZ4Gh9Y5eKEqzppHk8K1p7daXIOePUiZ6I\/ixSss0+UMvTBYM7qflkK\/l9EjoL0ocCrh66Up7uYuVRMV8POIm8BAG3oZH5RycvDKh7AufPa2Wr0JFLJxHWw4FF667gl3Y5AwG3Y\/y\/caBcRsbOoKs5OLedEATIyRo4RWaiRroBr7SNfzuWipOVKn2kaVesukZnsdTORY+A+pplMUJWcPItiwQZol5oG1L7acnaqY7Dfwy1\/pdKqsVAP+7GoI5hrmKNqZ70eHDVl930R9FN279VYnVs5kJVNeXrxZvwgBb51dartLG84\/q6SkxkALZJkL6smWed9tV3gyrH+lmlx4YFF55VDhHj+q+Rlr1I+MuN1tqYVPCuqm92ixS+zTWFUknmrhbWlDB1OvBkeiWKVMpTsbLJXpVTy5dtdU\/CS1WyrlTn10+iO3cKrUho\/nS3+Uv0C2M25XsVTZu8\/ZxAg2rTbTVMNzILaruttttqu22VEXcW5b193rA7FaJMn77Vsdwrx6kCd+sQgUnvcC9E6vVNKhDZBrYodp7zw9Ic2YIl4rdMJsJkEzmUTN9dBMqIjeqb53TJV1u0y7doK4Qu1iZtbdIu06Rdn2v20d3jslvaOjCv0Qar+rY4iaKEyizyEBATPqUovy1CBm8whSmqA6nLu41MVz8zamyM3Xoyb09EPyruXwUqrcLGbwX3RXIZ+eJLFU+lyhJPVIymm9nRxxc6XUhkXx3vNCGpnvkV+vR5iNOciuYXUIyn16uQB4E1Ly+jqwXG0a7pEt5LzF\/D+DMBqlY5g+R7cBuW5DnEH\/lTxh+NA\/qu9dZCgEsXQatVCrS\/oCh7Ax+AiC0C3TSvFdPCU5F\/X\/g9HkMNkEkie\/2UKQvvAvKdDFffxJ4hgMBMleTGXDEKZjLUhbkxN2t7dl1uYJ7R9lDH79fx+5VCsJcLkFuzTp09UDNPfWFXZw\/UV3b1lV0dhVZnD9TZA3X2QJ09UGcP1KZbnT1Q22213VbbbXX2wNO92ZzWBnhMlPxq3W1emTvMu5eboMDsned9F5rpQNUXmmtwS1jfA9b3gPU94BNdq1lfvfXSKvduu1VQRLufk+wBD9caWss47L\/VV7hP7Ar3l\/qCt77grTf\/2ktYX\/DWjsLaUVg7nuoL3vqCt77grS94a9OtNt3qC97abqvttvqCt77grS94V+KC90d+N3cVc8zvK5SdKuabWvTdDJ4wNYTq2936dneuctkT0RW\/EVcp964\/KgJC0M9j2gj6016bebthGMv8Ye58wCT3\/dcixnplUbqyng\/nmjnraBVkqfjYnvqcfzT\/0eLhrV3p8DajpdXVT1nzt6yOJnD7rEXtVo80SF5xd\/ERADOuxvvsggHctx2OaDb+6s5t5qh3xLRmBwQTQEY9EFepcSOsYnd1eaDFmrLPbElsC46fzC0W47kQcgAqLdewldyjM1PWO4vQ1L+swwbo9GYlW\/yj8eethEOHa2gjm5bV1uK+wp3ZE5WlMhIrf4fktZUvpl2NPCru8OWG\/g2M483C+XIZ\/QjzN4FSUmt67MXL56J0l6zWZUQQmCkPrqso9bnGeGoZZgGcQX17DXahkkrFy7\/KeifPPurRHffRP7q60RhTDu4xGndzlVDO36tUsLTPU1P43kPnta+EZrBYmICUJdFEPmrrlT\/rcRkxaER5HAjRG7+UHH3nqUqHsWAwAp3yJM1ien2gWabRZ34dqQHrw\/\/DzOszHXNP4Me2C2FreqhYROzjZRvTqIyPXWEjOIIQRBArfGBBj20G85WenbGWEf0ITyMI5VYgbkTgAN+Nfx4I4lHJEC\/IfKCKhzeTQjeIPPQLS3lPsw2t8D3sj5oe9GE8qQyFm4ynssBnHRhGn0c94W82qGMCjWddLFRia48kwhPyRiR2r7Jdmg5DkYhgSLjzed9sA7qy0wgUJ8TMMvQwEtYuAtC89WL3xXGDssvKL+DPCG\/PvZTuXj\/zTkBLYl45am4+cBtje3g0h0Lj+82FyUNE5zXWfPSLyKEn7GBhA+0E11r+fsJazaOF9Qma00uTE7Z30To+br\/6tsO19N6LwcIGYHjt4OiEfVFJwL4T3pcG\/c1gUC3WPl70SPiJ0Yfb3ze\/dLtdcbzXbbGN5hdi\/sOD5itPgMo566gk3YQxvjliFy12vMcu3rCLi0UPtnsCKiJmMI7jqQWKtNHJgkd+2DxhobrBBfdpwTku+NExe91c9Eh2T1AzBuxf7RrDp8WA9tibJmu2Fj2mgxP2a\/Q78aAd0q7lQdLlr5yY\/tveMTLhiwPW2l30GF+4FfT1yQYu42ZBtnPWXPh4jk+Y7idmHXk+lHYLRbR5tujReLe56oV3i6tetBc9pu5trmp2C646ahZctd+0XNVctEZ70SpxFSlg\/OMV\/OVZ\/to\/YxeLJuCL\/WJR3ciKMcGitpYwJhDDX8O4vKh+aVEPS4t6SPsViObrRY\/x2C4qCUNrj\/PD5quyuZoT8fyYHTbZ2Rlr7YEVOu0wL\/UHW9yjC7Yz2MmL3t1eiDuLcvjQohwueIxHzRFJazV9DiqAb0Sb7CxJ+HADldWIyB0dsaMmew2L01znxTk6zE0PY2t2rOnRPl\/0SJzVS3IBdubxsVeY4AXpW2RitlnrGOz0tSa9wD06MBPezSeIe3Rr8RbDcWt0j97rdsG6T2SKCeAn\/7Z7eFReAlTuTUP\/Cksw7VBf3BLWo9b+0QYObsTogmHuH+HfrWWM0YeTUxiP4WYa5t7rJ8HKfPeOiV4ypry9QsUf7TkTfdHGFN+\/yzXe\/VzTXhbXcG65BvVwwSRwEDxa9Ei8Oyt68NCKHix6jOLOih40ixXt2BU9PmYHzWWtaGeU6\/Y3cFwjDLcPxt3+okeVa1AYRqHXYddf9OG+c7x6DodOiffNwebYK3j\/gBe83zqzvH+86JNOB3if+2W67XXKpy+wIvYWbcF5LWPo21FcXICZsOgh7OWM3Rlh7NeLdp16B8\/MnPU6zpxt5bN73VoCC\/hrY8j6e6tvyPrHz8mQ9cUdryAvVL8oqf4zp\/oX7k0VzdU3ZMXhqhiy4ghWtLyXe\/vFgnJRLOjhG1rQfdZetDUm+KpsWsJ7ZptWd3dtNovu0epvFl3xjDaLvebemM1ir9ktdEv7YkmbxV7zYOU3i71mZ0U2i72mf2uzOO4+sFkcXyx6iN1is4gb5ZtBcei9+gMP45fdhIfCZnyajWT3NTtsm6CMhcdl7LVyFhT69oiPzIh1KUfVjviAHR4tbcSd27dBB3u0EejYiAuMbu+IvT5Yirjstu6OrkkOLze612yvubTRvShfbzYpuq2Qm2bumDs\/Z\/tN9mKXNVuV9oCzjqas2eVsAbtgMOmsU3ZfeQWj7LE3bdZsL3pMoCHiDI7ijtQHewsewV7zVtjYUaf1AhWpkfp9q6e+HiluY8ngJWDnSrFkl\/qTCHgqb2zQ9YIJcUBeug77jgcNFxvEv+D0lmBC7u29WK3hHK\/IcBhrHSYYqfCG3TEqGWMb9O3e\/ovNhY\/o6HDsiA6XMKLxNDpY\/IjOdseOaH\/xI2qfjx3R7uJH9Hr8qrUWP6KL8avWXPiI4Dg3bkR7F4sf0W6b3TZwWGlErxc\/or0DNrqjMlYeUXtzamwqO5Uzl3DR2WdpP1FZr8\/c7RKTJj8kFTp1CTvCJatg5o7q9YSfZ3bIyJcJLCZD3CZMmMEPswhsDO8aHqNI760YDx00\/r3OTvPLXmeTyS7Tapux3V1oQqdJ5qVSRZqplPlSxzz1+vAFtab7KqHReFyLButkKdi+CXQdxvAFj9JgiCkkgUCQrH0YKnw7ZIlbTE1j5dHoUKHrs9SmxuSpKXl2D8wTZsx9nnJDA4kIN7IrobVBH9rFdBvzCrHySG+JMIkvGypiX44ON226jVlOY7LZ\/pIs2qLkHQT1Yjani33dYrNJSHGQhR1MAXIZNdgkUFgxGnkX3mTuHDu6vmBK2\/EP4L9EpmIL864ZHQ1p0HSsZbFFMnILKgs0UHbDE4lpO5aulpXgOMfI3nQdtZgeSFxF20TbdNJgDNrRIkGgCJgJT7sqCd0AXEY9DFIGMAyutUl1Kq2NTbziNrm6GAHMbWQE3Txr6ErRKuapTjwIlU7zbKQA5sUC2RVb3tCDboGsnGnkCw0UAo5TSQQ8HcgIWLrB+sicOCwYCQdWjBQwXNyXHpBpK6AVxBVrMPElFokErqCHWS9RgxRTy7IkNe96gdIgJDQrI08RC3maJa71KJ+2XfqujHgA1BKxduJRGjiwHhMSPkyA3zoygd5UwnzB034D16EjStMAusMIOU7fpJFxJ+Wwbn0jeY4GOeUcxDHyWSJ8AePBtuADhJ2Tmsex4ElOVZBMahpz4jDjLOAwPZBzGBPIvBqapSxnzrkxeCpKuYzc6ucjMXTQjhJYwoyo0UCpgPGpEFPfpMcjAUpggGsRIZsNzayAkoZv373\/K7wzkCA5Ay5TogaPFNEuRuaAQdqhhDziPWF4Dd50n1r9UKSmvd09PYvYh86NVDCSDzFItvydpvvDDnxnde\/P6PcmfvjpHS4hZ33Z69ucwIBHvQw6M4OFkV+CTRHyaxA2YKZAJY4e8O4NThB03hBI8gE3rUu7Sj5qxoAGDMzlGIj4pa167JINVOSDDvBxbWjCMP8BsNtAIcfoaxnH2I+XCG6H2i4Y1bIKrgXwEyw0jC1WwTCXgS6O+4OT1oKX7mUjHkAnPszji9SptkzeEREwVoo8xm+U9HEMgUo1CibxiMnODJUPGtnjZuOwSt6lhKrINuarQaRBfRuOBU4gaexyBKgpzyvfdWjEOlAD+D6fhvvWNvpbBvyLfAyNUs4oj4YFjyIlbRYm6DoSaJSEGPSywiUBUQlFj1uKkfTkjRQjgpb5jchJpYlFQS96RM\/ESLsbIJLuDFbOskd5fMgi7kg+WyiCryRIm7Tf\/10hu9mLpacrvK8qvy8ih0Gpp4KLmIQGMyX7FKSbBohjFGPuv9SkoB\/3w3GonkHL1obYs0dvcN+ejB9HOHNOfqDpSV\/+PIyrEPhVFWzsd0YVgXKpBCmxcAlQtQTUEjAbCbCYyuvG\/4\/evKrIwcZcduJCQILp5eKoslwIPje5+ErTM6k0czQBZ25Wgja7Eumq8L1r9B9LMDgLeKffRQV6VJGwykMXyxQwHP3cjhFVzfgCYMyg8lRB7PrqRNdC4B\/k7\/Ec\/M9JtMG00D7s2w28VTiY\/sLnYJftMGhju8ma260XrcPy\/6fWVea9DxGc\/FsvvkPfRdlNcsdZ0BPpvd4CONhfqdy3cyNGnDvohyEHnu5z8g1prw\/fWS9FW\/VkykIuyZWGDkfj+4N\/0MHVLbwHxmHdEV3yq6fG9YMe3rKHhFxkxcCN88x66lPCyir5fWTXOifRb6\/sAMBYplacR++OP8hMFr0b+Vf4bEeiw4peLbtbqRQGjB3938I3fm9PGIOa0HKMM8q3KFno7c3RrOiCgnW5DMh10lFZyvo86LIBH5LPiA1VZgcB09RCMAtPdq+qmVi6l37kUMam\/VmmfacbqwDRpVRgw9B8\/qXzzLdmIQrHq3y80gCbXuKLRkLMEYz4S0aFBx8Eih6bWgOceuLqsm1hGTtTEcbBtOX8M+VY7u16HkB\/Z9HoNYiVNFm6X0DsPJQ8Um50qwG\/oPYyKHXmBXwIL+qEP+Opm8E+fpux91jmdg7XlHHSMXT7Zq9JCVnQXcu52xRy2eJ0rJ4iAER72be9IpO7xN1Ja0lwfBbycPSCyultL0sSdxVCXnu6KjBwhasym89mKYCLEF1Rwy50XcD+Lnds839hThpjZecLG5B+LnNFo4kudxEvFcP6yiU1lyx0TMevsPbIo98saVTSpSs5OzBL7WVyV9rQF6vfKT7El+az+3Yynq4pe45fGEbWceslHAY8fOYTffuh29ViRSZsbP9bq1acX+i8QKElWXpHqG6BEa+k2WVaG1Mh9sier095LMkAHdtOb6WnOwuH0HQ+mLxsZBSJxHB5FacUMlvlVki\/UC7P8s5urplIDD6XWvqQvJdBFV8snho+814V6nxJRSXKgAbIgnQWN\/9rrjhueHLyoOZ4oFbBtJ7PfBCEil11FNaX03Y3ruyPk1TpWHGluOilrOztqdf0ke6Un22InjVjEoEuXHK20qkcDuUI2A\/fRsJElsUqZqrbtWG7UcmwAbvHhjEPTYQ3LaY1Y1ff3pl6G67icvXUZRH6XIFVYVWoZthkl4QrTP3Ha4Dl1nsSCZxi6I7kZGmmX7NcPar1skppVzhnjZ6wphhGqk4Wr3TXgbcfbZqvgmYhP+dnFa899R97pKlC\/OrFBtEhYk49mKhjmMbW9jpZwOmw8oKuMCNMf55c4lZjyjidRT7oxXW5Tx3fRLdaibrb1xBrp5du2eGCca2zULCRlUYimUCIP4Id\/keT4yTDsn\/4dxWJtTGuH+d8qaKClc0BpmzAKLV5UhVitAKXKgnDv1DJZQQ7I4GVPGseHhdC6I7jG8tbqEv9nyqLKmnMB1j2aDT4bbmLxB6IzUlmH4c5Yy9tXpRcpaUGlkvVxy\/DAwVE\/So1gv82gTS9oxz1KlJUXW4mZgg3sV+WFHwqu5+TbObxG4vitSlydqa5hVii6UshoJ+VTZa5WMl4wjVjmnUrwR1lIZU8Xf7Ce+F7M5Z65Rey8s5Efi5m9oxsjVnVOtdaJOnJMm66S4bgHDKfykdvjE29s8Vsb9t7Lc0GLlkgoVCeHCXCAAGt0tF7xszz3wtxMH8djmgR2v6XJ+I\/uhLiNjQKwptY+BN+w2WAoErrcw1bZ7wsMOPlSTDCVw6y1fwQz+5wOKpWCLBqILVgPE1FGFMensneuz99AwGzEEdvtQJcZ7QxLkQ3zSo2QfVgXVZYIdUHp\/rIXK\/8HFa+Deq3aVZt1qtfr9zcV65VfeXGed7rFZzrCqZ8nneNT9FTNf6SeDaHAK7RVdGr5KboiHQgRHRSAfDrHf\/yXvQIpvlNkqikrfwq584K94jNB6JF3TOtyS69n925anYenEkPYhdwviLwYTh7aWXQRvDc5SG4S2QdlClCwvZEJBI4n\/kNRijUmJyOCOYswIT1Uefl9nNJbGasDSOVUYZhVgY8RmrykBXI25S6ud7H1mWdc+emdavgK15GOut2pSdFlKKqvUJU51plLVbHTRa1MrO7BB4EF7ix9toqjBEBBhcef+beV+PKHoo\/WW+ra3bL+PSvhCaJNPpl\/RMhHpG9PMMkiFpfPi7ugcqnYHWes3TGGR\/1SjzuSI9642ThsBCzNKO+r5AT6IVvMHNqgrTAdYhUjxPlCa3X9hpifEpNkOn+Je2WuHmeLA1GpHpG6kMeiPn2Xhnoo1ou7HotwstalFZc\/VfjwjXfvlyVkauJMdRXPtjrL1gLkQrrUVU+9AXCIiFIqEy1xYaTEcVhlB1d797\/lW3cdzmE30cy2FwbTLJ7D5pPSf2IL8ID5Z+DIKAO+pG8lHgynpE0PyWCYVW1T3OIFX9KNOKR7\/IiT2ZeL2J20AejGZwzP\/1OkT+2PjvD+w+fP705a79983rldfl4l6L7NipCF0p1MH8UKXsn2GcRBOw\/VcbO4F+DsX+ZNpj99j8yTmBU5eqY8FWO\/N+VkdR9lsFWOqSse6pFaYC2oyzsiASh+y9koqHN+6owqi4TwKXsGrE\/sVoi1U38EytXU0j5ta0NYJs0ZVWlNlVACSM0ySIqRIo1hEOszok1dXtZ38B9b2WxweMyVY5NeV2ZUgGHODWo8pnGKptRnKWEeF4qRYvoXZHAIy9PZIBli4s8axgevhvd\/qzLrkIeBCkPrrGXXsJDGra5WQwapigEXil6KroREV6wMK2yxKOXC9qdeWnGg3zmhGNww8E44Z6nEqq7CTMbqOR6K1Dcp9LLKVVfRWri0PtZT5jyy1QWGMuQUv3McFhUvxVFEdCfpIYOf4YGNfvpHdICyI\/fhLbiKdhJEawYjFLzIC0g\/lccWDSyJQSqNIGMW6mB\/J7U\/ltpPipSVd7HUifV6Nnj61V483EsMI3ffhpOqdRP9ihGqtTV5PxWqZvJ2bLabCbm3ioB6M1Vq8A2k2wdK0avH3CJTDuBxaRoTFL6LFyCBltblTf9\/lrFRzWZf3V7xRn168y2FkVYK+c33IoLWu4qLSIycUYZSiGPL6phwFXhOl+t64otMjDr5AGHEpzRqgB2PdxF7K3DNrZ0x17FdagcaqnRLY3BKs9Wjy45MO9vM\/c9uHcrlQJxjZggmgoNqGlRqZ+dpphxDPjCvAHT+qeejQG+NqwzreZ4UojbDxgwNW8tlrfuj4zqpZWqJeT+qHOuRb2QC7F1J7ESJ0H9ksUdWV63nGqGj9yb1ou5Kqv\/5vxhM\/cxRuI0m82b86PXX4+AmKlq6sj0bLpAH\/dtMYx3XF+Pnc\/mgo+NeRgX1i8VPsWXnwWyF4UPRdvWole\/sJTNw4nK3yrmSrh2fqnZvH5hfmx+wQM9Vz5\/r9qovGfD7ts1vy\/Bcfh4z9w6l9qb7cGxQkpNRX\/mkqvs1YK6DoJa37PX7LayDD3exFh0yN6Ukajzu3WoTaZaE89XE7ddSmStjGtlPJkyXlBg85Rh\/bUyrpXxuipjW3OmVsW1Kp7QLp5r8kfVDKnlqWJzQVj71VfIxVyTe8UuypeRepdNny46z9C+ceri6HFYj0+d98cTuIt6oHI4zrUQMdMep0z4MTE4sygWPCdjfrwYLEzeJoijtdcXsxDc7blkev5j3rny2\/PNpN+eRZ79\/Hp40Oe5Pdfc\/O25Zu7Pn\/bjN6udZYA05PBFKov8z6pKXYjmdrPZWiLvzZG6ldd29clb0YNWk3eup+JnQN7xEZ\/\/ZN9utF4c7LLDPfhrd795zPYODg\/ZXvMFe9Fkze29F8fw93FzH\/5uvjjCv1tHmw6n59FWhjMG5m8k46ymtYWM2l9Byx9X6dEvbZjpsB3mqM\/2tg\/3NqemjtuU5z9fZMjpx4cznm4lie+npg9uqSvIPCjY000GCTnlkpPumJqSuHuuZPUi0I\/TzYaxSsQEFTw9W8JeuZLEZLDVTDedarRsHbl97CzyCVGwy3XKfIPga5RmLJKuSsI\/MVaGKiTQQXwoRCC\/nmBDlSUYUdlgg770+oxHeoAQe\/iMgzBtwKc+0wo2YaqFo5nFCrZpFwYoeMvACnZVEKgBfNhBXD8to16ALWESJJORTpOMCug0sA2qQ9ZXoeqJSGWaupFR6QPY9bHWLzyPqZNTbt1zA9O7UbIKdl0xz8swFL7kqZhJa7ZK0Uzaeg8sxIMqKMGgOkKVxP2psL9dKygy07eyRLC9yVmkSs7yWZLwKoe1SAyq2PKt5u5+hd4RUPMsCKqMoATuukBX7NQCXK\/1HCEW5rvSj1Ku9TpXGcF2c6kr\/Zitr17oJVXm2anQ7+4S2OvR5tBT5qzZkngW7FSxvk0lW9eNQT9UXuaBfP9hlTXbfwpAiHNDwpVrj4Q7KYuuHcyoxS9Mq+QyyiroTNkcu35ZL8fKYLgtkQ0eqo92ESie1oy0Moy0u56MtFPN5juoOXBlOHBvPTnwj9XcBrpVOYpUezwQPvOFJ0MeTADltoxQ0Ed7xevD5PocJqtdeazEYfKoPkw+6cPkpCxab\/n1YbI+TNaHyZqR6sNkfZisD5NP6TD5cvFHzZrpF8j0++vJ9F7Ata5158qw0cHTNQNrRlwnRjxcBiOaXPqNdTMyzbA3a+5\/Mtz\/4ily\/7wM3EWw\/5yuTf4xz6yO7QXmfGwvLCNke1H5ItsLiLDbXurFC+UnVxEbk\/X01C9A+NpegExW1Xrxd4eFTYN\/5nj7xuZWCfrXmWfrjWe3edOjqpCIudGjyr3w\/\/k\/c0zWYnMr2zcO0W4WZHHJtDNHipsFWNkDCkeG4rP6lEUPmWsmCfcz5hlnIVNdlvYTIZgvu12RCHgnySLNVMTCIdvdPjxkf377O7uMUhGwtkoEky\/YO+6dK3XNPiaKST3bvN58tt9uHO0eNtlxa7fFWs2j4wP8+\/CYtVqHx\/DJ3t7RcY4GcpV10gQMJBn1KK8ZTUDmcS1YT94Ikwxt8prpCSCVbjAZsYhHSgtP2Xxrk129kZMyT6YOZRBI++Dm9tQTnmRKLmX6hP3tRPD\/zTYEz1Ha8O1N9kfWEodsh23s4Y\/N3X36B\/9sMgfswprbrV+m3WO\/3WhuN2Htj9jR9iH8H4bZ2t5lrcPtF9Pjr5SSwqWznKfI2MdRRbASetrJjSSnk1W9CKABJOSshh2Rib6YUR9UG3XJ3H8K8JckBpUIUjqbPAmCgEqwBLF6wVSUYB8v25px2C0Q1wIUa9rnEUOAc\/qmwTpZagAolE5xDyJHA+OeJ+AfqQl4ohfJrvQ47A0xFvyKUoS7gGfVjUh4EBhljQ3oE5IvpyVRRbxiB9tHDaYStnfwndnkRN4\/C2DzymJ6d5vR3pYIjZsH\/PYhEvAwbhMh19duQ3G7oydYR6QDAQ3hxwr+SixeB7fAHDLyZQIKnHUSHnl93Gbyjn2pY57Ch\/CawHkCXVJ8Al\/sQPP9kCfXTAJNomDI+txsXQrHROj27EPnV2gby1V\/WyB\/YNcDICbQuIM0jbrSx50c340ThUQFSkjUeAkODZqOE1DBxYZpxgrT\/1yewa9ZiFTKAh\/bDTMYeIgmABIO2oBxcxbguBI2UAkRS4s03x\/d\/v529\/RHGHoomPgSB1xGuFJ7zZeRamDnlhJKUQ\/bzD6L1kkWQ2Pw+tgzpO2mWLhLi5Zyg5t+RpAkMO4b\/KqbqJAm\/JPUGQ9+hlFr9tO7BhskMk0FIpywNkGbtFVv5NMr0LlByoPrRr5uGYKjAAn6stffCsQNWEgBj3oZ8ikwVBak2tCoxMtIthDW5AaEhHdkINMh9hZnum8YTeDDrJslSBljpCimsXMW8wS4Sng807SuvYSHIQ4BO4nY5es3MGKZ9vENi\/SyhRg1W2DRMW\/oBaLBhlIEwKy0lnoguyic0E5KwzO4LlqZVckxZ4qFBw4FpoP5hcReioGIsN8yFB6FRqORMz0EmQ9f4s9D2wi+y7VETQCTBRWRi4szsYqvYUuGhVcRcONZNDRLys1uHYgv+CNnNzJJYf1ARj34HskNBBqyH+RpJATiZspTbAq4trSE966U5XmSNzcTXGFoqq8G2NCfGLvCp0kcpdaZsArsB2gwEd1X3\/TTND7Z2RkMBtuo77ZV0tvmyY52LKN3m63mzg0IpdI7lzgNpB\/M63v+fc5X3\/\/07nsZfS9TlOk\/\/V2\/6r6P\/33\/P\/TPb292D7LW4V\/\/8G1z7+jl369f7V19\/tG7\/PvZN6d\/Bk2Y+Ip9kl4fmMNQ9S\/8Bil5niWJiiSMOpcDjsoLV3yAkeD8lCjsEzOXSqDrjHQMvJOY37QAwqAaRn35w05H+UOQ7X4aBqck6v8\/\" \/> \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>Pat-a-cake, pat-a-cake Baker&#8217;s man, Build me a JIT as fast as you can&#8230; So how does one write a just-in-time compiler (or JIT for short)? First, why write a JIT? Essentially dynamic languages defer certain performance-critical computations to run-time. These languages are &quot;late-bound&quot;. Type information is kept in objects themselves and this type information is [&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\/97"}],"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=97"}],"version-history":[{"count":5,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":153,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/97\/revisions\/153"}],"wp:attachment":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}