| /* 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)) */ |