mirror_zfs/include/sys/isa_defs.h
Jorgen Lundman d6e6e4a98e Add support for aarch64 (ARMv8)
Using the ARM reference simulation (fast model foundation v8) I
cross compiled spl and zfs, to confirm it works on ARMv8 (64 bit
arm architecture, called aarch64 in Linux).

As it is based on previous ARM porting, the resulting patch is
disappointingly small, there was very little to do. The code fixes
the compile issues and has light testing done.

Signed-off-by: Jorgen Lundman <lundman@lundman.net>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #351
2014-04-25 15:25:32 -07:00

149 lines
3.3 KiB
C

/*****************************************************************************\
* Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
* Copyright (C) 2007 The Regents of the University of California.
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
* Written by Brian Behlendorf <behlendorf1@llnl.gov>.
* UCRL-CODE-235197
*
* This file is part of the SPL, Solaris Porting Layer.
* For details, see <http://zfsonlinux.org/>.
*
* The SPL is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* The SPL is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
\*****************************************************************************/
#ifndef _SPL_ISA_DEFS_H
#define _SPL_ISA_DEFS_H
/* x86_64 arch specific defines */
#if defined(__x86_64) || defined(__x86_64__)
#if !defined(__x86_64)
#define __x86_64
#endif
#if !defined(__amd64)
#define __amd64
#endif
#if !defined(__x86)
#define __x86
#endif
#if !defined(_LP64)
#define _LP64
#endif
/* i386 arch specific defines */
#elif defined(__i386) || defined(__i386__)
#if !defined(__i386)
#define __i386
#endif
#if !defined(__x86)
#define __x86
#endif
#if !defined(_ILP32)
#define _ILP32
#endif
/* powerpc (ppc64) arch specific defines */
#elif defined(__powerpc) || defined(__powerpc__)
#if !defined(__powerpc)
#define __powerpc
#endif
#if !defined(__powerpc__)
#define __powerpc__
#endif
#if !defined(_LP64)
#define _LP64
#endif
/* arm arch specific defines */
#elif defined(__arm) || defined(__arm__) || defined(__aarch64__)
#if !defined(__arm)
#define __arm
#endif
#if !defined(__arm__)
#define __arm__
#endif
#if defined(__ARMEL__) || defined(__AARCH64EL__)
#define _LITTLE_ENDIAN
#else
#define _BIG_ENDIAN
#endif
/* sparc arch specific defines */
#elif defined(__sparc) || defined(__sparc__)
#if !defined(__sparc)
#define __sparc
#endif
#if !defined(__sparc__)
#define __sparc__
#endif
#define _BIG_ENDIAN
#define _SUNOS_VTOC_16
/* sparc64 arch specific defines */
#elif defined(__sparc64) || defined(__sparc64__)
#if !defined(__sparc64)
#define __sparc64
#endif
#if !defined(__sparc64__)
#define __sparc64__
#endif
#define _BIG_ENDIAN
#define _SUNOS_VTOC_16
#else /* Currently x86_64, i386, arm, powerpc, and sparc are supported */
#error "Unsupported ISA type"
#endif
#if defined(_ILP32) && defined(_LP64)
#error "Both _ILP32 and _LP64 are defined"
#endif
#include <sys/byteorder.h>
#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN)
#define _LITTLE_ENDIAN __LITTLE_ENDIAN
#endif
#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN)
#define _BIG_ENDIAN __BIG_ENDIAN
#endif
#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined"
#endif
#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
#error "Neither _LITTLE_ENDIAN or _BIG_ENDIAN are defined"
#endif
#endif /* _SPL_ISA_DEFS_H */