Example of code (from Dirac) using orc :<br><br>void<br>orc_add2_rshift_add_s16_22_op (int16_t * d1, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n)<br>{<br>  OrcExecutor _ex, *ex = &amp;_ex;<br>  static int p_inited = 0;<br>

  static OrcProgram *p = 0;<br><br>  if (!p_inited) {<br>    orc_once_mutex_lock ();<br>    if (!p_inited) {<br>      OrcCompileResult result;<br><br>      p = orc_program_new ();<br>      orc_program_set_name (p, &quot;orc_add2_rshift_add_s16_22_op&quot;);<br>

      orc_program_set_backup_function (p, _backup_orc_add2_rshift_add_s16_22_op);<br>      orc_program_add_destination (p, 2, &quot;d1&quot;);<br>      orc_program_add_source (p, 2, &quot;s1&quot;);<br>      orc_program_add_source (p, 2, &quot;s2&quot;);<br>

      orc_program_add_source (p, 2, &quot;s3&quot;);<br>      orc_program_add_constant (p, 2, 2, &quot;c1&quot;);<br>      orc_program_add_constant (p, 2, 2, &quot;c2&quot;);<br>      orc_program_add_temporary (p, 2, &quot;t1&quot;);<br>

<br>      orc_program_append (p, &quot;addw&quot;, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3);<br>      orc_program_append (p, &quot;addw&quot;, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1);<br>      orc_program_append (p, &quot;shrsw&quot;, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2);<br>

      orc_program_append (p, &quot;addw&quot;, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1);<br><br>      result = orc_program_compile (p);<br>    }<br>    p_inited = TRUE;<br>    orc_once_mutex_unlock ();<br>  }<br>  ex-&gt;program = p;<br>

<br>  ex-&gt;n = n;<br>  ex-&gt;arrays[ORC_VAR_D1] = d1;<br>  ex-&gt;arrays[ORC_VAR_S1] = (void *)s1;<br>  ex-&gt;arrays[ORC_VAR_S2] = (void *)s2;<br>  ex-&gt;arrays[ORC_VAR_S3] = (void *)s3;<br><br>  orc_executor_run (ex);<br>

}<br><br><div class="gmail_quote">2010/3/5 Pierre-Alexandre Voye <span dir="ltr">&lt;<a href="mailto:ontologiae@gmail.com">ontologiae@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

So orc is an assembler with speciifc language which produce code at compile time, or at runtime for ARM, SSE, MMX, Altivec, etc...:<br><a href="http://www.schleef.org/orc/documentation/orc-concepts.html" target="_blank">http://www.schleef.org/orc/documentation/orc-concepts.html</a><br>


<br>Its language is a sort of special assembler : <br><a href="http://www.schleef.org/orc/documentation/orc-opcodes.html" target="_blank">http://www.schleef.org/orc/documentation/orc-opcodes.html</a><br><br><div class="gmail_quote">

2010/3/5 Nicolas Boulay <span dir="ltr">&lt;<a href="mailto:nicolas.boulay@gmail.com" target="_blank">nicolas.boulay@gmail.com</a>&gt;</span><div><div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">The liboil C library project have change to a generic vectorised<br>
assembler (at runtime or static).<br>
<br>
<a href="http://www.schleef.org/blog/category/orc/" target="_blank">http://www.schleef.org/blog/category/orc/</a><br>
<a href="http://code.entropywave.com/projects/orc/" target="_blank">http://code.entropywave.com/projects/orc/</a><br>
<br>
This is more generic than liboil but need more work to generate the pattern.<br>
<br>
Regards,<br>
Nicolas<br>
<br></blockquote></div></div></div></blockquote></div><br clear="all"><br>-- <br>---------------------<br>Isaac Project - <a href="http://www.lisaac.org/">http://www.lisaac.org/</a><br>