diff options
author | David Schleef <ds@schleef.org> | 2005-05-07 00:34:10 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2005-05-07 00:34:10 +0000 |
commit | 4b0e190913112ba01a34b618508ade10a227d124 (patch) | |
tree | 28027b98ecf5284b5427e85338aa5b2bb90c4034 | |
parent | 780ba4be951d4a1d075dde750900fca414d78bfe (diff) | |
download | liboil-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-- | ChangeLog | 12 | ||||
-rw-r--r-- | examples/jpeg/jpeg.c | 2 | ||||
-rw-r--r-- | examples/report.c | 5 | ||||
-rw-r--r-- | liboil/conv/conv_ref.c | 154 | ||||
-rw-r--r-- | liboil/dct/idct8x8_i386.c | 7 | ||||
-rw-r--r-- | liboil/liboil.h | 3 | ||||
-rw-r--r-- | liboil/liboilfuncs.h | 80 | ||||
-rw-r--r-- | liboil/md5/md5_i386.c | 14 |
8 files changed, 180 insertions, 97 deletions
@@ -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 |