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>