summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2006-02-02 20:11:07 +0000
committerDavid Schleef <ds@schleef.org>2006-02-02 20:11:07 +0000
commiteb94d0eb7fdfbc24669f984cb87fea5497472df9 (patch)
treea5de5fd4b5d834c97a27818c513523a9e0165522
parentd14fb56ab84532957842d95dba6e41de2be1cc80 (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--ChangeLog14
-rw-r--r--liboil/i386/wavelet.c50
-rw-r--r--liboil/liboilclasses.h16
-rw-r--r--liboil/liboilfuncs-04.h16
-rw-r--r--liboil/liboilfuncs.h48
-rw-r--r--liboil/liboilmarshal.c6
-rw-r--r--liboil/liboiltrampolines.c160
-rw-r--r--liboil/ref/Makefile.am1
-rw-r--r--liboil/ref/wavelet.c47
-rw-r--r--testsuite/instruction/list-impls.c4
10 files changed, 101 insertions, 261 deletions
diff --git a/ChangeLog b/ChangeLog
index 5af70aa..9b37bea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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");
}
}