Home | History | Annotate | Download | only in masmx86
      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