summaryrefslogtreecommitdiff
path: root/tools/ucl/src/ucl_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ucl/src/ucl_util.h')
-rw-r--r--tools/ucl/src/ucl_util.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/tools/ucl/src/ucl_util.h b/tools/ucl/src/ucl_util.h
new file mode 100644
index 0000000000..2292716e4c
--- /dev/null
+++ b/tools/ucl/src/ucl_util.h
@@ -0,0 +1,180 @@
1/* ucl_util.h -- utilities for the UCL library
2
3 This file is part of the UCL data compression library.
4
5 Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer
6 All Rights Reserved.
7
8 The UCL library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 2 of
11 the License, or (at your option) any later version.
12
13 The UCL library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with the UCL library; see the file COPYING.
20 If not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 Markus F.X.J. Oberhumer
24 <markus@oberhumer.com>
25 */
26
27
28/* WARNING: this file should *not* be used by applications. It is
29 part of the implementation of the library and is subject
30 to change.
31 */
32
33
34#ifndef __UCL_UTIL_H
35#define __UCL_UTIL_H
36
37#ifndef __UCL_CONF_H
38# include "ucl_conf.h"
39#endif
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
45
46/***********************************************************************
47// fast memcpy that copies multiples of 8 byte chunks.
48// len is the number of bytes.
49// note: all parameters must be lvalues, len >= 8
50// dest and src advance, len is undefined afterwards
51************************************************************************/
52
53#if 1 && defined(HAVE_MEMCPY)
54#if !defined(__UCL_DOS16) && !defined(__UCL_WIN16)
55
56#define MEMCPY8_DS(dest,src,len) \
57 memcpy(dest,src,len); \
58 dest += len; \
59 src += len
60
61#endif
62#endif
63
64
65#if 0 && !defined(MEMCPY8_DS)
66
67#define MEMCPY8_DS(dest,src,len) \
68 { do { \
69 *dest++ = *src++; \
70 *dest++ = *src++; \
71 *dest++ = *src++; \
72 *dest++ = *src++; \
73 *dest++ = *src++; \
74 *dest++ = *src++; \
75 *dest++ = *src++; \
76 *dest++ = *src++; \
77 len -= 8; \
78 } while (len > 0); }
79
80#endif
81
82
83#if !defined(MEMCPY8_DS)
84
85#define MEMCPY8_DS(dest,src,len) \
86 { register ucl_uint __l = (len) / 8; \
87 do { \
88 *dest++ = *src++; \
89 *dest++ = *src++; \
90 *dest++ = *src++; \
91 *dest++ = *src++; \
92 *dest++ = *src++; \
93 *dest++ = *src++; \
94 *dest++ = *src++; \
95 *dest++ = *src++; \
96 } while (--__l > 0); }
97
98#endif
99
100
101/***********************************************************************
102// memcpy and pseudo-memmove
103// len is the number of bytes.
104// note: all parameters must be lvalues, len > 0
105// dest and src advance, len is undefined afterwards
106************************************************************************/
107
108#define MEMCPY_DS(dest,src,len) \
109 do *dest++ = *src++; \
110 while (--len > 0)
111
112#define MEMMOVE_DS(dest,src,len) \
113 do *dest++ = *src++; \
114 while (--len > 0)
115
116
117/***********************************************************************
118// fast bzero that clears multiples of 8 pointers
119// n is the number of pointers.
120// note: n > 0
121// s and n are undefined afterwards
122************************************************************************/
123
124#if (UCL_UINT_MAX <= SIZE_T_MAX) && defined(HAVE_MEMSET)
125
126#if 1
127#define BZERO8_PTR(s,l,n) memset((s),0,(ucl_uint)(l)*(n))
128#else
129#define BZERO8_PTR(s,l,n) memset((ucl_voidp)(s),0,(ucl_uint)(l)*(n))
130#endif
131
132#else
133
134#define BZERO8_PTR(s,l,n) \
135 ucl_memset((ucl_voidp)(s),0,(ucl_uint)(l)*(n))
136
137#endif
138
139
140/***********************************************************************
141// rotate (not used at the moment)
142************************************************************************/
143
144#if 0
145#if defined(__GNUC__) && defined(__i386__)
146
147unsigned char ucl_rotr8(unsigned char value, int shift);
148extern __inline__ unsigned char ucl_rotr8(unsigned char value, int shift)
149{
150 unsigned char result;
151
152 __asm__ __volatile__ ("movb %b1, %b0; rorb %b2, %b0"
153 : "=a"(result) : "g"(value), "c"(shift));
154 return result;
155}
156
157unsigned short ucl_rotr16(unsigned short value, int shift);
158extern __inline__ unsigned short ucl_rotr16(unsigned short value, int shift)
159{
160 unsigned short result;
161
162 __asm__ __volatile__ ("movw %b1, %b0; rorw %b2, %b0"
163 : "=a"(result) : "g"(value), "c"(shift));
164 return result;
165}
166
167#endif
168#endif
169
170
171
172#ifdef __cplusplus
173} /* extern "C" */
174#endif
175
176#endif /* already included */
177
178/*
179vi:ts=4:et
180*/