static int sum_square_diff_u8 (uint8_t * s1, uint8_t * s2, int n) { #ifndef HAVE_ORC int sum = 0; int i; int x; for (i = 0; i < n; i++) { x = s1[i] - s2[i]; sum += x * x; } return sum; #else static OrcProgram *p = NULL; OrcExecutor *ex; int val; if (p == NULL) { OrcCompileResult ret; p = orc_program_new_ass (4, 1, 1); orc_program_add_temporary (p, 2, "t1"); orc_program_add_temporary (p, 2, "t2"); orc_program_add_temporary (p, 4, "t3"); orc_program_append_ds_str (p, "convubw", "t1", "s1"); orc_program_append_ds_str (p, "convubw", "t2", "s2"); orc_program_append_str (p, "subw", "t1", "t1", "t2"); orc_program_append_str (p, "mullw", "t1", "t1", "t1"); orc_program_append_ds_str (p, "convuwl", "t3", "t1"); orc_program_append_ds_str (p, "accl", "a1", "t3"); ret = orc_program_compile (p); if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL (ret)) { GST_ERROR ("Orc compiler failure"); return 0; } } ex = orc_executor_new (p); orc_executor_set_n (ex, n); orc_executor_set_array_str (ex, "s1", s1); orc_executor_set_array_str (ex, "s2", s2); orc_executor_run (ex); val = orc_executor_get_accumulator (ex, 0); orc_executor_free (ex); return val; #endif }
void vips_vector_asm2( VipsVector *vector, const char *op, const char *a, const char *b ) { vector->n_instruction += 1; #ifdef DEBUG printf( " %s %s %s\n", op, a, b ); #endif /*DEBUG*/ #ifdef HAVE_ORC orc_program_append_ds_str( vector->program, op, a, b ); #endif /*HAVE_ORC*/ }
void vips_vector_asm2( VipsVector *vector, const char *op, const char *a, const char *b ) { vector->n_instruction += 1; #ifdef DEBUG printf( " %s %s %s\n", op, a, b ); #endif /*DEBUG*/ #ifdef HAVE_ORC #ifdef DEBUG_TRACE printf( "orc_program_append_ds_str( %s, \"%s\", \"%s\", \"%s\" );\n", vector->unique_name, op, a, b ); #endif /*DEBUG_TRACE*/ orc_program_append_ds_str( vector->program, op, a, b ); #endif /*HAVE_ORC*/ }