| /* |
| * Copyright © 2006 Keith Packard |
| * Copyright © 2010 Behdad Esfahbod |
| * |
| * Permission to use, copy, modify, distribute, and sell this software and its |
| * documentation for any purpose is hereby granted without fee, provided that |
| * the above copyright notice appear in all copies and that both that |
| * copyright notice and this permission notice appear in supporting |
| * documentation, and that the name of the author(s) not be used in |
| * advertising or publicity pertaining to distribution of the software without |
| * specific, written prior permission. The authors make no |
| * representations about the suitability of this software for any purpose. It |
| * is provided "as is" without express or implied warranty. |
| * |
| * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, |
| * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO |
| * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR |
| * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, |
| * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| #ifndef _FCARCH_H_ |
| #define _FCARCH_H_ |
| |
| #ifdef HAVE_CONFIG_H |
| #include <config.h> |
| #endif |
| |
| /* |
| * Each unique machine architecture needs an entry in this file |
| * So far the differences boil down to: endianness, 32 vs 64 bit pointers, |
| * and on 32bit ones, whether double is aligned to one word or two words. |
| * Those result in the 6 formats listed below. |
| * |
| * If any of the assertion errors in fcarch.c fail, you need to add a new |
| * architecture. Contact the fontconfig mailing list in that case. |
| * |
| * name endianness pointer-size double-alignment |
| * |
| * le32d4 4321 4 4 |
| * le32d8 4321 4 8 |
| * le64 4321 8 8 |
| * be32d4 1234 4 4 |
| * be32d8 1234 4 8 |
| * be64 1234 8 8 |
| */ |
| |
| #if defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN |
| # define FC_ARCH_ENDIAN "le" |
| #elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN |
| # define FC_ARCH_ENDIAN "be" |
| #elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_PDP_ENDIAN |
| # define FC_ARCH_ENDIAN "pe" |
| #elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN |
| # define FC_ARCH_ENDIAN "be" |
| #else |
| # define FC_ARCH_ENDIAN "le" |
| #endif |
| |
| #if SIZEOF_VOID_P == 4 |
| # if ALIGNOF_DOUBLE == 4 |
| # define FC_ARCH_SIZE_ALIGN "32d4" |
| # else /* ALIGNOF_DOUBLE != 4 */ |
| # define FC_ARCH_SIZE_ALIGN "32d8" |
| # endif |
| #else /* SIZEOF_VOID_P != 4 */ |
| # define FC_ARCH_SIZE_ALIGN "64" |
| #endif |
| |
| /* config.h might override this */ |
| #ifndef FC_ARCHITECTURE |
| # define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN |
| #endif |
| |
| #endif /* _FCARCH_H_ */ |