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 = &_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, "orc_add2_rshift_add_s16_22_op");<br>
     orc_program_set_backup_function (p, _backup_orc_add2_rshift_add_s16_22_op);<br>     orc_program_add_destination (p, 2, "d1");<br>     orc_program_add_source (p, 2, "s1");<br>     orc_program_add_source (p, 2, "s2");<br>
     orc_program_add_source (p, 2, "s3");<br>     orc_program_add_constant (p, 2, 2, "c1");<br>     orc_program_add_constant (p, 2, 2, "c2");<br>     orc_program_add_temporary (p, 2, "t1");<br>
<br>Â Â Â Â Â orc_program_append (p, "addw", ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3);<br>Â Â Â Â Â orc_program_append (p, "addw", ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1);<br>Â Â Â Â Â orc_program_append (p, "shrsw", ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2);<br>
     orc_program_append (p, "addw", 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->program = p;<br>
<br>Â ex->n = n;<br>Â ex->arrays[ORC_VAR_D1] = d1;<br>Â ex->arrays[ORC_VAR_S1] = (void *)s1;<br>Â ex->arrays[ORC_VAR_S2] = (void *)s2;<br>Â ex->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"><<a href="mailto:ontologiae@gmail.com">ontologiae@gmail.com</a>></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"><<a href="mailto:nicolas.boulay@gmail.com" target="_blank">nicolas.boulay@gmail.com</a>></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>