diff --git a/include/os/linux/spl/sys/isa_defs.h b/include/os/linux/spl/sys/isa_defs.h index a032aae91658..ee3b7460790f 100644 --- a/include/os/linux/spl/sys/isa_defs.h +++ b/include/os/linux/spl/sys/isa_defs.h @@ -1,260 +1,264 @@ /* * 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 . * UCRL-CODE-235197 * * This file is part of the SPL, Solaris Porting Layer. * * 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 . */ #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(_ILP32) /* x32-specific defines; careful to *not* define _LP64 here */ #else #if !defined(_LP64) #define _LP64 #endif #endif #define _ALIGNMENT_REQUIRED 1 /* 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 #define _ALIGNMENT_REQUIRED 0 /* powerpc (ppc64) arch specific defines */ #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) #if !defined(__powerpc) #define __powerpc #endif #if !defined(__powerpc__) #define __powerpc__ #endif #if defined(__powerpc64__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif /* * Illumos doesn't define _ALIGNMENT_REQUIRED for PPC, so default to 1 * out of paranoia. */ #define _ALIGNMENT_REQUIRED 1 /* arm arch specific defines */ #elif defined(__arm) || defined(__arm__) #if !defined(__arm) #define __arm #endif #if !defined(__arm__) #define __arm__ #endif #if !defined(_ILP32) #define _ILP32 #endif #if defined(__ARMEL__) #define _ZFS_LITTLE_ENDIAN #else #define _ZFS_BIG_ENDIAN #endif /* * Illumos doesn't define _ALIGNMENT_REQUIRED for ARM, so default to 1 * out of paranoia. */ #define _ALIGNMENT_REQUIRED 1 /* aarch64 arch specific defines */ #elif defined(__aarch64__) #if !defined(_LP64) #define _LP64 #endif #if defined(__AARCH64EL__) #define _ZFS_LITTLE_ENDIAN #else #define _ZFS_BIG_ENDIAN #endif /* sparc arch specific defines */ #elif defined(__sparc) || defined(__sparc__) #if !defined(__sparc) #define __sparc #endif #if !defined(__sparc__) #define __sparc__ #endif #if defined(__arch64__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif #define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 #define _ALIGNMENT_REQUIRED 1 /* s390 arch specific defines */ #elif defined(__s390__) #if defined(__s390x__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif #define _ZFS_BIG_ENDIAN /* * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1 * out of paranoia. */ #define _ALIGNMENT_REQUIRED 1 /* MIPS arch specific defines */ #elif defined(__mips__) #if defined(__MIPSEB__) #define _ZFS_BIG_ENDIAN #elif defined(__MIPSEL__) #define _ZFS_LITTLE_ENDIAN #else #error MIPS no endian specified #endif #ifndef _LP64 #define _ILP32 #endif #define _SUNOS_VTOC_16 /* * Illumos doesn't define _ALIGNMENT_REQUIRED for MIPS, so default to 1 * out of paranoia. */ #define _ALIGNMENT_REQUIRED 1 /* * RISC-V arch specific defines * only RV64G (including atomic) LP64 is supported yet */ -#elif defined(__riscv) && defined(_LP64) && _LP64 && \ +#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 && \ defined(__riscv_atomic) && __riscv_atomic +#if !defined(_LP64) +#define _LP64 1 +#endif + #ifndef __riscv__ #define __riscv__ #endif #ifndef __rv64g__ #define __rv64g__ #endif #define _ZFS_LITTLE_ENDIAN #define _SUNOS_VTOC_16 #define _ALIGNMENT_REQUIRED 1 #else /* * Currently supported: * x86_64, x32, i386, arm, powerpc, s390, sparc, mips, and RV64G */ #error "Unsupported ISA type" #endif #if defined(_ILP32) && defined(_LP64) #error "Both _ILP32 and _LP64 are defined" #endif #if !defined(_ILP32) && !defined(_LP64) #error "Neither _ILP32 or _LP64 are defined" #endif #include /* * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS will be defined by the Linux * kernel for architectures which support efficient unaligned access. */ #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) #define HAVE_EFFICIENT_UNALIGNED_ACCESS #endif #if defined(_ZFS_LITTLE_ENDIAN) && defined(_ZFS_BIG_ENDIAN) #error "Both _ZFS_LITTLE_ENDIAN and _ZFS_BIG_ENDIAN are defined" #endif #if !defined(_ZFS_LITTLE_ENDIAN) && !defined(_ZFS_BIG_ENDIAN) #error "Neither _ZFS_LITTLE_ENDIAN or _ZFS_BIG_ENDIAN are defined" #endif #endif /* _SPL_ISA_DEFS_H */ diff --git a/lib/libspl/include/sys/isa_defs.h b/lib/libspl/include/sys/isa_defs.h index 756adff15ac8..114cca4f1545 100644 --- a/lib/libspl/include/sys/isa_defs.h +++ b/lib/libspl/include/sys/isa_defs.h @@ -1,273 +1,277 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_ISA_DEFS_H #define _SYS_ISA_DEFS_H #ifdef __cplusplus extern "C" { #endif /* 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(_ILP32) /* x32-specific defines; careful to *not* define _LP64 here */ #else #if !defined(_LP64) #define _LP64 #endif #endif #if !defined(_ZFS_LITTLE_ENDIAN) #define _ZFS_LITTLE_ENDIAN #endif #define _SUNOS_VTOC_16 #define HAVE_EFFICIENT_UNALIGNED_ACCESS /* 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 #if !defined(_ZFS_LITTLE_ENDIAN) #define _ZFS_LITTLE_ENDIAN #endif #define _SUNOS_VTOC_16 #define HAVE_EFFICIENT_UNALIGNED_ACCESS /* powerpc arch specific defines */ #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) #if !defined(__powerpc) #define __powerpc #endif #if !defined(__powerpc__) #define __powerpc__ #endif #if defined(__powerpc64__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif #define _SUNOS_VTOC_16 #define HAVE_EFFICIENT_UNALIGNED_ACCESS #if defined(__BYTE_ORDER) #if defined(__BIG_ENDIAN) && __BYTE_ORDER == __BIG_ENDIAN #define _ZFS_BIG_ENDIAN #elif defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN #define _ZFS_LITTLE_ENDIAN #endif #elif defined(_BYTE_ORDER) #if defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN #define _ZFS_BIG_ENDIAN #elif defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN #define _ZFS_LITTLE_ENDIAN #endif #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) #define _ZFS_BIG_ENDIAN #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) #define _ZFS_LITTLE_ENDIAN #endif /* arm arch specific defines */ #elif defined(__arm) || defined(__arm__) #if !defined(__arm) #define __arm #endif #if !defined(__arm__) #define __arm__ #endif #if !defined(_ILP32) #define _ILP32 #endif #if defined(__ARMEL__) #define _ZFS_LITTLE_ENDIAN #else #define _ZFS_BIG_ENDIAN #endif #define _SUNOS_VTOC_16 #if defined(__ARM_FEATURE_UNALIGNED) #define HAVE_EFFICIENT_UNALIGNED_ACCESS #endif /* aarch64 arch specific defines */ #elif defined(__aarch64__) #if !defined(_LP64) #define _LP64 #endif #if defined(__AARCH64EL__) #define _ZFS_LITTLE_ENDIAN #else #define _ZFS_BIG_ENDIAN #endif #define _SUNOS_VTOC_16 /* sparc arch specific defines */ #elif defined(__sparc) || defined(__sparc__) #if !defined(__sparc) #define __sparc #endif #if !defined(__sparc__) #define __sparc__ #endif #define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 #if defined(__arch64__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif /* s390 arch specific defines */ #elif defined(__s390__) #if defined(__s390x__) #if !defined(_LP64) #define _LP64 #endif #else #if !defined(_ILP32) #define _ILP32 #endif #endif #define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 /* MIPS arch specific defines */ #elif defined(__mips__) #if defined(__MIPSEB__) #define _ZFS_BIG_ENDIAN #elif defined(__MIPSEL__) #define _ZFS_LITTLE_ENDIAN #else #error MIPS no endian specified #endif #if !defined(_LP64) && !defined(_ILP32) #define _ILP32 #endif #define _SUNOS_VTOC_16 /* * RISC-V arch specific defines * only RV64G (including atomic) LP64 is supported yet */ -#elif defined(__riscv) && defined(_LP64) && _LP64 && \ +#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 && \ defined(__riscv_atomic) && __riscv_atomic +#if !defined(_LP64) +#define _LP64 1 +#endif + #ifndef __riscv__ #define __riscv__ #endif #ifndef __rv64g__ #define __rv64g__ #endif #define _ZFS_LITTLE_ENDIAN #define _SUNOS_VTOC_16 #else /* * Currently supported: * x86_64, x32, i386, arm, powerpc, s390, sparc, mips, and RV64G */ #error "Unsupported ISA type" #endif #if defined(_ILP32) && defined(_LP64) #error "Both _ILP32 and _LP64 are defined" #endif #if !defined(_ILP32) && !defined(_LP64) #error "Neither _ILP32 or _LP64 are defined" #endif #if defined(_ZFS_LITTLE_ENDIAN) && defined(_ZFS_BIG_ENDIAN) #error "Both _ZFS_LITTLE_ENDIAN and _ZFS_BIG_ENDIAN are defined" #endif #if !defined(_ZFS_LITTLE_ENDIAN) && !defined(_ZFS_BIG_ENDIAN) #error "Neither _ZFS_LITTLE_ENDIAN nor _ZFS_BIG_ENDIAN are defined" #endif #ifdef __cplusplus } #endif #endif /* _SYS_ISA_DEFS_H */