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 24 unsigned long cpudetect32(); 25 26 uInt longest_match_c( 27 deflate_state *s, 28 IPos cur_match); /* current match */ 29 30 31 uInt longest_match_7fff( 32 deflate_state *s, 33 IPos cur_match); /* current match */ 34 35 uInt longest_match_686( 36 deflate_state *s, 37 IPos cur_match); /* current match */ 38 39 40 static uInt iIsPPro=2; 41 42 void match_init () 43 { 44 iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; 45 } 46 47 uInt 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