~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to config.h

  • Committer: weidai
  • Date: 2007-05-04 15:36:15 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:339
fix compile

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
typedef unsigned short word16;
105
105
typedef unsigned int word32;
106
106
 
107
 
#if defined(__GNUC__) || defined(__MWERKS__)
 
107
#if defined(__GNUC__) || defined(__MWERKS__) || defined(__SUNPRO_CC)
108
108
        #define WORD64_AVAILABLE
109
109
        typedef unsigned long long word64;
110
110
        #define W64LIT(x) x##LL
111
 
#elif defined(_MSC_VER) || defined(__BCPLUSPLUS__)
 
111
#elif defined(_MSC_VER) || defined(__BORLANDC__)
112
112
        #define WORD64_AVAILABLE
113
113
        typedef unsigned __int64 word64;
114
114
        #define W64LIT(x) x##ui64
115
115
#endif
116
116
 
117
 
// define largest word type
 
117
// define large word type, used for file offsets and such
118
118
#ifdef WORD64_AVAILABLE
119
119
        typedef word64 lword;
120
120
        const lword LWORD_MAX = W64LIT(0)-1;
123
123
        const lword LWORD_MAX = lword(0)-1;
124
124
#endif
125
125
 
126
 
#if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(_M_X64)
127
 
        // These platforms have 64-bit CPU registers. Unfortunately most C++ compilers doesn't
128
 
        // allow any way to access the 64-bit by 64-bit multiply instruction without using
129
 
        // assembly, so in order to use word64 as word, the assembly instruction must be defined
130
 
        // in Dword::Multiply().
 
126
// define hword, word, and dword. these are used for multiprecision integer arithmetic
 
127
// Intel compiler won't have _umul128 until version 10.0. See http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30231625.aspx
 
128
#if (defined(_MSC_VER) && (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1000) && (defined(_M_X64) || defined(_M_IA64))) || (defined(__DECCXX) && defined(__alpha__))
131
129
        typedef word32 hword;
132
130
        typedef word64 word;
133
131
#else
134
132
        #define CRYPTOPP_NATIVE_DWORD_AVAILABLE
135
 
        #ifdef WORD64_AVAILABLE
136
 
                #define CRYPTOPP_SLOW_WORD64 // defined this if your CPU is not 64-bit to use alternative code that avoids word64
 
133
        #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__)
 
134
                #if defined(__GNUC__)
 
135
                        typedef word32 hword;
 
136
                        typedef word64 word;
 
137
                        typedef __uint128_t dword;
 
138
                        typedef __uint128_t word128;
 
139
                        #define CRYPTOPP_WORD128_AVAILABLE
 
140
                #else
 
141
                        // if we're here, it means we're on a 64-bit CPU but we don't have a way to obtain 128-bit multiplication results
 
142
                        typedef word16 hword;
 
143
                        typedef word32 word;
 
144
                        typedef word64 dword;
 
145
                #endif
 
146
        #elif defined(WORD64_AVAILABLE)
 
147
                #define CRYPTOPP_SLOW_WORD64 // use alternative code that avoids word64
137
148
                typedef word16 hword;
138
149
                typedef word32 word;
139
150
                typedef word64 dword;
140
151
        #else
141
 
                typedef word8 hword;
 
152
                typedef byte hword;
142
153
                typedef word16 word;
143
154
                typedef word32 dword;
144
155
        #endif
147
158
const unsigned int WORD_SIZE = sizeof(word);
148
159
const unsigned int WORD_BITS = WORD_SIZE * 8;
149
160
 
150
 
#if defined(_MSC_VER) || defined(__BCPLUSPLUS__)
151
 
        #define INTEL_INTRINSICS
152
 
        #define FAST_ROTATE
153
 
#elif defined(__MWERKS__) && TARGET_CPU_PPC
154
 
        #define PPC_INTRINSICS
155
 
        #define FAST_ROTATE
156
 
#elif defined(__GNUC__) && defined(__i386__)
157
 
        // GCC does peephole optimizations which should result in using rotate instructions
158
 
        #define FAST_ROTATE
159
 
#endif
 
161
NAMESPACE_END
160
162
 
161
163
#ifndef CRYPTOPP_L1_CACHE_LINE_SIZE
162
164
        // This should be a lower bound on the L1 cache line size. It's used for defense against timing attacks.
163
 
        // L1 cache line size is 32 on Pentium III and earlier
164
 
        #define CRYPTOPP_L1_CACHE_LINE_SIZE 32
165
 
#endif
166
 
 
167
 
#ifndef CRYPTOPP_L1_CACHE_ALIGN
168
 
        #ifdef _MSC_VER
169
 
                #define CRYPTOPP_L1_CACHE_ALIGN(x) __declspec(align(CRYPTOPP_L1_CACHE_LINE_SIZE)) x
170
 
        #elif defined(__GNUC__)
171
 
                #define CRYPTOPP_L1_CACHE_ALIGN(x) x __attribute__((aligned(CRYPTOPP_L1_CACHE_LINE_SIZE)))
172
 
        #endif
173
 
#endif
174
 
 
175
 
NAMESPACE_END
 
165
        #if defined(_M_X64) || defined(__x86_64__)
 
166
                #define CRYPTOPP_L1_CACHE_LINE_SIZE 64
 
167
        #else
 
168
                // L1 cache line size is 32 on Pentium III and earlier
 
169
                #define CRYPTOPP_L1_CACHE_LINE_SIZE 32
 
170
        #endif
 
171
#endif
 
172
 
 
173
#if defined(_MSC_VER)
 
174
        #if _MSC_VER == 1200
 
175
                #include <malloc.h>
 
176
        #endif
 
177
        #if _MSC_VER > 1200 || defined(_mm_free)
 
178
                #define CRYPTOPP_MSVC6PP_OR_LATER               // VC 6 processor pack or later
 
179
        #else
 
180
                #define CRYPTOPP_MSVC6_NO_PP                    // VC 6 without processor pack
 
181
        #endif
 
182
#endif
 
183
 
 
184
#ifdef __GNUC__
 
185
        #define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
 
186
#endif
 
187
 
 
188
#ifndef CRYPTOPP_ALIGN_DATA
 
189
        #if defined(CRYPTOPP_MSVC6PP_OR_LATER)
 
190
                #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x))
 
191
        #elif defined(__GNUC__) || __SUNPRO_CC > 0x580
 
192
                #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x)))
 
193
        #else
 
194
                #define CRYPTOPP_ALIGN_DATA(x)
 
195
        #endif
 
196
#endif
 
197
 
 
198
#ifndef CRYPTOPP_SECTION_ALIGN16
 
199
        #ifdef __GNUC__
 
200
                // the alignment attribute doesn't seem to work without this section attribute when -fdata-sections is turned on
 
201
                #define CRYPTOPP_SECTION_ALIGN16 __attribute__((section ("CryptoPP_Align16")))
 
202
        #else
 
203
                #define CRYPTOPP_SECTION_ALIGN16
 
204
        #endif
 
205
#endif
 
206
 
 
207
#if defined(_MSC_VER) || defined(__fastcall)
 
208
        #define CRYPTOPP_FASTCALL __fastcall
 
209
#else
 
210
        #define CRYPTOPP_FASTCALL
 
211
#endif
176
212
 
177
213
// VC60 workaround: it doesn't allow typename in some places
178
214
#if defined(_MSC_VER) && (_MSC_VER < 1300)
181
217
#define CPP_TYPENAME typename
182
218
#endif
183
219
 
 
220
// VC60 workaround: can't cast unsigned __int64 to float or double
 
221
#if defined(_MSC_VER) && !defined(CRYPTOPP_MSVC6PP_OR_LATER)
 
222
#define CRYPTOPP_VC6_INT64 (__int64)
 
223
#else
 
224
#define CRYPTOPP_VC6_INT64
 
225
#endif
 
226
 
184
227
#ifdef _MSC_VER
185
228
#define CRYPTOPP_NO_VTABLE __declspec(novtable)
186
229
#else
199
242
#       pragma warning(disable: 4231 4250 4251 4275 4660 4661 4786 4355)
200
243
#endif
201
244
 
 
245
#ifdef __BORLANDC__
 
246
// 8037: non-const function called for const object. needed to work around BCB2006 bug
 
247
#       pragma warn -8037
 
248
#endif
 
249
 
202
250
#if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__MWERKS__) || defined(_STLPORT_VERSION)
203
251
#define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION
204
252
#endif
207
255
#define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE
208
256
#endif
209
257
 
 
258
#ifdef CRYPTOPP_DISABLE_X86ASM          // for backwards compatibility: this macro had both meanings
 
259
#define CRYPTOPP_DISABLE_ASM
 
260
#define CRYPTOPP_DISABLE_SSE2
 
261
#endif
 
262
 
210
263
// CodeWarrior defines _MSC_VER
211
 
#if !defined(CRYPTOPP_DISABLE_X86ASM) && ((defined(_MSC_VER) && !defined(__MWERKS__) && defined(_M_IX86)) || (defined(__GNUC__) && defined(__i386__)))
212
 
#define CRYPTOPP_X86ASM_AVAILABLE
 
264
#if !defined(CRYPTOPP_DISABLE_ASM) && ((defined(_MSC_VER) && !defined(__MWERKS__) && defined(_M_IX86)) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))))
 
265
        #define CRYPTOPP_X86_ASM_AVAILABLE
 
266
 
 
267
        #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(CRYPTOPP_MSVC6PP_OR_LATER) || CRYPTOPP_GCC_VERSION >= 30300)
 
268
                #define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 1
 
269
        #else
 
270
                #define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 0
 
271
        #endif
 
272
 
 
273
        // SSSE3 was actually introduced in GNU as 2.17, which was released 6/23/2006, but we can't tell what version of binutils is installed.
 
274
        // GCC 4.1.2 was released on 2/13/2007, so we'll use that as a proxy for the binutils version.
 
275
        #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1400 || CRYPTOPP_GCC_VERSION >= 40102)
 
276
                #define CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE 1
 
277
        #else
 
278
                #define CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE 0
 
279
        #endif
 
280
#endif
 
281
 
 
282
#if !defined(CRYPTOPP_DISABLE_ASM) && defined(_MSC_VER) && defined(_M_X64)
 
283
        #define CRYPTOPP_X64_MASM_AVAILABLE
 
284
#endif
 
285
 
 
286
#if !defined(CRYPTOPP_DISABLE_ASM) && defined(__GNUC__) && defined(__x86_64__)
 
287
        #define CRYPTOPP_X64_ASM_AVAILABLE
 
288
#endif
 
289
 
 
290
#if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(CRYPTOPP_MSVC6PP_OR_LATER) || defined(__SSE2__))
 
291
        #define CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE 1
 
292
#else
 
293
        #define CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE 0
 
294
#endif
 
295
 
 
296
// how to allocate 16-byte aligned memory (for SSE2)
 
297
#if defined(CRYPTOPP_MSVC6PP_OR_LATER)
 
298
        #define CRYPTOPP_MM_MALLOC_AVAILABLE
 
299
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
 
300
        #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16
 
301
#elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__)
 
302
        #define CRYPTOPP_MEMALIGN_AVAILABLE
 
303
#elif defined(__MINGW32__)
 
304
        #ifndef _mm_malloc
 
305
                #define _mm_malloc(a, b)    __mingw_aligned_malloc(a, b)
 
306
                #define _mm_free(a)                     __mingw_aligned_free(a)
 
307
        #endif
 
308
        #define CRYPTOPP_MM_MALLOC_AVAILABLE
 
309
#else
 
310
        #define CRYPTOPP_NO_ALIGNED_ALLOC
 
311
#endif
 
312
 
 
313
// how to disable inlining
 
314
#if defined(_MSC_VER) && _MSC_VER >= 1300
 
315
#       define CRYPTOPP_NOINLINE_DOTDOTDOT
 
316
#       define CRYPTOPP_NOINLINE __declspec(noinline)
 
317
#elif defined(__GNUC__)
 
318
#       define CRYPTOPP_NOINLINE_DOTDOTDOT
 
319
#       define CRYPTOPP_NOINLINE __attribute__((noinline))
 
320
#else
 
321
#       define CRYPTOPP_NOINLINE_DOTDOTDOT ...
 
322
#       define CRYPTOPP_NOINLINE 
 
323
#endif
 
324
 
 
325
// how to declare class constants
 
326
#if defined(_MSC_VER) && _MSC_VER <= 1300
 
327
#       define CRYPTOPP_CONSTANT(x) enum {x};
 
328
#else
 
329
#       define CRYPTOPP_CONSTANT(x) static const int x;
 
330
#endif
 
331
 
 
332
#if defined(_M_X64) || defined(__x86_64__)
 
333
        #define CRYPTOPP_BOOL_X64 1
 
334
#else
 
335
        #define CRYPTOPP_BOOL_X64 0
 
336
#endif
 
337
 
 
338
// see http://predef.sourceforge.net/prearch.html
 
339
#if defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)
 
340
        #define CRYPTOPP_BOOL_X86 1
 
341
#else
 
342
        #define CRYPTOPP_BOOL_X86 0
 
343
#endif
 
344
 
 
345
#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X86
 
346
        #define CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
213
347
#endif
214
348
 
215
349
// ***************** determine availability of OS features ********************
220
354
#define CRYPTOPP_WIN32_AVAILABLE
221
355
#endif
222
356
 
223
 
#if defined(__unix__) || defined(__MACH__)
 
357
#if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__)
224
358
#define CRYPTOPP_UNIX_AVAILABLE
225
359
#endif
226
360
 
246
380
#       define USE_BERKELEY_STYLE_SOCKETS
247
381
#endif
248
382
 
249
 
#if defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(USE_BERKELEY_STYLE_SOCKETS)
 
383
#if defined(HIGHRES_TIMER_AVAILABLE) && defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(USE_BERKELEY_STYLE_SOCKETS)
250
384
#       define WINDOWS_PIPES_AVAILABLE
251
385
#endif
252
386
 
268
402
#       define THREADS_AVAILABLE
269
403
#endif
270
404
 
271
 
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
272
 
#       define CRYPTOPP_MALLOC_ALIGNMENT_IS_16
273
 
#endif
274
 
 
275
 
#if defined(__linux__) || defined(__sun__) || defined(__CYGWIN__)
276
 
#       define CRYPTOPP_MEMALIGN_AVAILABLE
277
 
#endif
278
 
 
279
405
#endif  // NO_OS_DEPENDENCE
280
406
 
281
407
// ***************** DLL related ********************
303
429
 
304
430
#if defined(__MWERKS__)
305
431
#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL
 
432
#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
 
433
#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL
306
434
#else
307
435
#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL
308
436
#endif
315
443
 
316
444
#if defined(__MWERKS__)
317
445
#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class
 
446
#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
 
447
#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class
318
448
#else
319
449
#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class
320
450
#endif