Bumping manifests a=b2g-bump
[gecko.git] / js / src / jscpucfg.h
bloba641e523ba99a434f4d089c1109ae9ff968fd952
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 * vim: set ts=8 sts=4 et sw=4 tw=99:
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef jscpucfg_h
8 #define jscpucfg_h
10 #define JS_HAVE_LONG_LONG
12 #if defined(_WIN64)
14 # if defined(_M_X64) || defined(_M_AMD64) || defined(_AMD64_)
15 # define IS_LITTLE_ENDIAN 1
16 # undef IS_BIG_ENDIAN
17 # else /* !(defined(_M_X64) || defined(_M_AMD64) || defined(_AMD64_)) */
18 # error "CPU type is unknown"
19 # endif /* !(defined(_M_X64) || defined(_M_AMD64) || defined(_AMD64_)) */
21 #elif defined(_WIN32)
23 # ifdef __WATCOMC__
24 # define HAVE_VA_LIST_AS_ARRAY 1
25 # endif
27 # define IS_LITTLE_ENDIAN 1
28 # undef IS_BIG_ENDIAN
30 #elif defined(__APPLE__) || defined(__powerpc__) || defined(__ppc__)
31 # if __LITTLE_ENDIAN__
32 # define IS_LITTLE_ENDIAN 1
33 # undef IS_BIG_ENDIAN
34 # elif __BIG_ENDIAN__
35 # undef IS_LITTLE_ENDIAN
36 # define IS_BIG_ENDIAN 1
37 # endif
39 #elif defined(JS_HAVE_ENDIAN_H)
40 # include <endian.h>
43 * Historically, OSes providing <endian.h> only defined
44 * __BYTE_ORDER to either __LITTLE_ENDIAN or __BIG_ENDIAN.
45 * The Austin group decided to standardise <endian.h> in
46 * POSIX around 2011, expecting it to provide a BYTE_ORDER
47 * #define set to either LITTLE_ENDIAN or BIG_ENDIAN. We
48 * should try to cope with both possibilities here.
51 # if defined(__BYTE_ORDER) || defined(BYTE_ORDER)
52 # if defined(__BYTE_ORDER)
53 # if __BYTE_ORDER == __LITTLE_ENDIAN
54 # define IS_LITTLE_ENDIAN 1
55 # undef IS_BIG_ENDIAN
56 # elif __BYTE_ORDER == __BIG_ENDIAN
57 # undef IS_LITTLE_ENDIAN
58 # define IS_BIG_ENDIAN 1
59 # endif
60 # endif
61 # if defined(BYTE_ORDER)
62 # if BYTE_ORDER == LITTLE_ENDIAN
63 # define IS_LITTLE_ENDIAN 1
64 # undef IS_BIG_ENDIAN
65 # elif BYTE_ORDER == BIG_ENDIAN
66 # undef IS_LITTLE_ENDIAN
67 # define IS_BIG_ENDIAN 1
68 # endif
69 # endif
70 # else /* !defined(__BYTE_ORDER) */
71 # error "endian.h does not define __BYTE_ORDER nor BYTE_ORDER. Cannot determine endianness."
72 # endif
74 /* BSDs */
75 #elif defined(JS_HAVE_MACHINE_ENDIAN_H)
76 # include <sys/types.h>
77 # include <machine/endian.h>
79 # if defined(_BYTE_ORDER)
80 # if _BYTE_ORDER == _LITTLE_ENDIAN
81 # define IS_LITTLE_ENDIAN 1
82 # undef IS_BIG_ENDIAN
83 # elif _BYTE_ORDER == _BIG_ENDIAN
84 # undef IS_LITTLE_ENDIAN
85 # define IS_BIG_ENDIAN 1
86 # endif
87 # else /* !defined(_BYTE_ORDER) */
88 # error "machine/endian.h does not define _BYTE_ORDER. Cannot determine endianness."
89 # endif
91 #elif defined(JS_HAVE_SYS_ISA_DEFS_H)
92 # include <sys/isa_defs.h>
94 # if defined(_BIG_ENDIAN)
95 # undef IS_LITTLE_ENDIAN
96 # define IS_BIG_ENDIAN 1
97 # elif defined(_LITTLE_ENDIAN)
98 # define IS_LITTLE_ENDIAN 1
99 # undef IS_BIG_ENDIAN
100 # else /* !defined(_LITTLE_ENDIAN) */
101 # error "sys/isa_defs.h does not define _BIG_ENDIAN or _LITTLE_ENDIAN. Cannot determine endianness."
102 # endif
103 # if !defined(JS_STACK_GROWTH_DIRECTION)
104 # if defined(_STACK_GROWS_UPWARD)
105 # define JS_STACK_GROWTH_DIRECTION (1)
106 # elif defined(_STACK_GROWS_DOWNWARD)
107 # define JS_STACK_GROWTH_DIRECTION (-1)
108 # endif
109 # endif
111 #elif defined(__sparc) || defined(__sparc__) || \
112 defined(_POWER) || defined(__hppa) || \
113 defined(_MIPSEB) || defined(_BIG_ENDIAN)
114 /* IA64 running HP-UX will have _BIG_ENDIAN defined.
115 * IA64 running Linux will have endian.h and be handled above.
117 # undef IS_LITTLE_ENDIAN
118 # define IS_BIG_ENDIAN 1
120 #else /* !defined(__sparc) && !defined(__sparc__) && ... */
121 # error "Cannot determine endianness of your platform. Please add support to jscpucfg.h."
122 #endif
124 #ifndef JS_STACK_GROWTH_DIRECTION
125 # ifdef __hppa
126 # define JS_STACK_GROWTH_DIRECTION (1)
127 # else
128 # define JS_STACK_GROWTH_DIRECTION (-1)
129 # endif
130 #endif
132 #endif /* jscpucfg_h */