summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2005-05-07 00:34:10 +0000
committerDavid Schleef <ds@schleef.org>2005-05-07 00:34:10 +0000
commit4b0e190913112ba01a34b618508ade10a227d124 (patch)
tree28027b98ecf5284b5427e85338aa5b2bb90c4034
parent780ba4be951d4a1d075dde750900fca414d78bfe (diff)
downloadliboil-4b0e190913112ba01a34b618508ade10a227d124.tar.gz
* examples/jpeg/jpeg.c: (jpeg_decoder_decode_entropy_segment):
Fix gcc-4.0 warning. * examples/report.c: (oil_print_class): print the chosen impl name * liboil/conv/conv_ref.c: remove some cruft, add scaleconv classes * liboil/dct/idct8x8_i386.c: (idct8x8_s16_mmx): Fix usage of ebx * liboil/liboil.h: add macro for trans8x8_s16 * liboil/liboilfuncs.h: update * liboil/md5/md5_i386.c: disable some stuff that gcc-4.0 doesn't like.
-rw-r--r--ChangeLog12
-rw-r--r--examples/jpeg/jpeg.c2
-rw-r--r--examples/report.c5
-rw-r--r--liboil/conv/conv_ref.c154
-rw-r--r--liboil/dct/idct8x8_i386.c7
-rw-r--r--liboil/liboil.h3
-rw-r--r--liboil/liboilfuncs.h80
-rw-r--r--liboil/md5/md5_i386.c14
8 files changed, 180 insertions, 97 deletions
diff --git a/ChangeLog b/ChangeLog
index 652880d..9737fda 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2005-05-06 David Schleef <ds@schleef.org>
+ * examples/jpeg/jpeg.c: (jpeg_decoder_decode_entropy_segment):
+ Fix gcc-4.0 warning.
+ * examples/report.c: (oil_print_class): print the chosen impl name
+ * liboil/conv/conv_ref.c: remove some cruft, add scaleconv classes
+ * liboil/dct/idct8x8_i386.c: (idct8x8_s16_mmx): Fix usage of ebx
+ * liboil/liboil.h: add macro for trans8x8_s16
+ * liboil/liboilfuncs.h: update
+ * liboil/md5/md5_i386.c: disable some stuff that gcc-4.0 doesn't
+ like.
+
+2005-05-06 David Schleef <ds@schleef.org>
+
* doc/xml/liboilfunction.xml: update
* examples/report.c: (oil_print_class): print whether fastest
implementation is due to alternate optimization flags
diff --git a/examples/jpeg/jpeg.c b/examples/jpeg/jpeg.c
index 82558e9..83bb3bf 100644
--- a/examples/jpeg/jpeg.c
+++ b/examples/jpeg/jpeg.c
@@ -731,7 +731,7 @@ jpeg_decoder_decode_entropy_segment (JpegDecoder * dec, bits_t * bits)
oil_unzigzag8x8_s16 (block, sizeof (short) * 8, block2,
sizeof (short) * 8);
oil_idct8x8_s16 (block2, sizeof (short) * 8, block, sizeof (short) * 8);
- oil_trans8x8_u16 (block, sizeof (short) * 8, block2, sizeof (short) * 8);
+ oil_trans8x8_s16 (block, sizeof (short) * 8, block2, sizeof (short) * 8);
ptr = dec->components[component_index].image +
x * dec->components[component_index].h_oversample +
diff --git a/examples/report.c b/examples/report.c
index 51eb6b8..108b563 100644
--- a/examples/report.c
+++ b/examples/report.c
@@ -147,11 +147,12 @@ static void
oil_print_class (OilFunctionClass *klass, int verbose)
{
- printf ("%-20s %-10g %-10g %-10.3g %s\n", klass->name,
+ printf ("%-20s %-10g %-10g %-10.3g %s %s\n", klass->name,
klass->reference_impl->profile_ave,
klass->chosen_impl->profile_ave,
klass->reference_impl->profile_ave/klass->chosen_impl->profile_ave,
- (klass->chosen_impl->flags & OIL_IMPL_FLAG_OPT)?"*":" "
+ (klass->chosen_impl->flags & OIL_IMPL_FLAG_OPT)?"*":" ",
+ klass->chosen_impl->name
);
}
diff --git a/liboil/conv/conv_ref.c b/liboil/conv/conv_ref.c
index cdedb9e..9de8fde 100644
--- a/liboil/conv/conv_ref.c
+++ b/liboil/conv/conv_ref.c
@@ -279,93 +279,71 @@ CLIPCONV_DEFINE_FLOAT_REF(u32,f64);
+#define SCALECONV_DEFINE_REF_RINT(desttype,srctype) \
+static void scaleconv_ ## desttype ## _ ## srctype ## _ref ( \
+ type_ ## desttype *dest, \
+ type_ ## srctype *src, \
+ int n, double *offset, double *multiplier) \
+{ \
+ int i; \
+ double x; \
+ for(i=0;i<n;i++){ \
+ x = *offset + *multiplier * src[i]; \
+ if(x<type_min_ ## desttype) x=type_min_ ## desttype; \
+ if(x>type_max_ ## desttype) x=type_max_ ## desttype; \
+ dest[i] = rint(x); \
+ } \
+} \
+OIL_DEFINE_CLASS(scaleconv_ ## desttype ## _ ## srctype, \
+ "type_" #desttype " *dest, " \
+ "type_" #srctype " *src, " \
+ "int n, double *s2_1, double *s3_1"); \
+OIL_DEFINE_IMPL_REF(scaleconv_ ## desttype ## _ ## srctype ## _ref, \
+ scaleconv_ ## desttype ## _ ## srctype)
-#if 0
-void conv_double_float_dstr(double *dest, float *src, int n, int dstr)
-{
- int i;
- void *d = dest;
- for(i=0;i<n;i++){
- (*(double *)d)=*src++;
- d += dstr;
- }
-}
-
-void conv_float_double_sstr(float *dest, double *src, int n, int sstr)
-{
- int i;
- void *s = src;
-
- for(i=0;i<n;i++){
- *dest++ = *(double *)s;
- s += sstr;
- }
-}
-#endif
-
-#ifdef unused
-static int get_type(const char *s)
-{
- static const char *typenames[8] = { "_s8", "_u8", "_s16", "_u16",
- "_s32", "_u32", "_f32", "_f64" };
- int i;
-
- for(i=0;i<8;i++){
- if(strncmp(s, typenames[i], strlen(typenames[i]))==0){
- return i;
- }
- }
-
- return 0;
-}
-#endif
-
-#ifdef unused
-static void conv_test(OilFunctionClass *klass, OilFunctionImpl *impl)
-{
- int n_iter = 100;
- int length = 100;
- int typesizes[8] = { 1, 1, 2, 2, 4, 4, 4, 8 };
- const char *s;
- int type1, type2;
- void *src;
- void *dest;
- OilProfile prof;
- int n;
-
- //printf(" testing %s\n", klass->name);
-
- s = strchr(klass->name, '_');
- type1 = get_type(s);
-
- s = strchr(s+1, '_');
- type2 = get_type(s);
-
- //printf(" types %d %d\n", type1, type2);
-
- dest = malloc(n_iter * typesizes[type1]);
- src = malloc(n_iter * typesizes[type2]);
-
- memset(src,0,n_iter * typesizes[type2]);
-#if 0
- dest = malloc(n_iter * 8);
- src = malloc(n_iter * 8);
-#endif
-
- oil_profile_init(prof);
- for(n=0;n<n_iter;n++){
- oil_profile_start(prof);
- ((void (*)(void *, int, void *, int, int))impl->func)
- (dest, typesizes[type1], src, typesizes[type2], length);
- oil_profile_stop(prof);
- }
-
- //oil_profile_print(prof);
-
- impl->prof = prof.tmin;
-
- free(dest);
- free(src);
-}
-#endif
+#define SCALECONV_DEFINE_REF_CAST(desttype,srctype) \
+static void scaleconv_ ## desttype ## _ ## srctype ## _ref ( \
+ type_ ## desttype *dest, \
+ type_ ## srctype *src, \
+ int n, double *offset, double *multiplier) \
+{ \
+ int i; \
+ for(i=0;i<n;i++){ \
+ dest[i] = *offset + *multiplier * src[i]; \
+ } \
+} \
+OIL_DEFINE_CLASS(scaleconv_ ## desttype ## _ ## srctype, \
+ "type_" #desttype " *dest, " \
+ "type_" #srctype " *src, " \
+ "int n, double *s2_1, double *s3_1"); \
+OIL_DEFINE_IMPL_REF(scaleconv_ ## desttype ## _ ## srctype ## _ref, \
+ scaleconv_ ## desttype ## _ ## srctype)
+
+SCALECONV_DEFINE_REF_RINT(s8,f32);
+SCALECONV_DEFINE_REF_RINT(u8,f32);
+SCALECONV_DEFINE_REF_RINT(s16,f32);
+SCALECONV_DEFINE_REF_RINT(u16,f32);
+SCALECONV_DEFINE_REF_RINT(s32,f32);
+SCALECONV_DEFINE_REF_RINT(u32,f32);
+
+SCALECONV_DEFINE_REF_RINT(s8,f64);
+SCALECONV_DEFINE_REF_RINT(u8,f64);
+SCALECONV_DEFINE_REF_RINT(s16,f64);
+SCALECONV_DEFINE_REF_RINT(u16,f64);
+SCALECONV_DEFINE_REF_RINT(s32,f64);
+SCALECONV_DEFINE_REF_RINT(u32,f64);
+
+SCALECONV_DEFINE_REF_CAST(f32,s8);
+SCALECONV_DEFINE_REF_CAST(f32,u8);
+SCALECONV_DEFINE_REF_CAST(f32,s16);
+SCALECONV_DEFINE_REF_CAST(f32,u16);
+SCALECONV_DEFINE_REF_CAST(f32,s32);
+SCALECONV_DEFINE_REF_CAST(f32,u32);
+
+SCALECONV_DEFINE_REF_CAST(f64,s8);
+SCALECONV_DEFINE_REF_CAST(f64,u8);
+SCALECONV_DEFINE_REF_CAST(f64,s16);
+SCALECONV_DEFINE_REF_CAST(f64,u16);
+SCALECONV_DEFINE_REF_CAST(f64,s32);
+SCALECONV_DEFINE_REF_CAST(f64,u32);
diff --git a/liboil/dct/idct8x8_i386.c b/liboil/dct/idct8x8_i386.c
index 191e485..436039c 100644
--- a/liboil/dct/idct8x8_i386.c
+++ b/liboil/dct/idct8x8_i386.c
@@ -81,8 +81,10 @@ static void
idct8x8_s16_mmx (int16_t *dest, int dstr, int16_t *src, int sstr)
{
int32_t tmp[32];
+ int32_t save_ebx;
asm volatile (
+ " movl %%ebx, %6 \n"
/* left half */
" movl %1, %%eax \n" // src
" movl %3, %%ebx \n" // sstr
@@ -380,10 +382,11 @@ idct8x8_s16_mmx (int16_t *dest, int dstr, int16_t *src, int sstr)
LOOP
#undef LOOP
+ " movl %6, %%ebx \n"
" emms \n"
:
- : "m" (dest), "m" (src), "m" (dstr), "m" (sstr), "r" (tmp), "r" (dct_mmx_constants)
- : "eax", "ebx", "ecx", "edx");
+ : "m" (dest), "m" (src), "m" (dstr), "m" (sstr), "r" (tmp), "r" (dct_mmx_constants), "m" (save_ebx)
+ : "eax", "ecx", "edx");
}
OIL_DEFINE_IMPL_FULL (idct8x8_s16_mmx, idct8x8_s16, OIL_IMPL_FLAG_MMX);
diff --git a/liboil/liboil.h b/liboil/liboil.h
index 7af02e9..c19848a 100644
--- a/liboil/liboil.h
+++ b/liboil/liboil.h
@@ -37,6 +37,9 @@ void oil_init (void);
#define oil_memcpy(dest,src,n_bytes) \
oil_copy_u8((void *)(dest),(void *)(src),(n_bytes))
+#define oil_trans8x8_s16(dest, dstr, src, sstr) \
+ oil_trans8x8_u16((uint16_t *)dest, dstr, (uint16_t *)src, sstr)
+
#endif
diff --git a/liboil/liboilfuncs.h b/liboil/liboilfuncs.h
index 1913923..2744781 100644
--- a/liboil/liboilfuncs.h
+++ b/liboil/liboilfuncs.h
@@ -376,7 +376,7 @@ extern OilFunctionClass *oil_function_class_ptr_idct8_f64;
typedef void (*_oil_type_idct8_f64)(double * d_8, int dstr, const double * s_8, int sstr);
#define oil_idct8_f64 ((_oil_type_idct8_f64)(*(void **)oil_function_class_ptr_idct8_f64))
extern OilFunctionClass *oil_function_class_ptr_idct8theora_s16;
-typedef void (*_oil_type_idct8theora_s16)(int16_t * d_8x8, int dstr, const int16_t * s_8x8, int sstr);
+typedef void (*_oil_type_idct8theora_s16)(int16_t * d_8, int dstr, const int16_t * s_8, int sstr);
#define oil_idct8theora_s16 ((_oil_type_idct8theora_s16)(*(void **)oil_function_class_ptr_idct8theora_s16))
extern OilFunctionClass *oil_function_class_ptr_idct8x8_f64;
typedef void (*_oil_type_idct8x8_f64)(double * d_8x8, int dstr, const double * s_8x8, int sstr);
@@ -519,6 +519,78 @@ typedef void (*_oil_type_scalarmult_u32)(uint32_t * dest, int dstr, const uint32
extern OilFunctionClass *oil_function_class_ptr_scalarmult_u8;
typedef void (*_oil_type_scalarmult_u8)(uint8_t * dest, int dstr, const uint8_t * src, int sstr, const uint8_t * s2_1, int n);
#define oil_scalarmult_u8 ((_oil_type_scalarmult_u8)(*(void **)oil_function_class_ptr_scalarmult_u8))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_s16;
+typedef void (*_oil_type_scaleconv_f32_s16)(float * dest, const int16_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_s16 ((_oil_type_scaleconv_f32_s16)(*(void **)oil_function_class_ptr_scaleconv_f32_s16))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_s32;
+typedef void (*_oil_type_scaleconv_f32_s32)(float * dest, const int32_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_s32 ((_oil_type_scaleconv_f32_s32)(*(void **)oil_function_class_ptr_scaleconv_f32_s32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_s8;
+typedef void (*_oil_type_scaleconv_f32_s8)(float * dest, const int8_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_s8 ((_oil_type_scaleconv_f32_s8)(*(void **)oil_function_class_ptr_scaleconv_f32_s8))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_u16;
+typedef void (*_oil_type_scaleconv_f32_u16)(float * dest, const uint16_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_u16 ((_oil_type_scaleconv_f32_u16)(*(void **)oil_function_class_ptr_scaleconv_f32_u16))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_u32;
+typedef void (*_oil_type_scaleconv_f32_u32)(float * dest, const uint32_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_u32 ((_oil_type_scaleconv_f32_u32)(*(void **)oil_function_class_ptr_scaleconv_f32_u32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f32_u8;
+typedef void (*_oil_type_scaleconv_f32_u8)(float * dest, const uint8_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f32_u8 ((_oil_type_scaleconv_f32_u8)(*(void **)oil_function_class_ptr_scaleconv_f32_u8))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_s16;
+typedef void (*_oil_type_scaleconv_f64_s16)(double * dest, const int16_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_s16 ((_oil_type_scaleconv_f64_s16)(*(void **)oil_function_class_ptr_scaleconv_f64_s16))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_s32;
+typedef void (*_oil_type_scaleconv_f64_s32)(double * dest, const int32_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_s32 ((_oil_type_scaleconv_f64_s32)(*(void **)oil_function_class_ptr_scaleconv_f64_s32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_s8;
+typedef void (*_oil_type_scaleconv_f64_s8)(double * dest, const int8_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_s8 ((_oil_type_scaleconv_f64_s8)(*(void **)oil_function_class_ptr_scaleconv_f64_s8))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_u16;
+typedef void (*_oil_type_scaleconv_f64_u16)(double * dest, const uint16_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_u16 ((_oil_type_scaleconv_f64_u16)(*(void **)oil_function_class_ptr_scaleconv_f64_u16))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_u32;
+typedef void (*_oil_type_scaleconv_f64_u32)(double * dest, const uint32_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_u32 ((_oil_type_scaleconv_f64_u32)(*(void **)oil_function_class_ptr_scaleconv_f64_u32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_f64_u8;
+typedef void (*_oil_type_scaleconv_f64_u8)(double * dest, const uint8_t * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_f64_u8 ((_oil_type_scaleconv_f64_u8)(*(void **)oil_function_class_ptr_scaleconv_f64_u8))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s16_f32;
+typedef void (*_oil_type_scaleconv_s16_f32)(int16_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s16_f32 ((_oil_type_scaleconv_s16_f32)(*(void **)oil_function_class_ptr_scaleconv_s16_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s16_f64;
+typedef void (*_oil_type_scaleconv_s16_f64)(int16_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s16_f64 ((_oil_type_scaleconv_s16_f64)(*(void **)oil_function_class_ptr_scaleconv_s16_f64))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s32_f32;
+typedef void (*_oil_type_scaleconv_s32_f32)(int32_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s32_f32 ((_oil_type_scaleconv_s32_f32)(*(void **)oil_function_class_ptr_scaleconv_s32_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s32_f64;
+typedef void (*_oil_type_scaleconv_s32_f64)(int32_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s32_f64 ((_oil_type_scaleconv_s32_f64)(*(void **)oil_function_class_ptr_scaleconv_s32_f64))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s8_f32;
+typedef void (*_oil_type_scaleconv_s8_f32)(int8_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s8_f32 ((_oil_type_scaleconv_s8_f32)(*(void **)oil_function_class_ptr_scaleconv_s8_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_s8_f64;
+typedef void (*_oil_type_scaleconv_s8_f64)(int8_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_s8_f64 ((_oil_type_scaleconv_s8_f64)(*(void **)oil_function_class_ptr_scaleconv_s8_f64))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u16_f32;
+typedef void (*_oil_type_scaleconv_u16_f32)(uint16_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u16_f32 ((_oil_type_scaleconv_u16_f32)(*(void **)oil_function_class_ptr_scaleconv_u16_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u16_f64;
+typedef void (*_oil_type_scaleconv_u16_f64)(uint16_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u16_f64 ((_oil_type_scaleconv_u16_f64)(*(void **)oil_function_class_ptr_scaleconv_u16_f64))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u32_f32;
+typedef void (*_oil_type_scaleconv_u32_f32)(uint32_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u32_f32 ((_oil_type_scaleconv_u32_f32)(*(void **)oil_function_class_ptr_scaleconv_u32_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u32_f64;
+typedef void (*_oil_type_scaleconv_u32_f64)(uint32_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u32_f64 ((_oil_type_scaleconv_u32_f64)(*(void **)oil_function_class_ptr_scaleconv_u32_f64))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u8_f32;
+typedef void (*_oil_type_scaleconv_u8_f32)(uint8_t * dest, const float * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u8_f32 ((_oil_type_scaleconv_u8_f32)(*(void **)oil_function_class_ptr_scaleconv_u8_f32))
+extern OilFunctionClass *oil_function_class_ptr_scaleconv_u8_f64;
+typedef void (*_oil_type_scaleconv_u8_f64)(uint8_t * dest, const double * src, int n, const double * s2_1, const double * s3_1);
+#define oil_scaleconv_u8_f64 ((_oil_type_scaleconv_u8_f64)(*(void **)oil_function_class_ptr_scaleconv_u8_f64))
extern OilFunctionClass *oil_function_class_ptr_scanlinescale2_u8;
typedef void (*_oil_type_scanlinescale2_u8)(uint8_t * dest, const uint8_t * src, int n);
#define oil_scanlinescale2_u8 ((_oil_type_scanlinescale2_u8)(*(void **)oil_function_class_ptr_scanlinescale2_u8))
@@ -528,9 +600,15 @@ typedef void (*_oil_type_sincos_f64)(double * dest1, double * dest2, int n, cons
extern OilFunctionClass *oil_function_class_ptr_splat_u32;
typedef void (*_oil_type_splat_u32)(uint32_t * dest, int dstr, const uint32_t * s1_1, int n);
#define oil_splat_u32 ((_oil_type_splat_u32)(*(void **)oil_function_class_ptr_splat_u32))
+extern OilFunctionClass *oil_function_class_ptr_splat_u32_ns;
+typedef void (*_oil_type_splat_u32_ns)(uint32_t * dest, const uint32_t * s1_1, int n);
+#define oil_splat_u32_ns ((_oil_type_splat_u32_ns)(*(void **)oil_function_class_ptr_splat_u32_ns))
extern OilFunctionClass *oil_function_class_ptr_splat_u8;
typedef void (*_oil_type_splat_u8)(uint8_t * dest, int dstr, const uint8_t * s1_1, int n);
#define oil_splat_u8 ((_oil_type_splat_u8)(*(void **)oil_function_class_ptr_splat_u8))
+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_squaresum_f64;
typedef void (*_oil_type_squaresum_f64)(double * dest, const double * src, int n);
#define oil_squaresum_f64 ((_oil_type_squaresum_f64)(*(void **)oil_function_class_ptr_squaresum_f64))
diff --git a/liboil/md5/md5_i386.c b/liboil/md5/md5_i386.c
index 7ecf34c..d222cfd 100644
--- a/liboil/md5/md5_i386.c
+++ b/liboil/md5/md5_i386.c
@@ -42,6 +42,8 @@
(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
+#ifdef ENABLE_BROKEN_IMPLS
+/* GCC-4.0 doesn't like this one */
static void
md5_asm1(uint32_t *state, uint32_t *src)
{
@@ -192,10 +194,11 @@ md5_asm1(uint32_t *state, uint32_t *src)
#undef STEP2
#undef STEP3
#undef STEP4
-
-
OIL_DEFINE_IMPL_ASM (md5_asm1, md5);
+#endif
+#ifdef ENABLE_BROKEN_IMPLS
+/* FIXME GCC-4.0 doesn't like this one */
static void
md5_asm2(uint32_t *state, uint32_t *src)
{
@@ -350,10 +353,14 @@ md5_asm2(uint32_t *state, uint32_t *src)
#undef STEP3
#undef STEP4
}
+OIL_DEFINE_IMPL_ASM (md5_asm2, md5);
+#endif
-OIL_DEFINE_IMPL_ASM (md5_asm2, md5);
+#ifdef ENABLE_BROKEN_IMPLS
+/* FIXME this is way too clever. Using %esp as a general purpose
+ * register? NOT a brilliant idea. */
static void
md5_asm3(uint32_t *state, uint32_t *src)
{
@@ -518,4 +525,5 @@ md5_asm3(uint32_t *state, uint32_t *src)
OIL_DEFINE_IMPL_ASM (md5_asm3, md5);
+#endif