• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
match_init()42 void match_init ()
43 {
44     iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
45 }
46 
longest_match(deflate_state * s,IPos cur_match)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