2009-08-03 Fumitoshi Ukai <ukai@chromium.org>
[WebKit-https.git] / JavaScriptCore / wtf / Platform.h
1 /*
2  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007-2009 Torch Mobile, Inc.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef WTF_Platform_h
28 #define WTF_Platform_h
29
30 /* PLATFORM handles OS, operating environment, graphics API, and CPU */
31 #define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_##WTF_FEATURE  && WTF_PLATFORM_##WTF_FEATURE)
32 #define COMPILER(WTF_FEATURE) (defined WTF_COMPILER_##WTF_FEATURE  && WTF_COMPILER_##WTF_FEATURE)
33 #define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE  && HAVE_##WTF_FEATURE)
34 #define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE  && WTF_USE_##WTF_FEATURE)
35 #define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE  && ENABLE_##WTF_FEATURE)
36
37 /* Operating systems - low-level dependencies */
38
39 /* PLATFORM(DARWIN) */
40 /* Operating system level dependencies for Mac OS X / Darwin that should */
41 /* be used regardless of operating environment */
42 #ifdef __APPLE__
43 #define WTF_PLATFORM_DARWIN 1
44 #include <AvailabilityMacros.h>
45 #if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
46 #define BUILDING_ON_TIGER 1
47 #elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
48 #define BUILDING_ON_LEOPARD 1
49 #endif
50 #include <TargetConditionals.h>
51 #endif
52
53 /* PLATFORM(WIN_OS) */
54 /* Operating system level dependencies for Windows that should be used */
55 /* regardless of operating environment */
56 #if defined(WIN32) || defined(_WIN32)
57 #define WTF_PLATFORM_WIN_OS 1
58 #endif
59
60 /* PLATFORM(WINCE) */
61 /* Operating system level dependencies for Windows CE that should be used */
62 /* regardless of operating environment */
63 /* Note that for this platform PLATFORM(WIN_OS) is also defined. */
64 #if defined(_WIN32_WCE)
65 #define WTF_PLATFORM_WINCE 1
66 #endif
67
68 /* PLATFORM(LINUX) */
69 /* Operating system level dependencies for Linux-like systems that */
70 /* should be used regardless of operating environment */
71 #ifdef __linux__
72 #define WTF_PLATFORM_LINUX 1
73 #endif
74
75 /* PLATFORM(FREEBSD) */
76 /* Operating system level dependencies for FreeBSD-like systems that */
77 /* should be used regardless of operating environment */
78 #ifdef __FreeBSD__
79 #define WTF_PLATFORM_FREEBSD 1
80 #endif
81
82 /* PLATFORM(OPENBSD) */
83 /* Operating system level dependencies for OpenBSD systems that */
84 /* should be used regardless of operating environment */
85 #ifdef __OpenBSD__
86 #define WTF_PLATFORM_OPENBSD 1
87 #endif
88
89 /* PLATFORM(SOLARIS) */
90 /* Operating system level dependencies for Solaris that should be used */
91 /* regardless of operating environment */
92 #if defined(sun) || defined(__sun)
93 #define WTF_PLATFORM_SOLARIS 1
94 #endif
95
96 #if defined (__SYMBIAN32__)
97 /* we are cross-compiling, it is not really windows */
98 #undef WTF_PLATFORM_WIN_OS
99 #undef WTF_PLATFORM_WIN
100 #define WTF_PLATFORM_SYMBIAN 1
101 #endif
102
103
104 /* PLATFORM(NETBSD) */
105 /* Operating system level dependencies for NetBSD that should be used */
106 /* regardless of operating environment */
107 #if defined(__NetBSD__)
108 #define WTF_PLATFORM_NETBSD 1
109 #endif
110
111 /* PLATFORM(UNIX) */
112 /* Operating system level dependencies for Unix-like systems that */
113 /* should be used regardless of operating environment */
114 #if   PLATFORM(DARWIN)     \
115    || PLATFORM(FREEBSD)    \
116    || PLATFORM(SYMBIAN)    \
117    || PLATFORM(NETBSD)     \
118    || defined(unix)        \
119    || defined(__unix)      \
120    || defined(__unix__)    \
121    || defined(_AIX)
122 #define WTF_PLATFORM_UNIX 1
123 #endif
124
125 /* Operating environments */
126
127 /* PLATFORM(CHROMIUM) */
128 /* PLATFORM(QT) */
129 /* PLATFORM(GTK) */
130 /* PLATFORM(MAC) */
131 /* PLATFORM(WIN) */
132 #if defined(BUILDING_CHROMIUM__)
133 #define WTF_PLATFORM_CHROMIUM 1
134 #elif defined(BUILDING_QT__)
135 #define WTF_PLATFORM_QT 1
136
137 /* PLATFORM(KDE) */
138 #if defined(BUILDING_KDE__)
139 #define WTF_PLATFORM_KDE 1
140 #endif
141
142 #elif defined(BUILDING_WX__)
143 #define WTF_PLATFORM_WX 1
144 #elif defined(BUILDING_GTK__)
145 #define WTF_PLATFORM_GTK 1
146 #elif PLATFORM(DARWIN)
147 #define WTF_PLATFORM_MAC 1
148 #elif PLATFORM(WIN_OS)
149 #define WTF_PLATFORM_WIN 1
150 #endif
151
152 /* PLATFORM(IPHONE) */
153 #if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
154 #define WTF_PLATFORM_IPHONE 1
155 #endif
156
157 /* PLATFORM(IPHONE_SIMULATOR) */
158 #if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
159 #define WTF_PLATFORM_IPHONE 1
160 #define WTF_PLATFORM_IPHONE_SIMULATOR 1
161 #else
162 #define WTF_PLATFORM_IPHONE_SIMULATOR 0
163 #endif
164
165 #if !defined(WTF_PLATFORM_IPHONE)
166 #define WTF_PLATFORM_IPHONE 0
167 #endif
168
169 /* Graphics engines */
170
171 /* PLATFORM(CG) and PLATFORM(CI) */
172 #if PLATFORM(MAC) || PLATFORM(IPHONE)
173 #define WTF_PLATFORM_CG 1
174 #endif
175 #if PLATFORM(MAC) && !PLATFORM(IPHONE)
176 #define WTF_PLATFORM_CI 1
177 #endif
178
179 /* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
180 #if PLATFORM(CHROMIUM)
181 #if PLATFORM(DARWIN)
182 #define WTF_PLATFORM_CG 1
183 #define WTF_PLATFORM_CI 1
184 #define WTF_USE_ATSUI 1
185 #else
186 #define WTF_PLATFORM_SKIA 1
187 #endif
188 #endif
189
190 /* Makes PLATFORM(WIN) default to PLATFORM(CAIRO) */
191 /* FIXME: This should be changed from a blacklist to a whitelist */
192 #if !PLATFORM(MAC) && !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM) && !PLATFORM(WINCE)
193 #define WTF_PLATFORM_CAIRO 1
194 #endif
195
196 /* CPU */
197
198 /* PLATFORM(PPC) */
199 #if   defined(__ppc__)     \
200    || defined(__PPC__)     \
201    || defined(__powerpc__) \
202    || defined(__powerpc)   \
203    || defined(__POWERPC__) \
204    || defined(_M_PPC)      \
205    || defined(__PPC)
206 #define WTF_PLATFORM_PPC 1
207 #define WTF_PLATFORM_BIG_ENDIAN 1
208 #endif
209
210 /* PLATFORM(PPC64) */
211 #if   defined(__ppc64__) \
212    || defined(__PPC64__)
213 #define WTF_PLATFORM_PPC64 1
214 #define WTF_PLATFORM_BIG_ENDIAN 1
215 #endif
216
217 /* PLATFORM(ARM) */
218 #if   defined(arm) \
219    || defined(__arm__)
220 #define WTF_PLATFORM_ARM 1
221 #if defined(__ARMEB__)
222 #define WTF_PLATFORM_BIG_ENDIAN 1
223 #elif !defined(__ARM_EABI__) && !defined(__ARMEB__) && !defined(__VFP_FP__)
224 #define WTF_PLATFORM_MIDDLE_ENDIAN 1
225 #endif
226 #if !defined(__ARM_EABI__)
227 #define WTF_PLATFORM_FORCE_PACK 1
228 #endif
229 #define ARM_ARCH_VERSION 3
230 #if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
231 #undef ARM_ARCH_VERSION
232 #define ARM_ARCH_VERSION 4
233 #endif
234 #if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
235         || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
236         || defined(__ARM_ARCH_5TEJ__)
237 #undef ARM_ARCH_VERSION
238 #define ARM_ARCH_VERSION 5
239 #endif
240 #if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
241      || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
242      || defined(__ARM_ARCH_6ZK__)
243 #undef ARM_ARCH_VERSION
244 #define ARM_ARCH_VERSION 6
245 #endif
246 #if defined(__ARM_ARCH_7A__)
247 #undef ARM_ARCH_VERSION
248 #define ARM_ARCH_VERSION 7
249 #endif
250 #endif /* ARM */
251 #define PLATFORM_ARM_ARCH(N) (PLATFORM(ARM) && ARM_ARCH_VERSION >= N)
252
253 /* PLATFORM(X86) */
254 #if   defined(__i386__) \
255    || defined(i386)     \
256    || defined(_M_IX86)  \
257    || defined(_X86_)    \
258    || defined(__THW_INTEL)
259 #define WTF_PLATFORM_X86 1
260 #endif
261
262 /* PLATFORM(X86_64) */
263 #if   defined(__x86_64__) \
264    || defined(_M_X64)
265 #define WTF_PLATFORM_X86_64 1
266 #endif
267
268 /* PLATFORM(SH4) */
269 #if defined(__SH4__)
270 #define WTF_PLATFORM_SH4 1
271 #endif
272
273 /* PLATFORM(SPARC64) */
274 #if defined(__sparc64__)
275 #define WTF_PLATFORM_SPARC64 1
276 #define WTF_PLATFORM_BIG_ENDIAN 1
277 #endif
278
279 /* PLATFORM(WINCE) && PLATFORM(QT)
280    We can not determine the endianess at compile time. For
281    Qt for Windows CE the endianess is specified in the
282    device specific makespec
283 */
284 #if PLATFORM(WINCE) && PLATFORM(QT)
285 #   include <QtGlobal>
286 #   undef WTF_PLATFORM_BIG_ENDIAN
287 #   undef WTF_PLATFORM_MIDDLE_ENDIAN
288 #   if Q_BYTE_ORDER == Q_BIG_EDIAN
289 #       define WTF_PLATFORM_BIG_ENDIAN 1
290 #   endif
291 #endif
292
293 /* Compiler */
294
295 /* COMPILER(MSVC) */
296 #if defined(_MSC_VER)
297 #define WTF_COMPILER_MSVC 1
298 #if _MSC_VER < 1400
299 #define WTF_COMPILER_MSVC7 1
300 #endif
301 #endif
302
303 /* COMPILER(RVCT) */
304 #if defined(__CC_ARM) || defined(__ARMCC__)
305 #define WTF_COMPILER_RVCT 1
306 #endif
307
308 /* COMPILER(GCC) */
309 /* --gnu option of the RVCT compiler also defines __GNUC__ */
310 #if defined(__GNUC__) && !COMPILER(RVCT)
311 #define WTF_COMPILER_GCC 1
312 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
313 #endif
314
315 /* COMPILER(MINGW) */
316 #if defined(MINGW) || defined(__MINGW32__)
317 #define WTF_COMPILER_MINGW 1
318 #endif
319
320 /* COMPILER(BORLAND) */
321 /* not really fully supported - is this relevant any more? */
322 #if defined(__BORLANDC__)
323 #define WTF_COMPILER_BORLAND 1
324 #endif
325
326 /* COMPILER(CYGWIN) */
327 /* not really fully supported - is this relevant any more? */
328 #if defined(__CYGWIN__)
329 #define WTF_COMPILER_CYGWIN 1
330 #endif
331
332 /* COMPILER(WINSCW) */
333 #if defined(__WINSCW__)
334 #define WTF_COMPILER_WINSCW 1
335 #endif
336
337 #if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
338 #define ENABLE_JSC_MULTIPLE_THREADS 1
339 #endif
340
341 /* On Windows, use QueryPerformanceCounter by default */
342 #if PLATFORM(WIN_OS)
343 #define WTF_USE_QUERY_PERFORMANCE_COUNTER  1
344 #endif
345
346 #if PLATFORM(WINCE) && !PLATFORM(QT)
347 #undef ENABLE_JSC_MULTIPLE_THREADS
348 #define ENABLE_JSC_MULTIPLE_THREADS        0
349 #define USE_SYSTEM_MALLOC                  0
350 #define ENABLE_ICONDATABASE                0
351 #define ENABLE_JAVASCRIPT_DEBUGGER         0
352 #define ENABLE_FTPDIR                      0
353 #define ENABLE_PAN_SCROLLING               0
354 #define ENABLE_WML                         1
355 #define HAVE_ACCESSIBILITY                 0
356
357 #define NOMINMAX       // Windows min and max conflict with standard macros
358 #define NOSHLWAPI      // shlwapi.h not available on WinCe
359
360 // MSDN documentation says these functions are provided with uspce.lib.  But we cannot find this file.
361 #define __usp10__      // disable "usp10.h"
362
363 #define _INC_ASSERT    // disable "assert.h"
364 #define assert(x)
365
366 // _countof is only included in CE6; for CE5 we need to define it ourself
367 #ifndef _countof
368 #define _countof(x) (sizeof(x) / sizeof((x)[0]))
369 #endif
370
371 #endif  /* PLATFORM(WINCE) && !PLATFORM(QT) */
372
373 /* for Unicode, KDE uses Qt */
374 #if PLATFORM(KDE) || PLATFORM(QT)
375 #define WTF_USE_QT4_UNICODE 1
376 #elif PLATFORM(GTK)
377 /* The GTK+ Unicode backend is configurable */
378 #else
379 #define WTF_USE_ICU_UNICODE 1
380 #endif
381
382 #if PLATFORM(MAC) && !PLATFORM(IPHONE)
383 #define WTF_PLATFORM_CF 1
384 #define WTF_USE_PTHREADS 1
385 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
386 #define ENABLE_MAC_JAVA_BRIDGE 1
387 #endif
388 #if !defined(ENABLE_DASHBOARD_SUPPORT)
389 #define ENABLE_DASHBOARD_SUPPORT 1
390 #endif
391 #define HAVE_READLINE 1
392 #define HAVE_RUNLOOP_TIMER 1
393 #endif
394
395 #if PLATFORM(CHROMIUM) && PLATFORM(DARWIN)
396 #define WTF_PLATFORM_CF 1
397 #define WTF_USE_PTHREADS 1
398 #endif
399
400 #if PLATFORM(IPHONE)
401 #define WTF_PLATFORM_CF 1
402 #define WTF_USE_PTHREADS 1
403 #define ENABLE_FTPDIR 1
404 #define ENABLE_MAC_JAVA_BRIDGE 0
405 #define ENABLE_ICONDATABASE 0
406 #define ENABLE_GEOLOCATION 1
407 #define ENABLE_NETSCAPE_PLUGIN_API 0
408 #define HAVE_READLINE 1
409 #define ENABLE_REPAINT_THROTTLING 1
410 #endif
411
412 #if PLATFORM(WIN)
413 #define WTF_USE_WININET 1
414 #endif
415
416 #if PLATFORM(WX)
417 #define ENABLE_ASSEMBLER 1
418 #define WTF_USE_CURL 1
419 #define WTF_USE_PTHREADS 1
420 #endif
421
422 #if PLATFORM(GTK)
423 #if HAVE(PTHREAD_H)
424 #define WTF_USE_PTHREADS 1
425 #endif
426 #endif
427
428 #if !defined(HAVE_ACCESSIBILITY)
429 #if PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM)
430 #define HAVE_ACCESSIBILITY 1
431 #endif
432 #endif /* !defined(HAVE_ACCESSIBILITY) */
433
434 #if PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
435 #define HAVE_SIGNAL_H 1
436 #endif
437
438 #if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !PLATFORM(SYMBIAN) && !COMPILER(RVCT)
439 #define HAVE_TM_GMTOFF 1
440 #define HAVE_TM_ZONE 1
441 #define HAVE_TIMEGM 1
442 #endif     
443
444 #if PLATFORM(DARWIN)
445
446 #define HAVE_ERRNO_H 1
447 #define HAVE_LANGINFO_H 1
448 #define HAVE_MMAP 1
449 #define HAVE_MERGESORT 1
450 #define HAVE_SBRK 1
451 #define HAVE_STRINGS_H 1
452 #define HAVE_SYS_PARAM_H 1
453 #define HAVE_SYS_TIME_H 1
454 #define HAVE_SYS_TIMEB_H 1
455
456 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE)
457 #define HAVE_MADV_FREE_REUSE 1
458 #define HAVE_MADV_FREE 1
459 #endif
460
461 #if PLATFORM(IPHONE)
462 #define HAVE_MADV_FREE 1
463 #endif
464
465 #elif PLATFORM(WIN_OS)
466
467 #define HAVE_FLOAT_H 1
468 #if PLATFORM(WINCE)
469 #define HAVE_ERRNO_H 0
470 #else
471 #define HAVE_SYS_TIMEB_H 1
472 #endif
473 #define HAVE_VIRTUALALLOC 1
474
475 #elif PLATFORM(SYMBIAN)
476
477 #define HAVE_ERRNO_H 1
478 #define HAVE_MMAP 0
479 #define HAVE_SBRK 1
480
481 #define HAVE_SYS_TIME_H 1
482 #define HAVE_STRINGS_H 1
483
484 #if !COMPILER(RVCT)
485 #define HAVE_SYS_PARAM_H 1
486 #endif
487
488 #else
489
490 /* FIXME: is this actually used or do other platforms generate their own config.h? */
491
492 #define HAVE_ERRNO_H 1
493 #define HAVE_LANGINFO_H 1
494 #define HAVE_MMAP 1
495 #define HAVE_SBRK 1
496 #define HAVE_STRINGS_H 1
497 #define HAVE_SYS_PARAM_H 1
498 #define HAVE_SYS_TIME_H 1
499
500 #endif
501
502 /* ENABLE macro defaults */
503
504 /* fastMalloc match validation allows for runtime verification that
505    new is matched by delete, fastMalloc is matched by fastFree, etc. */
506 #if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION)
507 #define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
508 #endif
509
510 #if !defined(ENABLE_ICONDATABASE)
511 #define ENABLE_ICONDATABASE 1
512 #endif
513
514 #if !defined(ENABLE_DATABASE)
515 #define ENABLE_DATABASE 1
516 #endif
517
518 #if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
519 #define ENABLE_JAVASCRIPT_DEBUGGER 1
520 #endif
521
522 #if !defined(ENABLE_FTPDIR)
523 #define ENABLE_FTPDIR 1
524 #endif
525
526 #if !defined(ENABLE_DASHBOARD_SUPPORT)
527 #define ENABLE_DASHBOARD_SUPPORT 0
528 #endif
529
530 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
531 #define ENABLE_MAC_JAVA_BRIDGE 0
532 #endif
533
534 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
535 #define ENABLE_NETSCAPE_PLUGIN_API 1
536 #endif
537
538 #if !defined(ENABLE_OPCODE_STATS)
539 #define ENABLE_OPCODE_STATS 0
540 #endif
541
542 #define ENABLE_SAMPLING_COUNTERS 0
543 #define ENABLE_SAMPLING_FLAGS 0
544 #define ENABLE_OPCODE_SAMPLING 0
545 #define ENABLE_CODEBLOCK_SAMPLING 0
546 #if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING)
547 #error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING"
548 #endif
549 #if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS)
550 #define ENABLE_SAMPLING_THREAD 1
551 #endif
552
553 #if !defined(ENABLE_GEOLOCATION)
554 #define ENABLE_GEOLOCATION 0
555 #endif
556
557 #if !defined(ENABLE_TEXT_CARET)
558 #define ENABLE_TEXT_CARET 1
559 #endif
560
561 #if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
562 #define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
563 #endif
564
565 #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
566 #if PLATFORM(X86_64) && (PLATFORM(MAC) || (PLATFORM(LINUX) && !PLATFORM(QT)))
567 #define WTF_USE_JSVALUE64 1
568 #elif PLATFORM(QT) /* All Qt layout tests crash in JSVALUE32_64 mode. */
569 #define WTF_USE_JSVALUE32 1
570 #else
571 #define WTF_USE_JSVALUE32_64 1
572 #endif
573 #endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) */
574
575 #if !defined(ENABLE_REPAINT_THROTTLING)
576 #define ENABLE_REPAINT_THROTTLING 0
577 #endif
578
579 #if !defined(ENABLE_JIT)
580
581 /* The JIT is tested & working on x86_64 Mac */
582 #if PLATFORM(X86_64) && PLATFORM(MAC)
583     #define ENABLE_JIT 1
584 /* The JIT is tested & working on x86 Mac */
585 #elif PLATFORM(X86) && PLATFORM(MAC)
586     #define ENABLE_JIT 1
587     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
588 #elif PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE)
589     /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */
590     #define ENABLE_JIT 0
591     #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 0
592 /* The JIT is tested & working on x86 Windows */
593 #elif PLATFORM(X86) && PLATFORM(WIN)
594     #define ENABLE_JIT 1
595 #endif
596
597 #if PLATFORM(X86) && PLATFORM(QT)
598 #if PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100
599     #define ENABLE_JIT 1
600     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
601 #elif PLATFORM(WIN_OS) && COMPILER(MSVC)
602     #define ENABLE_JIT 1
603     #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
604 #elif PLATFORM(LINUX) && GCC_VERSION >= 40100
605     #define ENABLE_JIT 1
606     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
607 #endif
608 #endif /* PLATFORM(QT) && PLATFORM(X86) */
609
610 #endif /* !defined(ENABLE_JIT) */
611
612 #if ENABLE(JIT)
613 #ifndef ENABLE_JIT_OPTIMIZE_CALL
614 #define ENABLE_JIT_OPTIMIZE_CALL 1
615 #endif
616 #ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
617 #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
618 #endif
619 #ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
620 #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
621 #endif
622 #ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS
623 #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
624 #endif
625 #endif
626
627 #if PLATFORM(X86) && COMPILER(MSVC)
628 #define JSC_HOST_CALL __fastcall
629 #elif PLATFORM(X86) && COMPILER(GCC)
630 #define JSC_HOST_CALL __attribute__ ((fastcall))
631 #else
632 #define JSC_HOST_CALL
633 #endif
634
635 #if COMPILER(GCC) && !ENABLE(JIT)
636 #define HAVE_COMPUTED_GOTO 1
637 #endif
638
639 #if ENABLE(JIT) && defined(COVERAGE)
640     #define WTF_USE_INTERPRETER 0
641 #else
642     #define WTF_USE_INTERPRETER 1
643 #endif
644
645 /* Yet Another Regex Runtime. */
646 #if !defined(ENABLE_YARR_JIT)
647
648 /* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */
649 #if (PLATFORM(X86) && PLATFORM(MAC)) \
650  || (PLATFORM(X86_64) && PLATFORM(MAC)) \
651  /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */ \
652  || (PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) && 0) \
653  || (PLATFORM(X86) && PLATFORM(WIN))
654 #define ENABLE_YARR 1
655 #define ENABLE_YARR_JIT 1
656 #endif
657
658 #if PLATFORM(X86) && PLATFORM(QT)
659 #if (PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
660  || (PLATFORM(WIN_OS) && COMPILER(MSVC)) \
661  || (PLATFORM(LINUX) && GCC_VERSION >= 40100)
662 #define ENABLE_YARR 1
663 #define ENABLE_YARR_JIT 1
664 #endif
665 #endif
666
667 #endif /* !defined(ENABLE_YARR_JIT) */
668
669 /* Sanity Check */
670 #if ENABLE(YARR_JIT) && !ENABLE(YARR)
671 #error "YARR_JIT requires YARR"
672 #endif
673
674 #if ENABLE(JIT) || ENABLE(YARR_JIT)
675 #define ENABLE_ASSEMBLER 1
676 #endif
677 /* Setting this flag prevents the assembler from using RWX memory; this may improve
678    security but currectly comes at a significant performance cost. */
679 #if PLATFORM(ARM)
680 #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
681 #else
682 #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
683 #endif
684
685 #if !defined(ENABLE_PAN_SCROLLING) && PLATFORM(WIN_OS)
686 #define ENABLE_PAN_SCROLLING 1
687 #endif
688
689 #if !defined(ENABLE_ACTIVEX_TYPE_CONVERSION_WMPLAYER)
690 #define ENABLE_ACTIVEX_TYPE_CONVERSION_WMPLAYER 1
691 #endif
692
693 /* Use the QtXmlStreamReader implementation for XMLTokenizer */
694 #if PLATFORM(QT)
695 #if !ENABLE(XSLT)
696 #define WTF_USE_QXMLSTREAM 1
697 #endif
698 #endif
699
700 #if !PLATFORM(QT)
701 #define WTF_USE_FONT_FAST_PATH 1
702 #endif
703
704 /* Accelerated compositing */
705 #if PLATFORM(MAC)
706 #if !defined(BUILDING_ON_TIGER)
707 #define WTF_USE_ACCELERATED_COMPOSITING 1
708 #endif
709 #endif
710
711 #if PLATFORM(IPHONE)
712 #define WTF_USE_ACCELERATED_COMPOSITING 1
713 #endif
714
715 #endif /* WTF_Platform_h */