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/cddl/contrib/opensolaris/uts/common/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 http://www.opensolaris.org/os/licensing.
   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 
   31 /*
   32  * This header file serves to group a set of well known defines and to
   33  * set these for each instruction set architecture.  These defines may
   34  * be divided into two groups;  characteristics of the processor and
   35  * implementation choices for Solaris on a processor.
   36  *
   37  * Processor Characteristics:
   38  *
   39  * _LITTLE_ENDIAN / _BIG_ENDIAN:
   40  *      The natural byte order of the processor.  A pointer to an int points
   41  *      to the least/most significant byte of that int.
   42  *
   43  * _STACK_GROWS_UPWARD / _STACK_GROWS_DOWNWARD:
   44  *      The processor specific direction of stack growth.  A push onto the
   45  *      stack increases/decreases the stack pointer, so it stores data at
   46  *      successively higher/lower addresses.  (Stackless machines ignored
   47  *      without regrets).
   48  *
   49  * _LONG_LONG_HTOL / _LONG_LONG_LTOH:
   50  *      A pointer to a long long points to the most/least significant long
   51  *      within that long long.
   52  *
   53  * _BIT_FIELDS_HTOL / _BIT_FIELDS_LTOH:
   54  *      The C compiler assigns bit fields from the high/low to the low/high end
   55  *      of an int (most to least significant vs. least to most significant).
   56  *
   57  * _IEEE_754:
   58  *      The processor (or supported implementations of the processor)
   59  *      supports the ieee-754 floating point standard.  No other floating
   60  *      point standards are supported (or significant).  Any other supported
   61  *      floating point formats are expected to be cased on the ISA processor
   62  *      symbol.
   63  *
   64  * _CHAR_IS_UNSIGNED / _CHAR_IS_SIGNED:
   65  *      The C Compiler implements objects of type `char' as `unsigned' or
   66  *      `signed' respectively.  This is really an implementation choice of
   67  *      the compiler writer, but it is specified in the ABI and tends to
   68  *      be uniform across compilers for an instruction set architecture.
   69  *      Hence, it has the properties of a processor characteristic.
   70  *
   71  * _CHAR_ALIGNMENT / _SHORT_ALIGNMENT / _INT_ALIGNMENT / _LONG_ALIGNMENT /
   72  * _LONG_LONG_ALIGNMENT / _DOUBLE_ALIGNMENT / _LONG_DOUBLE_ALIGNMENT /
   73  * _POINTER_ALIGNMENT / _FLOAT_ALIGNMENT:
   74  *      The ABI defines alignment requirements of each of the primitive
   75  *      object types.  Some, if not all, may be hardware requirements as
   76  *      well.  The values are expressed in "byte-alignment" units.
   77  *
   78  * _MAX_ALIGNMENT:
   79  *      The most stringent alignment requirement as specified by the ABI.
   80  *      Equal to the maximum of all the above _XXX_ALIGNMENT values.
   81  *
   82  * _ALIGNMENT_REQUIRED:
   83  *      True or false (1 or 0) whether or not the hardware requires the ABI
   84  *      alignment.
   85  *
   86  * _LONG_LONG_ALIGNMENT_32
   87  *      The 32-bit ABI supported by a 64-bit kernel may have different
   88  *      alignment requirements for primitive object types.  The value of this
   89  *      identifier is expressed in "byte-alignment" units.
   90  *
   91  * _HAVE_CPUID_INSN
   92  *      This indicates that the architecture supports the 'cpuid'
   93  *      instruction as defined by Intel.  (Intel allows other vendors
   94  *      to extend the instruction for their own purposes.)
   95  *
   96  *
   97  * Implementation Choices:
   98  *
   99  * _ILP32 / _LP64:
  100  *      This specifies the compiler data type implementation as specified in
  101  *      the relevant ABI.  The choice between these is strongly influenced
  102  *      by the underlying hardware, but is not absolutely tied to it.
  103  *      Currently only two data type models are supported:
  104  *
  105  *      _ILP32:
  106  *              Int/Long/Pointer are 32 bits.  This is the historical UNIX
  107  *              and Solaris implementation.  Due to its historical standing,
  108  *              this is the default case.
  109  *
  110  *      _LP64:
  111  *              Long/Pointer are 64 bits, Int is 32 bits.  This is the chosen
  112  *              implementation for 64-bit ABIs such as SPARC V9.
  113  *
  114  *      _I32LPx:
  115  *              A compilation environment where 'int' is 32-bit, and
  116  *              longs and pointers are simply the same size.
  117  *
  118  *      In all cases, Char is 8 bits and Short is 16 bits.
  119  *
  120  * _SUNOS_VTOC_8 / _SUNOS_VTOC_16 / _SVR4_VTOC_16:
  121  *      This specifies the form of the disk VTOC (or label):
  122  *
  123  *      _SUNOS_VTOC_8:
  124  *              This is a VTOC form which is upwardly compatible with the
  125  *              SunOS 4.x disk label and allows 8 partitions per disk.
  126  *
  127  *      _SUNOS_VTOC_16:
  128  *              In this format the incore vtoc image matches the ondisk
  129  *              version.  It allows 16 slices per disk, and is not
  130  *              compatible with the SunOS 4.x disk label.
  131  *
  132  *      Note that these are not the only two VTOC forms possible and
  133  *      additional forms may be added.  One possible form would be the
  134  *      SVr4 VTOC form.  The symbol for that is reserved now, although
  135  *      it is not implemented.
  136  *
  137  *      _SVR4_VTOC_16:
  138  *              This VTOC form is compatible with the System V Release 4
  139  *              VTOC (as implemented on the SVr4 Intel and 3b ports) with
  140  *              16 partitions per disk.
  141  *
  142  *
  143  * _DMA_USES_PHYSADDR / _DMA_USES_VIRTADDR
  144  *      This describes the type of addresses used by system DMA:
  145  *
  146  *      _DMA_USES_PHYSADDR:
  147  *              This type of DMA, used in the x86 implementation,
  148  *              requires physical addresses for DMA buffers.  The 24-bit
  149  *              addresses used by some legacy boards is the source of the
  150  *              "low-memory" (<16MB) requirement for some devices using DMA.
  151  *
  152  *      _DMA_USES_VIRTADDR:
  153  *              This method of DMA allows the use of virtual addresses for
  154  *              DMA transfers.
  155  *
  156  * _FIRMWARE_NEEDS_FDISK / _NO_FDISK_PRESENT
  157  *      This indicates the presence/absence of an fdisk table.
  158  *
  159  *      _FIRMWARE_NEEDS_FDISK
  160  *              The fdisk table is required by system firmware.  If present,
  161  *              it allows a disk to be subdivided into multiple fdisk
  162  *              partitions, each of which is equivalent to a separate,
  163  *              virtual disk.  This enables the co-existence of multiple
  164  *              operating systems on a shared hard disk.
  165  *
  166  *      _NO_FDISK_PRESENT
  167  *              If the fdisk table is absent, it is assumed that the entire
  168  *              media is allocated for a single operating system.
  169  *
  170  * _HAVE_TEM_FIRMWARE
  171  *      Defined if this architecture has the (fallback) option of
  172  *      using prom_* calls for doing I/O if a suitable kernel driver
  173  *      is not available to do it.
  174  *
  175  * _DONT_USE_1275_GENERIC_NAMES
  176  *              Controls whether or not device tree node names should
  177  *              comply with the IEEE 1275 "Generic Names" Recommended
  178  *              Practice. With _DONT_USE_GENERIC_NAMES, device-specific
  179  *              names identifying the particular device will be used.
  180  *
  181  * __i386_COMPAT
  182  *      This indicates whether the i386 ABI is supported as a *non-native*
  183  *      mode for the platform.  When this symbol is defined:
  184  *      -       32-bit xstat-style system calls are enabled
  185  *      -       32-bit xmknod-style system calls are enabled
  186  *      -       32-bit system calls use i386 sizes -and- alignments
  187  *
  188  *      Note that this is NOT defined for the i386 native environment!
  189  *
  190  * __x86
  191  *      This is ONLY a synonym for defined(__i386) || defined(__amd64)
  192  *      which is useful only insofar as these two architectures share
  193  *      common attributes.  Analogous to __sparc.
  194  *
  195  * _PSM_MODULES
  196  *      This indicates whether or not the implementation uses PSM
  197  *      modules for processor support, reading /etc/mach from inside
  198  *      the kernel to extract a list.
  199  *
  200  * _RTC_CONFIG
  201  *      This indicates whether or not the implementation uses /etc/rtc_config
  202  *      to configure the real-time clock in the kernel.
  203  *
  204  * _UNIX_KRTLD
  205  *      This indicates that the implementation uses a dynamically
  206  *      linked unix + krtld to form the core kernel image at boot
  207  *      time, or (in the absence of this symbol) a prelinked kernel image.
  208  *
  209  * _OBP
  210  *      This indicates the firmware interface is OBP.
  211  *
  212  * _SOFT_HOSTID
  213  *      This indicates that the implementation obtains the hostid
  214  *      from the file /etc/hostid, rather than from hardware.
  215  */
  216 
  217 #ifdef  __cplusplus
  218 extern "C" {
  219 #endif
  220 
  221 /*
  222  * The following set of definitions characterize Solaris on AMD's
  223  * 64-bit systems.
  224  */
  225 #if defined(__x86_64) || defined(__amd64)
  226 
  227 #if !defined(__amd64)
  228 #define __amd64         /* preferred guard */
  229 #endif
  230 
  231 #if !defined(__x86)
  232 #define __x86
  233 #endif
  234 
  235 /*
  236  * Define the appropriate "processor characteristics"
  237  */
  238 #ifdef illumos
  239 #define _LITTLE_ENDIAN
  240 #endif
  241 #define _STACK_GROWS_DOWNWARD
  242 #define _LONG_LONG_LTOH
  243 #define _BIT_FIELDS_LTOH
  244 #define _IEEE_754
  245 #define _CHAR_IS_SIGNED
  246 #define _BOOL_ALIGNMENT                 1
  247 #define _CHAR_ALIGNMENT                 1
  248 #define _SHORT_ALIGNMENT                2
  249 #define _INT_ALIGNMENT                  4
  250 #define _FLOAT_ALIGNMENT                4
  251 #define _FLOAT_COMPLEX_ALIGNMENT        4
  252 #define _LONG_ALIGNMENT                 8
  253 #define _LONG_LONG_ALIGNMENT            8
  254 #define _DOUBLE_ALIGNMENT               8
  255 #define _DOUBLE_COMPLEX_ALIGNMENT       8
  256 #define _LONG_DOUBLE_ALIGNMENT          16
  257 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  16
  258 #define _POINTER_ALIGNMENT              8
  259 #define _MAX_ALIGNMENT                  16
  260 #define _ALIGNMENT_REQUIRED             1
  261 
  262 /*
  263  * Different alignment constraints for the i386 ABI in compatibility mode
  264  */
  265 #define _LONG_LONG_ALIGNMENT_32         4
  266 
  267 /*
  268  * Define the appropriate "implementation choices".
  269  */
  270 #if !defined(_LP64)
  271 #define _LP64
  272 #endif
  273 #if !defined(_I32LPx) && defined(_KERNEL)
  274 #define _I32LPx
  275 #endif
  276 #define _MULTI_DATAMODEL
  277 #define _SUNOS_VTOC_16
  278 #define _DMA_USES_PHYSADDR
  279 #define _FIRMWARE_NEEDS_FDISK
  280 #define __i386_COMPAT
  281 #define _PSM_MODULES
  282 #define _RTC_CONFIG
  283 #define _SOFT_HOSTID
  284 #define _DONT_USE_1275_GENERIC_NAMES
  285 #define _HAVE_CPUID_INSN
  286 
  287 /*
  288  * The feature test macro __i386 is generic for all processors implementing
  289  * the Intel 386 instruction set or a superset of it.  Specifically, this
  290  * includes all members of the 386, 486, and Pentium family of processors.
  291  */
  292 #elif defined(__i386) || defined(__i386__)
  293 
  294 #if !defined(__i386)
  295 #define __i386
  296 #endif
  297 
  298 #if !defined(__x86)
  299 #define __x86
  300 #endif
  301 
  302 /*
  303  * Define the appropriate "processor characteristics"
  304  */
  305 #ifdef illumos
  306 #define _LITTLE_ENDIAN
  307 #endif
  308 #define _STACK_GROWS_DOWNWARD
  309 #define _LONG_LONG_LTOH
  310 #define _BIT_FIELDS_LTOH
  311 #define _IEEE_754
  312 #define _CHAR_IS_SIGNED
  313 #define _BOOL_ALIGNMENT                 1
  314 #define _CHAR_ALIGNMENT                 1
  315 #define _SHORT_ALIGNMENT                2
  316 #define _INT_ALIGNMENT                  4
  317 #define _FLOAT_ALIGNMENT                4
  318 #define _FLOAT_COMPLEX_ALIGNMENT        4
  319 #define _LONG_ALIGNMENT                 4
  320 #define _LONG_LONG_ALIGNMENT            4
  321 #define _DOUBLE_ALIGNMENT               4
  322 #define _DOUBLE_COMPLEX_ALIGNMENT       4
  323 #define _LONG_DOUBLE_ALIGNMENT          4
  324 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  4
  325 #define _POINTER_ALIGNMENT              4
  326 #define _MAX_ALIGNMENT                  4
  327 #define _ALIGNMENT_REQUIRED             0
  328 
  329 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  330 
  331 /*
  332  * Define the appropriate "implementation choices".
  333  */
  334 #if !defined(_ILP32)
  335 #define _ILP32
  336 #endif
  337 #if !defined(_I32LPx) && defined(_KERNEL)
  338 #define _I32LPx
  339 #endif
  340 #define _SUNOS_VTOC_16
  341 #define _DMA_USES_PHYSADDR
  342 #define _FIRMWARE_NEEDS_FDISK
  343 #define _PSM_MODULES
  344 #define _RTC_CONFIG
  345 #define _SOFT_HOSTID
  346 #define _DONT_USE_1275_GENERIC_NAMES
  347 #define _HAVE_CPUID_INSN
  348 
  349 #elif defined(__aarch64__)
  350 
  351 /*
  352  * Define the appropriate "processor characteristics"
  353  */
  354 #define _STACK_GROWS_DOWNWARD
  355 #define _LONG_LONG_LTOH
  356 #define _BIT_FIELDS_LTOH
  357 #define _IEEE_754
  358 #define _CHAR_IS_UNSIGNED
  359 #define _BOOL_ALIGNMENT                 1
  360 #define _CHAR_ALIGNMENT                 1
  361 #define _SHORT_ALIGNMENT                2
  362 #define _INT_ALIGNMENT                  4
  363 #define _FLOAT_ALIGNMENT                4
  364 #define _FLOAT_COMPLEX_ALIGNMENT        4
  365 #define _LONG_ALIGNMENT                 8
  366 #define _LONG_LONG_ALIGNMENT            8
  367 #define _DOUBLE_ALIGNMENT               8
  368 #define _DOUBLE_COMPLEX_ALIGNMENT       8
  369 #define _LONG_DOUBLE_ALIGNMENT          16
  370 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  16
  371 #define _POINTER_ALIGNMENT              8
  372 #define _MAX_ALIGNMENT                  16
  373 #define _ALIGNMENT_REQUIRED             1
  374 
  375 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  376 
  377 /*
  378  * Define the appropriate "implementation choices"
  379  */
  380 #if !defined(_LP64)
  381 #define _LP64
  382 #endif
  383 #define _SUNOS_VTOC_16
  384 #define _DMA_USES_PHYSADDR
  385 #define _FIRMWARE_NEEDS_FDISK
  386 #define _PSM_MODULES
  387 #define _RTC_CONFIG
  388 #define _DONT_USE_1275_GENERIC_NAMES
  389 #define _HAVE_CPUID_INSN
  390 
  391 #elif defined(__riscv)
  392 
  393 /*
  394  * Define the appropriate "processor characteristics"
  395  */
  396 #define _STACK_GROWS_DOWNWARD
  397 #define _LONG_LONG_LTOH
  398 #define _BIT_FIELDS_LTOH
  399 #define _IEEE_754
  400 #define _CHAR_IS_UNSIGNED
  401 #define _BOOL_ALIGNMENT                 1
  402 #define _CHAR_ALIGNMENT                 1
  403 #define _SHORT_ALIGNMENT                2
  404 #define _INT_ALIGNMENT                  4
  405 #define _FLOAT_ALIGNMENT                4
  406 #define _FLOAT_COMPLEX_ALIGNMENT        4
  407 #define _LONG_ALIGNMENT                 8
  408 #define _LONG_LONG_ALIGNMENT            8
  409 #define _DOUBLE_ALIGNMENT               8
  410 #define _DOUBLE_COMPLEX_ALIGNMENT       8
  411 #define _LONG_DOUBLE_ALIGNMENT          16
  412 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  16
  413 #define _POINTER_ALIGNMENT              8
  414 #define _MAX_ALIGNMENT                  16
  415 #define _ALIGNMENT_REQUIRED             1
  416 
  417 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  418 
  419 /*
  420  * Define the appropriate "implementation choices"
  421  */
  422 #if !defined(_LP64)
  423 #define _LP64
  424 #endif
  425 #define _SUNOS_VTOC_16
  426 #define _DMA_USES_PHYSADDR
  427 #define _FIRMWARE_NEEDS_FDISK
  428 #define _PSM_MODULES
  429 #define _RTC_CONFIG
  430 #define _DONT_USE_1275_GENERIC_NAMES
  431 #define _HAVE_CPUID_INSN
  432 
  433 #elif defined(__arm__)
  434 
  435 /*
  436  * Define the appropriate "processor characteristics"
  437  */
  438 #define _STACK_GROWS_DOWNWARD
  439 #define _LONG_LONG_LTOH
  440 #define _BIT_FIELDS_LTOH
  441 #define _IEEE_754
  442 #define _CHAR_IS_SIGNED
  443 #define _BOOL_ALIGNMENT                 1
  444 #define _CHAR_ALIGNMENT                 1
  445 #define _SHORT_ALIGNMENT                2
  446 #define _INT_ALIGNMENT                  4
  447 #define _FLOAT_ALIGNMENT                4
  448 #define _FLOAT_COMPLEX_ALIGNMENT        4
  449 #define _LONG_ALIGNMENT                 4
  450 #define _LONG_LONG_ALIGNMENT            4
  451 #define _DOUBLE_ALIGNMENT               4
  452 #define _DOUBLE_COMPLEX_ALIGNMENT       4
  453 #define _LONG_DOUBLE_ALIGNMENT          4
  454 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  4
  455 #define _POINTER_ALIGNMENT              4
  456 #define _MAX_ALIGNMENT                  4
  457 #define _ALIGNMENT_REQUIRED             0
  458 
  459 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  460 
  461 /*
  462  * Define the appropriate "implementation choices".
  463  */
  464 #if !defined(_ILP32)
  465 #define _ILP32
  466 #endif
  467 #if !defined(_I32LPx) && defined(_KERNEL)
  468 #define _I32LPx
  469 #endif
  470 #define _SUNOS_VTOC_16
  471 #define _DMA_USES_PHYSADDR
  472 #define _FIRMWARE_NEEDS_FDISK
  473 #define _PSM_MODULES
  474 #define _RTC_CONFIG
  475 #define _DONT_USE_1275_GENERIC_NAMES
  476 #define _HAVE_CPUID_INSN
  477 
  478 #elif defined(__mips__)
  479 
  480 /*
  481  * Define the appropriate "processor characteristics"
  482  */
  483 #define _STACK_GROWS_DOWNWARD
  484 #define _LONG_LONG_LTOH
  485 #define _BIT_FIELDS_LTOH
  486 #define _IEEE_754
  487 #define _CHAR_IS_SIGNED
  488 #define _BOOL_ALIGNMENT                 1
  489 #define _CHAR_ALIGNMENT                 1
  490 #define _SHORT_ALIGNMENT                2
  491 #define _INT_ALIGNMENT                  4
  492 #define _FLOAT_ALIGNMENT                4
  493 #define _FLOAT_COMPLEX_ALIGNMENT        4
  494 #if defined(__mips_n64)
  495 #define _LONG_ALIGNMENT                 8
  496 #define _LONG_LONG_ALIGNMENT            8
  497 #define _DOUBLE_ALIGNMENT               8
  498 #define _DOUBLE_COMPLEX_ALIGNMENT       8
  499 #define _LONG_DOUBLE_ALIGNMENT          8
  500 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  8
  501 #define _POINTER_ALIGNMENT              8
  502 #define _MAX_ALIGNMENT                  8
  503 #define _ALIGNMENT_REQUIRED             0
  504 
  505 #define _LONG_LONG_ALIGNMENT_32         _INT_ALIGNMENT
  506 /*
  507  * Define the appropriate "implementation choices".
  508  */
  509 #if !defined(_LP64)
  510 #define _LP64
  511 #endif
  512 #else
  513 #define _LONG_ALIGNMENT                 4
  514 #define _LONG_LONG_ALIGNMENT            4
  515 #define _DOUBLE_ALIGNMENT               4
  516 #define _DOUBLE_COMPLEX_ALIGNMENT       4
  517 #define _LONG_DOUBLE_ALIGNMENT          4
  518 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  4
  519 #define _POINTER_ALIGNMENT              4
  520 #define _MAX_ALIGNMENT                  4
  521 #define _ALIGNMENT_REQUIRED             0
  522 
  523 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  524 
  525 /*
  526  * Define the appropriate "implementation choices".
  527  */
  528 #if !defined(_ILP32)
  529 #define _ILP32
  530 #endif
  531 #if !defined(_I32LPx) && defined(_KERNEL)
  532 #define _I32LPx
  533 #endif
  534 #endif
  535 #define _SUNOS_VTOC_16
  536 #define _DMA_USES_PHYSADDR
  537 #define _FIRMWARE_NEEDS_FDISK
  538 #define _PSM_MODULES
  539 #define _RTC_CONFIG
  540 #define _DONT_USE_1275_GENERIC_NAMES
  541 #define _HAVE_CPUID_INSN
  542 
  543 #elif defined(__powerpc__)
  544 
  545 #if defined(__BIG_ENDIAN__)
  546 #define _BIT_FIELDS_HTOL
  547 #else
  548 #define _BIT_FIELDS_LTOH
  549 #endif
  550 
  551 /*
  552  * The following set of definitions characterize the Solaris on SPARC systems.
  553  *
  554  * The symbol __sparc indicates any of the SPARC family of processor
  555  * architectures.  This includes SPARC V7, SPARC V8 and SPARC V9.
  556  *
  557  * The symbol __sparcv8 indicates the 32-bit SPARC V8 architecture as defined
  558  * by Version 8 of the SPARC Architecture Manual.  (SPARC V7 is close enough
  559  * to SPARC V8 for the former to be subsumed into the latter definition.)
  560  *
  561  * The symbol __sparcv9 indicates the 64-bit SPARC V9 architecture as defined
  562  * by Version 9 of the SPARC Architecture Manual.
  563  *
  564  * The symbols __sparcv8 and __sparcv9 are mutually exclusive, and are only
  565  * relevant when the symbol __sparc is defined.
  566  */
  567 /*
  568  * XXX Due to the existence of 5110166, "defined(__sparcv9)" needs to be added
  569  * to support backwards builds.  This workaround should be removed in s10_71.
  570  */
  571 #elif defined(__sparc) || defined(__sparcv9) || defined(__sparc__)
  572 #if !defined(__sparc)
  573 #define __sparc
  574 #endif
  575 
  576 /*
  577  * You can be 32-bit or 64-bit, but not both at the same time.
  578  */
  579 #if defined(__sparcv8) && defined(__sparcv9)
  580 #error  "SPARC Versions 8 and 9 are mutually exclusive choices"
  581 #endif
  582 
  583 /*
  584  * Existing compilers do not set __sparcv8.  Years will transpire before
  585  * the compilers can be depended on to set the feature test macro. In
  586  * the interim, we'll set it here on the basis of historical behaviour;
  587  * if you haven't asked for SPARC V9, then you must've meant SPARC V8.
  588  */
  589 #if !defined(__sparcv9) && !defined(__sparcv8)
  590 #define __sparcv8
  591 #endif
  592 
  593 /*
  594  * Define the appropriate "processor characteristics" shared between
  595  * all Solaris on SPARC systems.
  596  */
  597 #ifdef illumos
  598 #define _BIG_ENDIAN
  599 #endif
  600 #define _STACK_GROWS_DOWNWARD
  601 #define _LONG_LONG_HTOL
  602 #define _BIT_FIELDS_HTOL
  603 #define _IEEE_754
  604 #define _CHAR_IS_SIGNED
  605 #define _BOOL_ALIGNMENT                 1
  606 #define _CHAR_ALIGNMENT                 1
  607 #define _SHORT_ALIGNMENT                2
  608 #define _INT_ALIGNMENT                  4
  609 #define _FLOAT_ALIGNMENT                4
  610 #define _FLOAT_COMPLEX_ALIGNMENT        4
  611 #define _LONG_LONG_ALIGNMENT            8
  612 #define _DOUBLE_ALIGNMENT               8
  613 #define _DOUBLE_COMPLEX_ALIGNMENT       8
  614 #define _ALIGNMENT_REQUIRED             1
  615 
  616 /*
  617  * Define the appropriate "implementation choices" shared between versions.
  618  */
  619 #define _SUNOS_VTOC_8
  620 #define _DMA_USES_VIRTADDR
  621 #define _NO_FDISK_PRESENT
  622 #define _HAVE_TEM_FIRMWARE
  623 #define _OBP
  624 
  625 /*
  626  * The following set of definitions characterize the implementation of
  627  * 32-bit Solaris on SPARC V8 systems.
  628  */
  629 #if defined(__sparcv8)
  630 
  631 /*
  632  * Define the appropriate "processor characteristics"
  633  */
  634 #define _LONG_ALIGNMENT                 4
  635 #define _LONG_DOUBLE_ALIGNMENT          8
  636 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  8
  637 #define _POINTER_ALIGNMENT              4
  638 #define _MAX_ALIGNMENT                  8
  639 
  640 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  641 
  642 /*
  643  * Define the appropriate "implementation choices"
  644  */
  645 #define _ILP32
  646 #if !defined(_I32LPx) && defined(_KERNEL)
  647 #define _I32LPx
  648 #endif
  649 
  650 /*
  651  * The following set of definitions characterize the implementation of
  652  * 64-bit Solaris on SPARC V9 systems.
  653  */
  654 #elif defined(__sparcv9)
  655 
  656 /*
  657  * Define the appropriate "processor characteristics"
  658  */
  659 #define _LONG_ALIGNMENT                 8
  660 #define _LONG_DOUBLE_ALIGNMENT          16
  661 #define _LONG_DOUBLE_COMPLEX_ALIGNMENT  16
  662 #define _POINTER_ALIGNMENT              8
  663 #define _MAX_ALIGNMENT                  16
  664 
  665 #define _LONG_LONG_ALIGNMENT_32         _LONG_LONG_ALIGNMENT
  666 
  667 /*
  668  * Define the appropriate "implementation choices"
  669  */
  670 #if !defined(_LP64)
  671 #define _LP64
  672 #endif
  673 #if !defined(_I32LPx)
  674 #define _I32LPx
  675 #endif
  676 #define _MULTI_DATAMODEL
  677 
  678 #else
  679 #error  "unknown SPARC version"
  680 #endif
  681 
  682 /*
  683  * #error is strictly ansi-C, but works as well as anything for K&R systems.
  684  */
  685 #else
  686 #error "ISA not supported"
  687 #endif
  688 
  689 #if defined(_ILP32) && defined(_LP64)
  690 #error "Both _ILP32 and _LP64 are defined"
  691 #endif
  692 
  693 #ifdef  __cplusplus
  694 }
  695 #endif
  696 
  697 #endif  /* _SYS_ISA_DEFS_H */

Cache object: c9c5d897a342619c2d3f959bd9b57957


[ 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.