The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/include/os/freebsd/spl/sys/isa_defs.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  *
   14  * When distributing Covered Code, include this CDDL HEADER in each
   15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   16  * If applicable, add the following below this CDDL HEADER, with the
   17  * fields enclosed by brackets "[]" replaced with your own identifying
   18  * information: Portions Copyright [yyyy] [name of copyright owner]
   19  *
   20  * CDDL HEADER END
   21  */
   22 
   23 /*
   24  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
   25  * Use is subject to license terms.
   26  */
   27 
   28 #ifndef _SYS_ISA_DEFS_H
   29 #define _SYS_ISA_DEFS_H
   30 #include <sys/endian.h>
   31 
   32 /*
   33  * This header file serves to group a set of well known defines and to
   34  * set these for each instruction set architecture.  These defines may
   35  * be divided into two groups;  characteristics of the processor and
   36  * implementation choices for Solaris on a processor.
   37  *
   38  * Processor Characteristics:
   39  *
   40  * _LITTLE_ENDIAN / _BIG_ENDIAN:
   41  *      The natural byte order of the processor.  A pointer to an int points
   42  *      to the least/most significant byte of that int.
   43  *
   44  *
   45  * Implementation Choices:
   46  *
   47  * _ILP32 / _LP64:
   48  *      This specifies the compiler data type implementation as specified in
   49  *      the relevant ABI.  The choice between these is strongly influenced
   50  *      by the underlying hardware, but is not absolutely tied to it.
   51  *      Currently only two data type models are supported:
   52  *
   53  *      _ILP32:
   54  *              Int/Long/Pointer are 32 bits.  This is the historical UNIX
   55  *              and Solaris implementation.  Due to its historical standing,
   56  *              this is the default case.
   57  *
   58  *      _LP64:
   59  *              Long/Pointer are 64 bits, Int is 32 bits.  This is the chosen
   60  *              implementation for 64-bit ABIs such as SPARC V9.
   61  *
   62  *      In all cases, Char is 8 bits and Short is 16 bits.
   63  *
   64  * _SUNOS_VTOC_8 / _SUNOS_VTOC_16 / _SVR4_VTOC_16:
   65  *      This specifies the form of the disk VTOC (or label):
   66  *
   67  *      _SUNOS_VTOC_8:
   68  *              This is a VTOC form which is upwardly compatible with the
   69  *              SunOS 4.x disk label and allows 8 partitions per disk.
   70  *
   71  *      _SUNOS_VTOC_16:
   72  *              In this format the incore vtoc image matches the ondisk
   73  *              version.  It allows 16 slices per disk, and is not
   74  *              compatible with the SunOS 4.x disk label.
   75  *
   76  *      Note that these are not the only two VTOC forms possible and
   77  *      additional forms may be added.  One possible form would be the
   78  *      SVr4 VTOC form.  The symbol for that is reserved now, although
   79  *      it is not implemented.
   80  *
   81  *      _SVR4_VTOC_16:
   82  *              This VTOC form is compatible with the System V Release 4
   83  *              VTOC (as implemented on the SVr4 Intel and 3b ports) with
   84  *              16 partitions per disk.
   85  *
   86  *
   87  * __x86
   88  *      This is ONLY a synonym for defined(__i386) || defined(__amd64)
   89  *      which is useful only insofar as these two architectures share
   90  *      common attributes.  Analogous to __sparc.
   91  */
   92 
   93 #ifdef  __cplusplus
   94 extern "C" {
   95 #endif
   96 
   97 /*
   98  * The following set of definitions characterize Solaris on AMD's
   99  * 64-bit systems.
  100  */
  101 #if defined(__x86_64) || defined(__amd64)
  102 
  103 #if !defined(__amd64)
  104 #define __amd64         /* preferred guard */
  105 #endif
  106 
  107 #if !defined(__x86)
  108 #define __x86
  109 #endif
  110 
  111 /*
  112  * Define the appropriate "implementation choices".
  113  */
  114 #if !defined(_LP64)
  115 #error "_LP64 not defined"
  116 #endif
  117 #define _SUNOS_VTOC_16
  118 
  119 /*
  120  * The feature test macro __i386 is generic for all processors implementing
  121  * the Intel 386 instruction set or a superset of it.  Specifically, this
  122  * includes all members of the 386, 486, and Pentium family of processors.
  123  */
  124 #elif defined(__i386) || defined(__i386__)
  125 
  126 #if !defined(__i386)
  127 #define __i386
  128 #endif
  129 
  130 #if !defined(__x86)
  131 #define __x86
  132 #endif
  133 
  134 /*
  135  * Define the appropriate "implementation choices".
  136  */
  137 #if !defined(_ILP32)
  138 #define _ILP32
  139 #endif
  140 #define _SUNOS_VTOC_16
  141 
  142 #elif defined(__aarch64__)
  143 
  144 /*
  145  * Define the appropriate "implementation choices"
  146  */
  147 #if !defined(_LP64)
  148 #error "_LP64 not defined"
  149 #endif
  150 #define _SUNOS_VTOC_16
  151 
  152 #elif defined(__riscv)
  153 
  154 /*
  155  * Define the appropriate "implementation choices"
  156  */
  157 #if !defined(_LP64)
  158 #define _LP64
  159 #endif
  160 #define _SUNOS_VTOC_16
  161 
  162 #elif defined(__arm__)
  163 
  164 /*
  165  * Define the appropriate "implementation choices".
  166  */
  167 #if !defined(_ILP32)
  168 #define _ILP32
  169 #endif
  170 #define _SUNOS_VTOC_16
  171 
  172 #elif defined(__mips__)
  173 
  174 #if defined(__mips_n64)
  175 /*
  176  * Define the appropriate "implementation choices".
  177  */
  178 #if !defined(_LP64)
  179 #error "_LP64 not defined"
  180 #endif
  181 #else
  182 /*
  183  * Define the appropriate "implementation choices".
  184  */
  185 #if !defined(_ILP32)
  186 #define _ILP32
  187 #endif
  188 #endif
  189 #define _SUNOS_VTOC_16
  190 
  191 #elif defined(__powerpc__)
  192 
  193 #if !defined(__powerpc)
  194 #define __powerpc
  195 #endif
  196 
  197 #define _SUNOS_VTOC_16  1
  198 
  199 /*
  200  * The following set of definitions characterize the Solaris on SPARC systems.
  201  *
  202  * The symbol __sparc indicates any of the SPARC family of processor
  203  * architectures.  This includes SPARC V7, SPARC V8 and SPARC V9.
  204  *
  205  * The symbol __sparcv8 indicates the 32-bit SPARC V8 architecture as defined
  206  * by Version 8 of the SPARC Architecture Manual.  (SPARC V7 is close enough
  207  * to SPARC V8 for the former to be subsumed into the latter definition.)
  208  *
  209  * The symbol __sparcv9 indicates the 64-bit SPARC V9 architecture as defined
  210  * by Version 9 of the SPARC Architecture Manual.
  211  *
  212  * The symbols __sparcv8 and __sparcv9 are mutually exclusive, and are only
  213  * relevant when the symbol __sparc is defined.
  214  */
  215 /*
  216  * XXX Due to the existence of 5110166, "defined(__sparcv9)" needs to be added
  217  * to support backwards builds.  This workaround should be removed in s10_71.
  218  */
  219 #elif defined(__sparc) || defined(__sparcv9) || defined(__sparc__)
  220 #if !defined(__sparc)
  221 #define __sparc
  222 #endif
  223 
  224 /*
  225  * You can be 32-bit or 64-bit, but not both at the same time.
  226  */
  227 #if defined(__sparcv8) && defined(__sparcv9)
  228 #error  "SPARC Versions 8 and 9 are mutually exclusive choices"
  229 #endif
  230 
  231 /*
  232  * Existing compilers do not set __sparcv8.  Years will transpire before
  233  * the compilers can be depended on to set the feature test macro. In
  234  * the interim, we'll set it here on the basis of historical behaviour;
  235  * if you haven't asked for SPARC V9, then you must've meant SPARC V8.
  236  */
  237 #if !defined(__sparcv9) && !defined(__sparcv8)
  238 #define __sparcv8
  239 #endif
  240 
  241 /*
  242  * Define the appropriate "implementation choices" shared between versions.
  243  */
  244 #define _SUNOS_VTOC_8
  245 
  246 /*
  247  * The following set of definitions characterize the implementation of
  248  * 32-bit Solaris on SPARC V8 systems.
  249  */
  250 #if defined(__sparcv8)
  251 
  252 /*
  253  * Define the appropriate "implementation choices"
  254  */
  255 #define _ILP32
  256 
  257 /*
  258  * The following set of definitions characterize the implementation of
  259  * 64-bit Solaris on SPARC V9 systems.
  260  */
  261 #elif defined(__sparcv9)
  262 
  263 /*
  264  * Define the appropriate "implementation choices"
  265  */
  266 #if !defined(_LP64)
  267 #error "_LP64 not defined"
  268 #endif
  269 
  270 #else
  271 #error  "unknown SPARC version"
  272 #endif
  273 
  274 /*
  275  * #error is strictly ansi-C, but works as well as anything for K&R systems.
  276  */
  277 #else
  278 #error "ISA not supported"
  279 #endif
  280 
  281 #if defined(_ILP32) && defined(_LP64)
  282 #error "Both _ILP32 and _LP64 are defined"
  283 #endif
  284 
  285 #if BYTE_ORDER == _BIG_ENDIAN
  286 #define _ZFS_BIG_ENDIAN
  287 #elif BYTE_ORDER == _LITTLE_ENDIAN
  288 #define _ZFS_LITTLE_ENDIAN
  289 #else
  290 #error "unknown byte order"
  291 #endif
  292 
  293 #ifdef  __cplusplus
  294 }
  295 #endif
  296 
  297 #endif  /* _SYS_ISA_DEFS_H */

Cache object: 26836587425ba3347b3659c2cc88ff19


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.