diff options
author | David Schleef <ds@schleef.org> | 2006-02-02 20:11:07 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2006-02-02 20:11:07 +0000 |
commit | eb94d0eb7fdfbc24669f984cb87fea5497472df9 (patch) | |
tree | a5de5fd4b5d834c97a27818c513523a9e0165522 | |
parent | d14fb56ab84532957842d95dba6e41de2be1cc80 (diff) |
* liboil/i386/wavelet.c:liboil_0_3_7
* liboil/liboilclasses.h:
* liboil/liboilfuncs-04.h:
* liboil/liboilfuncs.h:
* liboil/liboilmarshal.c:
* liboil/liboiltrampolines.c:
* liboil/ref/Makefile.am:
* liboil/ref/wavelet.c:
Revert wavelet stuff for release.
* testsuite/instruction/list-impls.c:
Fixes for HAVE_arch macros from a few days ago.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | liboil/i386/wavelet.c | 50 | ||||
-rw-r--r-- | liboil/liboilclasses.h | 16 | ||||
-rw-r--r-- | liboil/liboilfuncs-04.h | 16 | ||||
-rw-r--r-- | liboil/liboilfuncs.h | 48 | ||||
-rw-r--r-- | liboil/liboilmarshal.c | 6 | ||||
-rw-r--r-- | liboil/liboiltrampolines.c | 160 | ||||
-rw-r--r-- | liboil/ref/Makefile.am | 1 | ||||
-rw-r--r-- | liboil/ref/wavelet.c | 47 | ||||
-rw-r--r-- | testsuite/instruction/list-impls.c | 4 |
10 files changed, 101 insertions, 261 deletions
@@ -1,3 +1,17 @@ +2006-02-02 David Schleef <ds@schleef.org> + + * liboil/i386/wavelet.c: + * liboil/liboilclasses.h: + * liboil/liboilfuncs-04.h: + * liboil/liboilfuncs.h: + * liboil/liboilmarshal.c: + * liboil/liboiltrampolines.c: + * liboil/ref/Makefile.am: + * liboil/ref/wavelet.c: + Revert wavelet stuff for release. + * testsuite/instruction/list-impls.c: + Fixes for HAVE_arch macros from a few days ago. + 2006-01-30 David Schleef <ds@schleef.org> * testsuite/mmx_engine.c: Add SSE2 diff --git a/liboil/i386/wavelet.c b/liboil/i386/wavelet.c index fdb6ca2..9bd799a 100644 --- a/liboil/i386/wavelet.c +++ b/liboil/i386/wavelet.c @@ -321,3 +321,53 @@ interleave_c (int16_t *d_2xn, int16_t *s_2xn, int n) } OIL_DEFINE_IMPL (interleave_c, interleave); + +#ifdef ENABLE_BROKEN_IMPLS +void +lift_add_mult_shift12_i386_mmx (int16_t *d, int16_t *s1, int16_t *s2, + int16_t *s3, int16_t *s4, int n) +{ + uint32_t val = *s4; + + while (n&3) { + d[0] = s1[0] + ((s4[0]*(s2[0] + s3[0]))>>12); + d++; + s1++; + s2++; + s3++; + n--; + } + if (n==0) return; + + val = ((*(uint16_t *)s4)<<16) | (*(uint16_t *)s4); + n>>=2; + asm volatile ("\n" + " mov %4, %%ecx\n" + " movd %%ecx, %%mm7\n" + " punpcklwd %%mm7, %%mm7\n" + " mov %5, %%ecx\n" + "1:\n" + " movq 0(%2), %%mm0\n" + " paddsw 0(%3), %%mm0\n" + " movq %%mm0, %%mm1\n" + " pmullw %%mm7, %%mm0\n" + " pmulhw %%mm7, %%mm1\n" + " psrlw $12, %%mm0\n" + " psllw $4, %%mm1\n" + " por %%mm1, %%mm0\n" + " paddsw 0(%1), %%mm0\n" + " movq %%mm0, 0(%0)\n" + " decl %%ecx\n" + " add $8, %0\n" + " add $8, %1\n" + " add $8, %2\n" + " add $8, %3\n" + " jne 1b\n" + " emms\n" + : "+r" (d), "+r" (s1), "+r" (s2), "+r" (s3) + : "m" (val), "m" (n) + : "ecx"); +} +OIL_DEFINE_IMPL (lift_add_mult_shift12_i386_mmx, lift_add_mult_shift12); +#endif + diff --git a/liboil/liboilclasses.h b/liboil/liboilclasses.h index 9a8f964..68adaf7 100644 --- a/liboil/liboilclasses.h +++ b/liboil/liboilclasses.h @@ -225,7 +225,6 @@ OIL_DECLARE_CLASS(convert_u8_u32); OIL_DECLARE_CLASS(copy8x8_u8); OIL_DECLARE_CLASS(copy_u8); OIL_DECLARE_CLASS(dct36_f32); -OIL_DECLARE_CLASS(deinterleave); OIL_DECLARE_CLASS(dequantize8x8_s16); OIL_DECLARE_CLASS(diff8x8_average_s16_u8); OIL_DECLARE_CLASS(diff8x8_const128_s16_u8); @@ -250,14 +249,7 @@ OIL_DECLARE_CLASS(idct8x8theora_s16); OIL_DECLARE_CLASS(imdct12_f64); OIL_DECLARE_CLASS(imdct32_f32); OIL_DECLARE_CLASS(imdct36_f64); -OIL_DECLARE_CLASS(interleave); OIL_DECLARE_CLASS(inverse_f32); -OIL_DECLARE_CLASS(lift_add_mult); -OIL_DECLARE_CLASS(lift_add_shift1); -OIL_DECLARE_CLASS(lift_add_shift2); -OIL_DECLARE_CLASS(lift_sub_mult); -OIL_DECLARE_CLASS(lift_sub_shift1); -OIL_DECLARE_CLASS(lift_sub_shift2); OIL_DECLARE_CLASS(maximum_f32); OIL_DECLARE_CLASS(md5); OIL_DECLARE_CLASS(mdct12_f64); @@ -345,20 +337,12 @@ OIL_DECLARE_CLASS(splat_u32); OIL_DECLARE_CLASS(splat_u32_ns); OIL_DECLARE_CLASS(splat_u8); OIL_DECLARE_CLASS(splat_u8_ns); -OIL_DECLARE_CLASS(split_135); -OIL_DECLARE_CLASS(split_53); -OIL_DECLARE_CLASS(split_approx97); -OIL_DECLARE_CLASS(split_daub97); OIL_DECLARE_CLASS(squaresum_f64); OIL_DECLARE_CLASS(squaresum_shifted_s16); OIL_DECLARE_CLASS(subtract_f32); OIL_DECLARE_CLASS(sum_f64); OIL_DECLARE_CLASS(swab_u16); OIL_DECLARE_CLASS(swab_u32); -OIL_DECLARE_CLASS(synth_135); -OIL_DECLARE_CLASS(synth_53); -OIL_DECLARE_CLASS(synth_approx97); -OIL_DECLARE_CLASS(synth_daub97); OIL_DECLARE_CLASS(tablelookup_u8); OIL_DECLARE_CLASS(testzero_u8); OIL_DECLARE_CLASS(trans8x8_f64); diff --git a/liboil/liboilfuncs-04.h b/liboil/liboilfuncs-04.h index c0144be..48781cb 100644 --- a/liboil/liboilfuncs-04.h +++ b/liboil/liboilfuncs-04.h @@ -225,7 +225,6 @@ void oil_convert_u8_u32 (uint8_t * dest, const uint32_t * src, int n); void oil_copy8x8_u8 (uint8_t * d_8x8, int ds, const uint8_t * s_8x8, int ss); void oil_copy_u8 (uint8_t * dest, const uint8_t * src, int n); void oil_dct36_f32 (float * d_36, int dstr, const float * s_36, int sstr); -void oil_deinterleave (int16_t * d_2xn, const int16_t * s_2xn, int n); void oil_dequantize8x8_s16 (int16_t * d_8x8, int dstr, const int16_t * s1_8x8, int sstr1, const int16_t * s2_8x8, int sstr2); void oil_diff8x8_average_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1, const uint8_t * s2_8x8, int ss2, const uint8_t * s3_8x8, int ss3); void oil_diff8x8_const128_s16_u8 (int16_t * d_8x8, const uint8_t * s1_8x8, int ss1); @@ -250,14 +249,7 @@ void oil_idct8x8theora_s16 (int16_t * d_8x8, int dstr, const int16_t * s_8x8, in void oil_imdct12_f64 (double * d_12, const double * s_6); void oil_imdct32_f32 (float * d_32, const float * s_32); void oil_imdct36_f64 (double * d_36, const double * s_18); -void oil_interleave (int16_t * d_2xn, const int16_t * s_2xn, int n); void oil_inverse_f32 (float * d, const float * s, int n); -void oil_lift_add_mult (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n); -void oil_lift_add_shift1 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -void oil_lift_add_shift2 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -void oil_lift_sub_mult (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n); -void oil_lift_sub_shift1 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -void oil_lift_sub_shift2 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); void oil_maximum_f32 (float * d, const float * s1, const float * s2, int n); void oil_md5 (uint32_t * i_4, const uint32_t * s_16); void oil_mdct12_f64 (double * d_6, const double * s_12); @@ -345,20 +337,12 @@ void oil_splat_u32 (uint32_t * dest, int dstr, const uint32_t * s1_1, int n); void oil_splat_u32_ns (uint32_t * dest, const uint32_t * s1_1, int n); void oil_splat_u8 (uint8_t * dest, int dstr, const uint8_t * s1_1, int n); void oil_splat_u8_ns (uint8_t * dest, const uint8_t * s1_1, int n); -void oil_split_135 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_split_53 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_split_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_split_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n); void oil_squaresum_f64 (double * d, const double * s, int n); void oil_squaresum_shifted_s16 (uint32_t * d, const int16_t * s, int n); void oil_subtract_f32 (float * d, const float * s1, const float * s2, int n); void oil_sum_f64 (double * d_1, const double * s, int sstr, int n); void oil_swab_u16 (uint16_t * d_n, const uint16_t * s_n, int n); void oil_swab_u32 (uint32_t * d_n, const uint32_t * s_n, int n); -void oil_synth_135 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_synth_53 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_synth_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n); -void oil_synth_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n); void oil_tablelookup_u8 (uint8_t * d, int ds, const uint8_t * s1, int ss1, const uint8_t * s2_256, int ss2, int n); void oil_testzero_u8 (uint32_t * d_1, const uint8_t * s, int n); void oil_trans8x8_f64 (double * d_8x8, int ds, const double * s_8x8, int ss); diff --git a/liboil/liboilfuncs.h b/liboil/liboilfuncs.h index f8a6216..aa0132f 100644 --- a/liboil/liboilfuncs.h +++ b/liboil/liboilfuncs.h @@ -603,9 +603,6 @@ typedef void (*_oil_type_copy_u8)(uint8_t * dest, const uint8_t * src, int n); extern OilFunctionClass *oil_function_class_ptr_dct36_f32; typedef void (*_oil_type_dct36_f32)(float * d_36, int dstr, const float * s_36, int sstr); #define oil_dct36_f32 ((_oil_type_dct36_f32)(*(void **)oil_function_class_ptr_dct36_f32)) -extern OilFunctionClass *oil_function_class_ptr_deinterleave; -typedef void (*_oil_type_deinterleave)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_deinterleave ((_oil_type_deinterleave)(*(void **)oil_function_class_ptr_deinterleave)) extern OilFunctionClass *oil_function_class_ptr_dequantize8x8_s16; typedef void (*_oil_type_dequantize8x8_s16)(int16_t * d_8x8, int dstr, const int16_t * s1_8x8, int sstr1, const int16_t * s2_8x8, int sstr2); #define oil_dequantize8x8_s16 ((_oil_type_dequantize8x8_s16)(*(void **)oil_function_class_ptr_dequantize8x8_s16)) @@ -678,30 +675,9 @@ typedef void (*_oil_type_imdct32_f32)(float * d_32, const float * s_32); extern OilFunctionClass *oil_function_class_ptr_imdct36_f64; typedef void (*_oil_type_imdct36_f64)(double * d_36, const double * s_18); #define oil_imdct36_f64 ((_oil_type_imdct36_f64)(*(void **)oil_function_class_ptr_imdct36_f64)) -extern OilFunctionClass *oil_function_class_ptr_interleave; -typedef void (*_oil_type_interleave)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_interleave ((_oil_type_interleave)(*(void **)oil_function_class_ptr_interleave)) extern OilFunctionClass *oil_function_class_ptr_inverse_f32; typedef void (*_oil_type_inverse_f32)(float * d, const float * s, int n); #define oil_inverse_f32 ((_oil_type_inverse_f32)(*(void **)oil_function_class_ptr_inverse_f32)) -extern OilFunctionClass *oil_function_class_ptr_lift_add_mult; -typedef void (*_oil_type_lift_add_mult)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n); -#define oil_lift_add_mult ((_oil_type_lift_add_mult)(*(void **)oil_function_class_ptr_lift_add_mult)) -extern OilFunctionClass *oil_function_class_ptr_lift_add_shift1; -typedef void (*_oil_type_lift_add_shift1)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -#define oil_lift_add_shift1 ((_oil_type_lift_add_shift1)(*(void **)oil_function_class_ptr_lift_add_shift1)) -extern OilFunctionClass *oil_function_class_ptr_lift_add_shift2; -typedef void (*_oil_type_lift_add_shift2)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -#define oil_lift_add_shift2 ((_oil_type_lift_add_shift2)(*(void **)oil_function_class_ptr_lift_add_shift2)) -extern OilFunctionClass *oil_function_class_ptr_lift_sub_mult; -typedef void (*_oil_type_lift_sub_mult)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n); -#define oil_lift_sub_mult ((_oil_type_lift_sub_mult)(*(void **)oil_function_class_ptr_lift_sub_mult)) -extern OilFunctionClass *oil_function_class_ptr_lift_sub_shift1; -typedef void (*_oil_type_lift_sub_shift1)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -#define oil_lift_sub_shift1 ((_oil_type_lift_sub_shift1)(*(void **)oil_function_class_ptr_lift_sub_shift1)) -extern OilFunctionClass *oil_function_class_ptr_lift_sub_shift2; -typedef void (*_oil_type_lift_sub_shift2)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n); -#define oil_lift_sub_shift2 ((_oil_type_lift_sub_shift2)(*(void **)oil_function_class_ptr_lift_sub_shift2)) extern OilFunctionClass *oil_function_class_ptr_maximum_f32; typedef void (*_oil_type_maximum_f32)(float * d, const float * s1, const float * s2, int n); #define oil_maximum_f32 ((_oil_type_maximum_f32)(*(void **)oil_function_class_ptr_maximum_f32)) @@ -963,18 +939,6 @@ typedef void (*_oil_type_splat_u8)(uint8_t * dest, int dstr, const uint8_t * s1_ extern OilFunctionClass *oil_function_class_ptr_splat_u8_ns; typedef void (*_oil_type_splat_u8_ns)(uint8_t * dest, const uint8_t * s1_1, int n); #define oil_splat_u8_ns ((_oil_type_splat_u8_ns)(*(void **)oil_function_class_ptr_splat_u8_ns)) -extern OilFunctionClass *oil_function_class_ptr_split_135; -typedef void (*_oil_type_split_135)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_split_135 ((_oil_type_split_135)(*(void **)oil_function_class_ptr_split_135)) -extern OilFunctionClass *oil_function_class_ptr_split_53; -typedef void (*_oil_type_split_53)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_split_53 ((_oil_type_split_53)(*(void **)oil_function_class_ptr_split_53)) -extern OilFunctionClass *oil_function_class_ptr_split_approx97; -typedef void (*_oil_type_split_approx97)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_split_approx97 ((_oil_type_split_approx97)(*(void **)oil_function_class_ptr_split_approx97)) -extern OilFunctionClass *oil_function_class_ptr_split_daub97; -typedef void (*_oil_type_split_daub97)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_split_daub97 ((_oil_type_split_daub97)(*(void **)oil_function_class_ptr_split_daub97)) extern OilFunctionClass *oil_function_class_ptr_squaresum_f64; typedef void (*_oil_type_squaresum_f64)(double * d, const double * s, int n); #define oil_squaresum_f64 ((_oil_type_squaresum_f64)(*(void **)oil_function_class_ptr_squaresum_f64)) @@ -993,18 +957,6 @@ typedef void (*_oil_type_swab_u16)(uint16_t * d_n, const uint16_t * s_n, int n); extern OilFunctionClass *oil_function_class_ptr_swab_u32; typedef void (*_oil_type_swab_u32)(uint32_t * d_n, const uint32_t * s_n, int n); #define oil_swab_u32 ((_oil_type_swab_u32)(*(void **)oil_function_class_ptr_swab_u32)) -extern OilFunctionClass *oil_function_class_ptr_synth_135; -typedef void (*_oil_type_synth_135)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_synth_135 ((_oil_type_synth_135)(*(void **)oil_function_class_ptr_synth_135)) -extern OilFunctionClass *oil_function_class_ptr_synth_53; -typedef void (*_oil_type_synth_53)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_synth_53 ((_oil_type_synth_53)(*(void **)oil_function_class_ptr_synth_53)) -extern OilFunctionClass *oil_function_class_ptr_synth_approx97; -typedef void (*_oil_type_synth_approx97)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_synth_approx97 ((_oil_type_synth_approx97)(*(void **)oil_function_class_ptr_synth_approx97)) -extern OilFunctionClass *oil_function_class_ptr_synth_daub97; -typedef void (*_oil_type_synth_daub97)(int16_t * d_2xn, const int16_t * s_2xn, int n); -#define oil_synth_daub97 ((_oil_type_synth_daub97)(*(void **)oil_function_class_ptr_synth_daub97)) extern OilFunctionClass *oil_function_class_ptr_tablelookup_u8; typedef void (*_oil_type_tablelookup_u8)(uint8_t * d, int ds, const uint8_t * s1, int ss1, const uint8_t * s2_256, int ss2, int n); #define oil_tablelookup_u8 ((_oil_type_tablelookup_u8)(*(void **)oil_function_class_ptr_tablelookup_u8)) diff --git a/liboil/liboilmarshal.c b/liboil/liboilmarshal.c index 88c7e23..d728b03 100644 --- a/liboil/liboilmarshal.c +++ b/liboil/liboilmarshal.c @@ -130,12 +130,6 @@ _oil_test_marshal_function (void *func, unsigned long *args, int n_args, ((void *)args[0],(void *)args[1]); oil_profile_stop (prof); break; - case 0x007e: - oil_profile_start (prof); - ((void (*)(void *,void *,void *,void *,void *,int))func) - ((void *)args[0],(void *)args[1],(void *)args[2],(void *)args[3],(void *)args[4],(int)args[5]); - oil_profile_stop (prof); - break; case 0x003e: oil_profile_start (prof); ((void (*)(void *,void *,void *,void *,int))func) diff --git a/liboil/liboiltrampolines.c b/liboil/liboiltrampolines.c index d633c82..d21d118 100644 --- a/liboil/liboiltrampolines.c +++ b/liboil/liboiltrampolines.c @@ -1921,16 +1921,6 @@ oil_dct36_f32 (float * d_36, int dstr, const float * s_36, int sstr) ((void (*)(float * d_36, int dstr, const float * s_36, int sstr))(_oil_function_class_dct36_f32.func))(d_36, dstr, s_36, sstr); } -#undef oil_deinterleave -void -oil_deinterleave (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_deinterleave.func == NULL) { - oil_class_optimize (&_oil_function_class_deinterleave); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_deinterleave.func))(d_2xn, s_2xn, n); -} - #undef oil_dequantize8x8_s16 void oil_dequantize8x8_s16 (int16_t * d_8x8, int dstr, const int16_t * s1_8x8, int sstr1, const int16_t * s2_8x8, int sstr2) @@ -2171,16 +2161,6 @@ oil_imdct36_f64 (double * d_36, const double * s_18) ((void (*)(double * d_36, const double * s_18))(_oil_function_class_imdct36_f64.func))(d_36, s_18); } -#undef oil_interleave -void -oil_interleave (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_interleave.func == NULL) { - oil_class_optimize (&_oil_function_class_interleave); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_interleave.func))(d_2xn, s_2xn, n); -} - #undef oil_inverse_f32 void oil_inverse_f32 (float * d, const float * s, int n) @@ -2191,66 +2171,6 @@ oil_inverse_f32 (float * d, const float * s, int n) ((void (*)(float * d, const float * s, int n))(_oil_function_class_inverse_f32.func))(d, s, n); } -#undef oil_lift_add_mult -void -oil_lift_add_mult (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n) -{ - if (_oil_function_class_lift_add_mult.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_add_mult); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n))(_oil_function_class_lift_add_mult.func))(d, s1, s2, s3, s4_2, n); -} - -#undef oil_lift_add_shift1 -void -oil_lift_add_shift1 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n) -{ - if (_oil_function_class_lift_add_shift1.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_add_shift1); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n))(_oil_function_class_lift_add_shift1.func))(d, s1, s2, s3, n); -} - -#undef oil_lift_add_shift2 -void -oil_lift_add_shift2 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n) -{ - if (_oil_function_class_lift_add_shift2.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_add_shift2); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n))(_oil_function_class_lift_add_shift2.func))(d, s1, s2, s3, n); -} - -#undef oil_lift_sub_mult -void -oil_lift_sub_mult (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n) -{ - if (_oil_function_class_lift_sub_mult.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_sub_mult); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, const int16_t * s4_2, int n))(_oil_function_class_lift_sub_mult.func))(d, s1, s2, s3, s4_2, n); -} - -#undef oil_lift_sub_shift1 -void -oil_lift_sub_shift1 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n) -{ - if (_oil_function_class_lift_sub_shift1.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_sub_shift1); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n))(_oil_function_class_lift_sub_shift1.func))(d, s1, s2, s3, n); -} - -#undef oil_lift_sub_shift2 -void -oil_lift_sub_shift2 (int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n) -{ - if (_oil_function_class_lift_sub_shift2.func == NULL) { - oil_class_optimize (&_oil_function_class_lift_sub_shift2); - } - ((void (*)(int16_t * d, const int16_t * s1, const int16_t * s2, const int16_t * s3, int n))(_oil_function_class_lift_sub_shift2.func))(d, s1, s2, s3, n); -} - #undef oil_maximum_f32 void oil_maximum_f32 (float * d, const float * s1, const float * s2, int n) @@ -3121,46 +3041,6 @@ oil_splat_u8_ns (uint8_t * dest, const uint8_t * s1_1, int n) ((void (*)(uint8_t * dest, const uint8_t * s1_1, int n))(_oil_function_class_splat_u8_ns.func))(dest, s1_1, n); } -#undef oil_split_135 -void -oil_split_135 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_split_135.func == NULL) { - oil_class_optimize (&_oil_function_class_split_135); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_split_135.func))(d_2xn, s_2xn, n); -} - -#undef oil_split_53 -void -oil_split_53 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_split_53.func == NULL) { - oil_class_optimize (&_oil_function_class_split_53); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_split_53.func))(d_2xn, s_2xn, n); -} - -#undef oil_split_approx97 -void -oil_split_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_split_approx97.func == NULL) { - oil_class_optimize (&_oil_function_class_split_approx97); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_split_approx97.func))(d_2xn, s_2xn, n); -} - -#undef oil_split_daub97 -void -oil_split_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_split_daub97.func == NULL) { - oil_class_optimize (&_oil_function_class_split_daub97); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_split_daub97.func))(d_2xn, s_2xn, n); -} - #undef oil_squaresum_f64 void oil_squaresum_f64 (double * d, const double * s, int n) @@ -3221,46 +3101,6 @@ oil_swab_u32 (uint32_t * d_n, const uint32_t * s_n, int n) ((void (*)(uint32_t * d_n, const uint32_t * s_n, int n))(_oil_function_class_swab_u32.func))(d_n, s_n, n); } -#undef oil_synth_135 -void -oil_synth_135 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_synth_135.func == NULL) { - oil_class_optimize (&_oil_function_class_synth_135); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_synth_135.func))(d_2xn, s_2xn, n); -} - -#undef oil_synth_53 -void -oil_synth_53 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_synth_53.func == NULL) { - oil_class_optimize (&_oil_function_class_synth_53); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_synth_53.func))(d_2xn, s_2xn, n); -} - -#undef oil_synth_approx97 -void -oil_synth_approx97 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_synth_approx97.func == NULL) { - oil_class_optimize (&_oil_function_class_synth_approx97); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_synth_approx97.func))(d_2xn, s_2xn, n); -} - -#undef oil_synth_daub97 -void -oil_synth_daub97 (int16_t * d_2xn, const int16_t * s_2xn, int n) -{ - if (_oil_function_class_synth_daub97.func == NULL) { - oil_class_optimize (&_oil_function_class_synth_daub97); - } - ((void (*)(int16_t * d_2xn, const int16_t * s_2xn, int n))(_oil_function_class_synth_daub97.func))(d_2xn, s_2xn, n); -} - #undef oil_tablelookup_u8 void oil_tablelookup_u8 (uint8_t * d, int ds, const uint8_t * s1, int ss1, const uint8_t * s2_256, int ss2, int n) diff --git a/liboil/ref/Makefile.am b/liboil/ref/Makefile.am index cadb191..eaef15a 100644 --- a/liboil/ref/Makefile.am +++ b/liboil/ref/Makefile.am @@ -36,7 +36,6 @@ c_sources = \ sum_f64.c \ swab.c \ trans8x8.c \ - wavelet.c \ yuv.c libref_la_SOURCES = \ diff --git a/liboil/ref/wavelet.c b/liboil/ref/wavelet.c index 6656983..abb3262 100644 --- a/liboil/ref/wavelet.c +++ b/liboil/ref/wavelet.c @@ -347,10 +347,14 @@ OIL_DEFINE_CLASS_FULL (lift_add_shift2, "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int n", lift_test); OIL_DEFINE_CLASS_FULL (lift_sub_shift2, "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int n", lift_test); -OIL_DEFINE_CLASS_FULL (lift_add_mult, - "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4_2, int n", lift_test); -OIL_DEFINE_CLASS_FULL (lift_sub_mult, - "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4_2, int n", lift_test); +OIL_DEFINE_CLASS_FULL (lift_add_mult_shift12, + "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4_1, int n", lift_test); +OIL_DEFINE_CLASS_FULL (lift_sub_mult_shift12, + "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4_1, int n", lift_test); +OIL_DEFINE_CLASS_FULL (lift_add_135, + "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int16_t *s5, int n", lift_test); +OIL_DEFINE_CLASS_FULL (lift_sub_135, + "int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int16_t *s5, int n", lift_test); void @@ -394,22 +398,45 @@ lift_sub_shift2_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int n) OIL_DEFINE_IMPL_REF (lift_sub_shift2_ref, lift_sub_shift2); void -lift_add_mult_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int n) +lift_add_mult_shift12_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int n) { int i; for(i=0;i<n;i++) { - d[i] = s1[i] + ((s4[0]*s2[i] + s4[1]*s3[i])>>16); + d[i] = s1[i] + ((s4[0]*(s2[i] + s3[i]))>>12); } } -OIL_DEFINE_IMPL_REF (lift_add_mult_ref, lift_add_mult); +OIL_DEFINE_IMPL_REF (lift_add_mult_shift12_ref, lift_add_mult_shift12); void -lift_sub_mult_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int n) +lift_sub_mult_shift12_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, int16_t *s4, int n) { int i; for(i=0;i<n;i++) { - d[i] = s1[i] + ((s4[0]*s2[i] + s4[1]*s3[i])>>16); + d[i] = s1[i] - ((s4[0]*(s2[i] + s3[i]))>>12); } } -OIL_DEFINE_IMPL_REF (lift_sub_mult_ref, lift_sub_mult); +OIL_DEFINE_IMPL_REF (lift_sub_mult_shift12_ref, lift_sub_mult_shift12); + +void +lift_add_135_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, + int16_t *s4, int16_t *s5, int n) +{ + int i; + for(i=0;i<n;i++) { + d[i] = s1[i] + ((9*(s3[i-1] + s4[i+1]) - (s2[i-3] + s5[i+3])) >> 4); + } +} +OIL_DEFINE_IMPL_REF (lift_add_135_ref, lift_add_135); + +void +lift_sub_135_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, + int16_t *s4, int16_t *s5, int n) +{ + int i; + for(i=0;i<n;i++) { + d[i] = s1[i] - ((9*(s3[i-1] + s4[i+1]) - (s2[i-3] + s5[i+3])) >> 4); + } +} +OIL_DEFINE_IMPL_REF (lift_sub_135_ref, lift_sub_135); + diff --git a/testsuite/instruction/list-impls.c b/testsuite/instruction/list-impls.c index 33b22cb..02e79d1 100644 --- a/testsuite/instruction/list-impls.c +++ b/testsuite/instruction/list-impls.c @@ -56,7 +56,6 @@ main (int argc, char *argv[]) unsigned int flags = impl->flags; printf("%s:", impl->name); -#ifdef HAVE_GCC_I386 if (flags & OIL_IMPL_FLAG_SSE3) { flags |= OIL_IMPL_FLAG_SSE2; } @@ -70,10 +69,7 @@ main (int argc, char *argv[]) if (flags & OIL_IMPL_FLAG_MMXEXT) printf(" mmxext"); if (flags & OIL_IMPL_FLAG_SSE) printf(" sse"); if (flags & OIL_IMPL_FLAG_SSE2) printf(" sse2"); -#endif -#ifdef HAVE_GCC_PPC if (flags & OIL_IMPL_FLAG_ALTIVEC) printf(" altivec"); -#endif printf("\n"); } } |