diff options
author | Andrew Bartlett <abartlet@samba.org> | 2008-08-12 17:46:17 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2008-08-12 17:46:17 +1000 |
commit | 7177df5df95c9fc0d2bc36340b948697980f00d3 (patch) | |
tree | 43e9115d1a87dabe743cf5092de56a8bb239e05a /source4/lib/zlib/contrib/masmx86/gvmat32c.c | |
parent | 5f873a4d8fbcd2eaeabb452ffba059338ed55dfc (diff) | |
parent | 0965b22ec561588201a3a79f1f1e316834c8ce0b (diff) | |
download | samba-7177df5df95c9fc0d2bc36340b948697980f00d3.tar.gz samba-7177df5df95c9fc0d2bc36340b948697980f00d3.tar.bz2 samba-7177df5df95c9fc0d2bc36340b948697980f00d3.zip |
Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into 4-0-local
(This used to be commit ce7b1424c711949e6feb0181d3759133b77391ff)
Diffstat (limited to 'source4/lib/zlib/contrib/masmx86/gvmat32c.c')
-rw-r--r-- | source4/lib/zlib/contrib/masmx86/gvmat32c.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/source4/lib/zlib/contrib/masmx86/gvmat32c.c b/source4/lib/zlib/contrib/masmx86/gvmat32c.c new file mode 100644 index 0000000000..7ad2b27943 --- /dev/null +++ b/source4/lib/zlib/contrib/masmx86/gvmat32c.c @@ -0,0 +1,62 @@ +/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
+ * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
+ * File written by Gilles Vollant, by modifiying the longest_match
+ * from Jean-loup Gailly in deflate.c
+ * it prepare all parameters and call the assembly longest_match_gvasm
+ * longest_match execute standard C code is wmask != 0x7fff
+ * (assembly code is faster with a fixed wmask)
+ *
+ * Read comment at beginning of gvmat32.asm for more information
+ */
+
+#if defined(ASMV) && (!defined(NOOLDPENTIUMCODE))
+#include "deflate.h"
+
+/* if your C compiler don't add underline before function name,
+ define ADD_UNDERLINE_ASMFUNC */
+#ifdef ADD_UNDERLINE_ASMFUNC
+#define longest_match_7fff _longest_match_7fff
+#define longest_match_686 _longest_match_686
+#define cpudetect32 _cpudetect32
+#endif
+
+
+unsigned long cpudetect32();
+
+uInt longest_match_c(
+ deflate_state *s,
+ IPos cur_match); /* current match */
+
+
+uInt longest_match_7fff(
+ deflate_state *s,
+ IPos cur_match); /* current match */
+
+uInt longest_match_686(
+ deflate_state *s,
+ IPos cur_match); /* current match */
+
+
+static uInt iIsPPro=2;
+
+void match_init ()
+{
+ iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
+}
+
+uInt longest_match(
+ deflate_state *s,
+ IPos cur_match) /* current match */
+{
+ if (iIsPPro!=0)
+ return longest_match_686(s,cur_match);
+
+ if (s->w_mask != 0x7fff)
+ return longest_match_686(s,cur_match);
+
+ /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */
+ return longest_match_7fff(s,cur_match);
+}
+
+
+#endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */
|