root/lib/zlib/contrib/masmx86/gvmat32c.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. match_init
  2. longest_match

   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 ()
     /* [<][>][^][v][top][bottom][index][help] */
  43 {
  44     iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
  45 }
  46 
  47 uInt longest_match(
     /* [<][>][^][v][top][bottom][index][help] */
  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)) */

/* [<][>][^][v][top][bottom][index][help] */