2008-04-25 Kai Tietz <kai.tietz@onevision.com>
[official-gcc.git] / zlib / contrib / masmx86 / gvmat32c.c
blob7ad2b27943bc0bbbdbd06df733548c47e157dc85
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)
9 * Read comment at beginning of gvmat32.asm for more information
12 #if defined(ASMV) && (!defined(NOOLDPENTIUMCODE))
13 #include "deflate.h"
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
24 unsigned long cpudetect32();
26 uInt longest_match_c(
27 deflate_state *s,
28 IPos cur_match); /* current match */
31 uInt longest_match_7fff(
32 deflate_state *s,
33 IPos cur_match); /* current match */
35 uInt longest_match_686(
36 deflate_state *s,
37 IPos cur_match); /* current match */
40 static uInt iIsPPro=2;
42 void match_init ()
44 iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
47 uInt longest_match(
48 deflate_state *s,
49 IPos cur_match) /* current match */
51 if (iIsPPro!=0)
52 return longest_match_686(s,cur_match);
54 if (s->w_mask != 0x7fff)
55 return longest_match_686(s,cur_match);
57 /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */
58 return longest_match_7fff(s,cur_match);
62 #endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */