mirror of https://github.com/madler/zlib.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.8 KiB
62 lines
1.8 KiB
/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86 |
|
* Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. |
|
* File written by Gilles Vollant, by modifiying the longest_match |
|
* from Jean-loup Gailly in deflate.c |
|
* it prepare all parameters and call the assembly longest_match_gvasm |
|
* longest_match execute standard C code is wmask != 0x7fff |
|
* (assembly code is faster with a fixed wmask) |
|
* |
|
* Read comment at beginning of gvmat32.asm for more information |
|
*/ |
|
|
|
#if defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) |
|
#include "deflate.h" |
|
|
|
/* if your C compiler don't add underline before function name, |
|
define ADD_UNDERLINE_ASMFUNC */ |
|
#ifdef ADD_UNDERLINE_ASMFUNC |
|
#define longest_match_7fff _longest_match_7fff |
|
#define longest_match_686 _longest_match_686 |
|
#define cpudetect32 _cpudetect32 |
|
#endif |
|
|
|
|
|
unsigned long cpudetect32(); |
|
|
|
uInt longest_match_c( |
|
deflate_state *s, |
|
IPos cur_match); /* current match */ |
|
|
|
|
|
uInt longest_match_7fff( |
|
deflate_state *s, |
|
IPos cur_match); /* current match */ |
|
|
|
uInt longest_match_686( |
|
deflate_state *s, |
|
IPos cur_match); /* current match */ |
|
|
|
|
|
static uInt iIsPPro=2; |
|
|
|
void match_init () |
|
{ |
|
iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; |
|
} |
|
|
|
uInt longest_match( |
|
deflate_state *s, |
|
IPos cur_match) /* current match */ |
|
{ |
|
if (iIsPPro!=0) |
|
return longest_match_686(s,cur_match); |
|
|
|
if (s->w_mask != 0x7fff) |
|
return longest_match_686(s,cur_match); |
|
|
|
/* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */ |
|
return longest_match_7fff(s,cur_match); |
|
} |
|
|
|
|
|
#endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */
|
|
|