2010/7/23 Stefan Behnel <span dir="ltr">&lt;<a href="mailto:stefan_ml@behnel.de" target="_blank">stefan_ml@behnel.de</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




stefan brunthaler, 23.07.2010 08:48:<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If we take for instance the BINARY_ADD instruction, the interpreter<br>
evaluates the actual operand types and chooses the matching operation<br>
implementation at runtime, i.e., operands that are unicode strings<br>
will be concatenated via unicode_concatenate, for float operands on<br>
the other hand, the interpreter would end up invoking float_add via<br>
binary_op1. Now, a very efficient way to achieve purely interpretative<br>
inline caching is to quicken the type-generic BINARY_ADD instruction<br>
to a type-dependent FLOAT_ADD instruction (this technique, i.e.,<br>
inline caching via quickening, is the primary contribution of my ECOOP<br>
paper). Hence, I have a very simple code generator, that generates<br>
type-dependent interpreter instructions in a pre-compile step of the<br>
interpreter, and uses runtime type information to quicken/rewrite<br>
instructions.<br>
Aside of the operators, I have implemented this quickening technique<br>
for FOR_ITER, COMPARE_OP and CALL_FUNCTION instructions.<br>

<br></blockquote></div>
This sounds like wpython (a CPython derivative with a wider set of byte code commands) could benefit from it.<br></blockquote><div><br></div><div>WPython 1.1 does it at compile time, if you enable the new &quot;experimental integer opcodes&quot; flag.<br>



</div><div><br></div><div><div>Similar optimizations were introduced with new opcodes for specialized string interpolation and joins, which are common operations in Python.</div><div><br></div>It also added a new opcode GET_GENERATOR which internally uses a faster function call, which is used also by (the modified) BUILD_CLASS for the same reason (cut some unnecessary checks and code).</div>


<div><br></div><div>Cesare</div>