1/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86 2 * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. 3 * File written by Gilles Vollant, by modifiying the longest_match 4 * from Jean-loup Gailly in deflate.c 5 * it prepare all parameters and call the assembly longest_match_gvasm 6 * longest_match execute standard C code is wmask != 0x7fff 7 * (assembly code is faster with a fixed wmask) 8 * 9 * Read comment at beginning of gvmat32.asm for more information 10 */ 11 12#if defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) 13#include "deflate.h" 14 15/* if your C compiler don't add underline before function name, 16 define ADD_UNDERLINE_ASMFUNC */ 17#ifdef ADD_UNDERLINE_ASMFUNC 18#define longest_match_7fff _longest_match_7fff 19#define longest_match_686 _longest_match_686 20#define cpudetect32 _cpudetect32 21#endif 22 23 24unsigned long cpudetect32(); 25 26uInt longest_match_c( 27 deflate_state *s, 28 IPos cur_match); /* current match */ 29 30 31uInt longest_match_7fff( 32 deflate_state *s, 33 IPos cur_match); /* current match */ 34 35uInt longest_match_686( 36 deflate_state *s, 37 IPos cur_match); /* current match */ 38 39 40static uInt iIsPPro=2; 41 42void match_init () 43{ 44 iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; 45} 46 47uInt longest_match( 48 deflate_state *s, 49 IPos cur_match) /* current match */ 50{ 51 if (iIsPPro!=0) 52 return longest_match_686(s,cur_match); 53 54 if (s->w_mask != 0x7fff) 55 return longest_match_686(s,cur_match); 56 57 /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */ 58 return longest_match_7fff(s,cur_match); 59} 60 61 62#endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */ 63