gvmat32c.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  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. #if defined(ASMV) && (!defined(NOOLDPENTIUMCODE))
  12. #include "deflate.h"
  13. /* if your C compiler don't add underline before function name,
  14.         define ADD_UNDERLINE_ASMFUNC */
  15. #ifdef ADD_UNDERLINE_ASMFUNC
  16. #define longest_match_7fff _longest_match_7fff
  17. #define longest_match_686  _longest_match_686
  18. #define cpudetect32        _cpudetect32
  19. #endif
  20. unsigned long cpudetect32();
  21. uInt longest_match_c(
  22.     deflate_state *s,
  23.     IPos cur_match);                             /* current match */
  24. uInt longest_match_7fff(
  25.     deflate_state *s,
  26.     IPos cur_match);                             /* current match */
  27. uInt longest_match_686(
  28.     deflate_state *s,
  29.     IPos cur_match);                             /* current match */
  30. static uInt iIsPPro=2;
  31. void match_init ()
  32. {
  33.     iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
  34. }
  35. uInt longest_match(
  36.     deflate_state *s,
  37.     IPos cur_match)                             /* current match */
  38. {
  39.     if (iIsPPro!=0)
  40.         return longest_match_686(s,cur_match);
  41.     if (s->w_mask != 0x7fff)
  42.         return longest_match_686(s,cur_match);
  43.     /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */
  44.         return longest_match_7fff(s,cur_match);
  45. }
  46. #endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */