isa_defs.h revision 174049
1168404Spjd/* 2168404Spjd * CDDL HEADER START 3168404Spjd * 4168404Spjd * The contents of this file are subject to the terms of the 5168404Spjd * Common Development and Distribution License (the "License"). 6168404Spjd * You may not use this file except in compliance with the License. 7168404Spjd * 8168404Spjd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9168404Spjd * or http://www.opensolaris.org/os/licensing. 10168404Spjd * See the License for the specific language governing permissions 11168404Spjd * and limitations under the License. 12168404Spjd * 13168404Spjd * When distributing Covered Code, include this CDDL HEADER in each 14168404Spjd * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15168404Spjd * If applicable, add the following below this CDDL HEADER, with the 16168404Spjd * fields enclosed by brackets "[]" replaced with your own identifying 17168404Spjd * information: Portions Copyright [yyyy] [name of copyright owner] 18168404Spjd * 19168404Spjd * CDDL HEADER END 20168404Spjd */ 21168404Spjd 22168404Spjd/* 23168404Spjd * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24168404Spjd * Use is subject to license terms. 25168404Spjd */ 26168404Spjd 27168404Spjd#ifndef _SYS_ISA_DEFS_H 28168404Spjd#define _SYS_ISA_DEFS_H 29168404Spjd 30168404Spjd#pragma ident "%Z%%M% %I% %E% SMI" 31168404Spjd 32168404Spjd/* 33168404Spjd * This header file serves to group a set of well known defines and to 34168404Spjd * set these for each instruction set architecture. These defines may 35168404Spjd * be divided into two groups; characteristics of the processor and 36168404Spjd * implementation choices for Solaris on a processor. 37168404Spjd * 38168404Spjd * Processor Characteristics: 39168404Spjd * 40168404Spjd * _LITTLE_ENDIAN / _BIG_ENDIAN: 41168404Spjd * The natural byte order of the processor. A pointer to an int points 42168404Spjd * to the least/most significant byte of that int. 43168404Spjd * 44168404Spjd * _STACK_GROWS_UPWARD / _STACK_GROWS_DOWNWARD: 45168404Spjd * The processor specific direction of stack growth. A push onto the 46168404Spjd * stack increases/decreases the stack pointer, so it stores data at 47168404Spjd * successively higher/lower addresses. (Stackless machines ignored 48168404Spjd * without regrets). 49168404Spjd * 50168404Spjd * _LONG_LONG_HTOL / _LONG_LONG_LTOH: 51168404Spjd * A pointer to a long long points to the most/least significant long 52168404Spjd * within that long long. 53168404Spjd * 54168404Spjd * _BIT_FIELDS_HTOL / _BIT_FIELDS_LTOH: 55168404Spjd * The C compiler assigns bit fields from the high/low to the low/high end 56168404Spjd * of an int (most to least significant vs. least to most significant). 57168404Spjd * 58168404Spjd * _IEEE_754: 59168404Spjd * The processor (or supported implementations of the processor) 60168404Spjd * supports the ieee-754 floating point standard. No other floating 61168404Spjd * point standards are supported (or significant). Any other supported 62168404Spjd * floating point formats are expected to be cased on the ISA processor 63168404Spjd * symbol. 64168404Spjd * 65168404Spjd * _CHAR_IS_UNSIGNED / _CHAR_IS_SIGNED: 66168404Spjd * The C Compiler implements objects of type `char' as `unsigned' or 67168404Spjd * `signed' respectively. This is really an implementation choice of 68168404Spjd * the compiler writer, but it is specified in the ABI and tends to 69168404Spjd * be uniform across compilers for an instruction set architecture. 70168404Spjd * Hence, it has the properties of a processor characteristic. 71168404Spjd * 72168404Spjd * _CHAR_ALIGNMENT / _SHORT_ALIGNMENT / _INT_ALIGNMENT / _LONG_ALIGNMENT / 73168404Spjd * _LONG_LONG_ALIGNMENT / _DOUBLE_ALIGNMENT / _LONG_DOUBLE_ALIGNMENT / 74168404Spjd * _POINTER_ALIGNMENT / _FLOAT_ALIGNMENT: 75168404Spjd * The ABI defines alignment requirements of each of the primitive 76168404Spjd * object types. Some, if not all, may be hardware requirements as 77168404Spjd * well. The values are expressed in "byte-alignment" units. 78168404Spjd * 79168404Spjd * _MAX_ALIGNMENT: 80168404Spjd * The most stringent alignment requirement as specified by the ABI. 81168404Spjd * Equal to the maximum of all the above _XXX_ALIGNMENT values. 82168404Spjd * 83168404Spjd * _ALIGNMENT_REQUIRED: 84168404Spjd * True or false (1 or 0) whether or not the hardware requires the ABI 85168404Spjd * alignment. 86168404Spjd * 87168404Spjd * _LONG_LONG_ALIGNMENT_32 88168404Spjd * The 32-bit ABI supported by a 64-bit kernel may have different 89168404Spjd * alignment requirements for primitive object types. The value of this 90168404Spjd * identifier is expressed in "byte-alignment" units. 91168404Spjd * 92168404Spjd * _HAVE_CPUID_INSN 93168404Spjd * This indicates that the architecture supports the 'cpuid' 94168404Spjd * instruction as defined by Intel. (Intel allows other vendors 95168404Spjd * to extend the instruction for their own purposes.) 96168404Spjd * 97168404Spjd * 98168404Spjd * Implementation Choices: 99168404Spjd * 100168404Spjd * _ILP32 / _LP64: 101168404Spjd * This specifies the compiler data type implementation as specified in 102168404Spjd * the relevant ABI. The choice between these is strongly influenced 103168404Spjd * by the underlying hardware, but is not absolutely tied to it. 104168404Spjd * Currently only two data type models are supported: 105168404Spjd * 106168404Spjd * _ILP32: 107168404Spjd * Int/Long/Pointer are 32 bits. This is the historical UNIX 108168404Spjd * and Solaris implementation. Due to its historical standing, 109168404Spjd * this is the default case. 110168404Spjd * 111168404Spjd * _LP64: 112168404Spjd * Long/Pointer are 64 bits, Int is 32 bits. This is the chosen 113168404Spjd * implementation for 64-bit ABIs such as SPARC V9. 114168404Spjd * 115168404Spjd * _I32LPx: 116168404Spjd * A compilation environment where 'int' is 32-bit, and 117168404Spjd * longs and pointers are simply the same size. 118168404Spjd * 119168404Spjd * In all cases, Char is 8 bits and Short is 16 bits. 120168404Spjd * 121168404Spjd * _SUNOS_VTOC_8 / _SUNOS_VTOC_16 / _SVR4_VTOC_16: 122168404Spjd * This specifies the form of the disk VTOC (or label): 123168404Spjd * 124168404Spjd * _SUNOS_VTOC_8: 125168404Spjd * This is a VTOC form which is upwardly compatible with the 126168404Spjd * SunOS 4.x disk label and allows 8 partitions per disk. 127168404Spjd * 128168404Spjd * _SUNOS_VTOC_16: 129168404Spjd * In this format the incore vtoc image matches the ondisk 130168404Spjd * version. It allows 16 slices per disk, and is not 131168404Spjd * compatible with the SunOS 4.x disk label. 132168404Spjd * 133168404Spjd * Note that these are not the only two VTOC forms possible and 134168404Spjd * additional forms may be added. One possible form would be the 135168404Spjd * SVr4 VTOC form. The symbol for that is reserved now, although 136168404Spjd * it is not implemented. 137168404Spjd * 138168404Spjd * _SVR4_VTOC_16: 139168404Spjd * This VTOC form is compatible with the System V Release 4 140168404Spjd * VTOC (as implemented on the SVr4 Intel and 3b ports) with 141168404Spjd * 16 partitions per disk. 142168404Spjd * 143168404Spjd * 144168404Spjd * _DMA_USES_PHYSADDR / _DMA_USES_VIRTADDR 145168404Spjd * This describes the type of addresses used by system DMA: 146168404Spjd * 147168404Spjd * _DMA_USES_PHYSADDR: 148168404Spjd * This type of DMA, used in the x86 implementation, 149168404Spjd * requires physical addresses for DMA buffers. The 24-bit 150168404Spjd * addresses used by some legacy boards is the source of the 151168404Spjd * "low-memory" (<16MB) requirement for some devices using DMA. 152168404Spjd * 153168404Spjd * _DMA_USES_VIRTADDR: 154168404Spjd * This method of DMA allows the use of virtual addresses for 155168404Spjd * DMA transfers. 156168404Spjd * 157168404Spjd * _FIRMWARE_NEEDS_FDISK / _NO_FDISK_PRESENT 158168404Spjd * This indicates the presence/absence of an fdisk table. 159168404Spjd * 160168404Spjd * _FIRMWARE_NEEDS_FDISK 161168404Spjd * The fdisk table is required by system firmware. If present, 162168404Spjd * it allows a disk to be subdivided into multiple fdisk 163168404Spjd * partitions, each of which is equivalent to a separate, 164168404Spjd * virtual disk. This enables the co-existence of multiple 165168404Spjd * operating systems on a shared hard disk. 166168404Spjd * 167168404Spjd * _NO_FDISK_PRESENT 168168404Spjd * If the fdisk table is absent, it is assumed that the entire 169168404Spjd * media is allocated for a single operating system. 170168404Spjd * 171168404Spjd * _HAVE_TEM_FIRMWARE 172168404Spjd * Defined if this architecture has the (fallback) option of 173168404Spjd * using prom_* calls for doing I/O if a suitable kernel driver 174168404Spjd * is not available to do it. 175168404Spjd * 176168404Spjd * _DONT_USE_1275_GENERIC_NAMES 177168404Spjd * Controls whether or not device tree node names should 178168404Spjd * comply with the IEEE 1275 "Generic Names" Recommended 179168404Spjd * Practice. With _DONT_USE_GENERIC_NAMES, device-specific 180168404Spjd * names identifying the particular device will be used. 181168404Spjd * 182168404Spjd * __i386_COMPAT 183168404Spjd * This indicates whether the i386 ABI is supported as a *non-native* 184168404Spjd * mode for the platform. When this symbol is defined: 185168404Spjd * - 32-bit xstat-style system calls are enabled 186168404Spjd * - 32-bit xmknod-style system calls are enabled 187168404Spjd * - 32-bit system calls use i386 sizes -and- alignments 188168404Spjd * 189168404Spjd * Note that this is NOT defined for the i386 native environment! 190168404Spjd * 191168404Spjd * __x86 192168404Spjd * This is ONLY a synonym for defined(__i386) || defined(__amd64) 193168404Spjd * which is useful only insofar as these two architectures share 194168404Spjd * common attributes. Analogous to __sparc. 195168404Spjd * 196168404Spjd * _PSM_MODULES 197168404Spjd * This indicates whether or not the implementation uses PSM 198168404Spjd * modules for processor support, reading /etc/mach from inside 199168404Spjd * the kernel to extract a list. 200168404Spjd * 201168404Spjd * _RTC_CONFIG 202168404Spjd * This indicates whether or not the implementation uses /etc/rtc_config 203168404Spjd * to configure the real-time clock in the kernel. 204168404Spjd * 205168404Spjd * _UNIX_KRTLD 206168404Spjd * This indicates that the implementation uses a dynamically 207168404Spjd * linked unix + krtld to form the core kernel image at boot 208168404Spjd * time, or (in the absence of this symbol) a prelinked kernel image. 209168404Spjd */ 210168404Spjd 211168404Spjd#ifdef __cplusplus 212168404Spjdextern "C" { 213168404Spjd#endif 214168404Spjd 215168404Spjd/* 216168404Spjd * The following set of definitions characterize Solaris on AMD's 217168404Spjd * 64-bit systems. 218168404Spjd */ 219168404Spjd#if defined(__x86_64) || defined(__amd64) 220168404Spjd 221168404Spjd#if !defined(__amd64) 222168404Spjd#define __amd64 /* preferred guard */ 223168404Spjd#endif 224168404Spjd 225168404Spjd#if !defined(__x86) 226168404Spjd#define __x86 227168404Spjd#endif 228168404Spjd 229168404Spjd/* 230168404Spjd * Define the appropriate "processor characteristics" 231168404Spjd */ 232174049Sjb#if defined(sun) 233168404Spjd#define _LITTLE_ENDIAN 234174049Sjb#endif 235168404Spjd#define _STACK_GROWS_DOWNWARD 236168404Spjd#define _LONG_LONG_LTOH 237168404Spjd#define _BIT_FIELDS_LTOH 238168404Spjd#define _IEEE_754 239168404Spjd#define _CHAR_IS_SIGNED 240168404Spjd#define _BOOL_ALIGNMENT 1 241168404Spjd#define _CHAR_ALIGNMENT 1 242168404Spjd#define _SHORT_ALIGNMENT 2 243168404Spjd#define _INT_ALIGNMENT 4 244168404Spjd#define _FLOAT_ALIGNMENT 4 245168404Spjd#define _FLOAT_COMPLEX_ALIGNMENT 4 246168404Spjd#define _LONG_ALIGNMENT 8 247168404Spjd#define _LONG_LONG_ALIGNMENT 8 248168404Spjd#define _DOUBLE_ALIGNMENT 8 249168404Spjd#define _DOUBLE_COMPLEX_ALIGNMENT 8 250168404Spjd#define _LONG_DOUBLE_ALIGNMENT 16 251168404Spjd#define _LONG_DOUBLE_COMPLEX_ALIGNMENT 16 252168404Spjd#define _POINTER_ALIGNMENT 8 253168404Spjd#define _MAX_ALIGNMENT 16 254168404Spjd#define _ALIGNMENT_REQUIRED 1 255168404Spjd 256168404Spjd/* 257168404Spjd * Different alignment constraints for the i386 ABI in compatibility mode 258168404Spjd */ 259168404Spjd#define _LONG_LONG_ALIGNMENT_32 4 260168404Spjd 261168404Spjd/* 262168404Spjd * Define the appropriate "implementation choices". 263168404Spjd */ 264168404Spjd#if !defined(_LP64) 265168404Spjd#define _LP64 266168404Spjd#endif 267168404Spjd#if !defined(_I32LPx) && defined(_KERNEL) 268168404Spjd#define _I32LPx 269168404Spjd#endif 270168404Spjd#define _MULTI_DATAMODEL 271168404Spjd#define _SUNOS_VTOC_16 272168404Spjd#define _DMA_USES_PHYSADDR 273168404Spjd#define _FIRMWARE_NEEDS_FDISK 274168404Spjd#define __i386_COMPAT 275168404Spjd#define _PSM_MODULES 276168404Spjd#define _RTC_CONFIG 277168404Spjd#define _DONT_USE_1275_GENERIC_NAMES 278168404Spjd#define _HAVE_CPUID_INSN 279168404Spjd 280168404Spjd/* 281168404Spjd * The feature test macro __i386 is generic for all processors implementing 282168404Spjd * the Intel 386 instruction set or a superset of it. Specifically, this 283168404Spjd * includes all members of the 386, 486, and Pentium family of processors. 284168404Spjd */ 285168404Spjd#elif defined(__i386) || defined(__i386__) 286168404Spjd 287168404Spjd#if !defined(__i386) 288168404Spjd#define __i386 289168404Spjd#endif 290168404Spjd 291168404Spjd#if !defined(__x86) 292168404Spjd#define __x86 293168404Spjd#endif 294168404Spjd 295168404Spjd/* 296168404Spjd * Define the appropriate "processor characteristics" 297168404Spjd */ 298174049Sjb#if defined(sun) 299168404Spjd#define _LITTLE_ENDIAN 300174049Sjb#endif 301168404Spjd#define _STACK_GROWS_DOWNWARD 302168404Spjd#define _LONG_LONG_LTOH 303168404Spjd#define _BIT_FIELDS_LTOH 304168404Spjd#define _IEEE_754 305168404Spjd#define _CHAR_IS_SIGNED 306168404Spjd#define _BOOL_ALIGNMENT 1 307168404Spjd#define _CHAR_ALIGNMENT 1 308168404Spjd#define _SHORT_ALIGNMENT 2 309168404Spjd#define _INT_ALIGNMENT 4 310168404Spjd#define _FLOAT_ALIGNMENT 4 311168404Spjd#define _FLOAT_COMPLEX_ALIGNMENT 4 312168404Spjd#define _LONG_ALIGNMENT 4 313168404Spjd#define _LONG_LONG_ALIGNMENT 4 314168404Spjd#define _DOUBLE_ALIGNMENT 4 315168404Spjd#define _DOUBLE_COMPLEX_ALIGNMENT 4 316168404Spjd#define _LONG_DOUBLE_ALIGNMENT 4 317168404Spjd#define _LONG_DOUBLE_COMPLEX_ALIGNMENT 4 318168404Spjd#define _POINTER_ALIGNMENT 4 319168404Spjd#define _MAX_ALIGNMENT 4 320168404Spjd#define _ALIGNMENT_REQUIRED 0 321168404Spjd 322168404Spjd#define _LONG_LONG_ALIGNMENT_32 _LONG_LONG_ALIGNMENT 323168404Spjd 324168404Spjd/* 325168404Spjd * Define the appropriate "implementation choices". 326168404Spjd */ 327168404Spjd#define _ILP32 328168404Spjd#if !defined(_I32LPx) && defined(_KERNEL) 329168404Spjd#define _I32LPx 330168404Spjd#endif 331168404Spjd#define _SUNOS_VTOC_16 332168404Spjd#define _DMA_USES_PHYSADDR 333168404Spjd#define _FIRMWARE_NEEDS_FDISK 334168404Spjd#define _PSM_MODULES 335168404Spjd#define _RTC_CONFIG 336168404Spjd#define _DONT_USE_1275_GENERIC_NAMES 337168404Spjd#define _HAVE_CPUID_INSN 338168404Spjd 339168404Spjd/* 340168404Spjd * The following set of definitions characterize the Solaris on SPARC systems. 341168404Spjd * 342168404Spjd * The symbol __sparc indicates any of the SPARC family of processor 343168404Spjd * architectures. This includes SPARC V7, SPARC V8 and SPARC V9. 344168404Spjd * 345168404Spjd * The symbol __sparcv8 indicates the 32-bit SPARC V8 architecture as defined 346168404Spjd * by Version 8 of the SPARC Architecture Manual. (SPARC V7 is close enough 347168404Spjd * to SPARC V8 for the former to be subsumed into the latter definition.) 348168404Spjd * 349168404Spjd * The symbol __sparcv9 indicates the 64-bit SPARC V9 architecture as defined 350168404Spjd * by Version 9 of the SPARC Architecture Manual. 351168404Spjd * 352168404Spjd * The symbols __sparcv8 and __sparcv9 are mutually exclusive, and are only 353168404Spjd * relevant when the symbol __sparc is defined. 354168404Spjd */ 355168404Spjd/* 356168404Spjd * XXX Due to the existence of 5110166, "defined(__sparcv9)" needs to be added 357168404Spjd * to support backwards builds. This workaround should be removed in s10_71. 358168404Spjd */ 359168404Spjd#elif defined(__sparc) || defined(__sparcv9) || defined(__sparc__) 360168404Spjd#if !defined(__sparc) 361168404Spjd#define __sparc 362168404Spjd#endif 363168404Spjd 364168404Spjd/* 365168404Spjd * You can be 32-bit or 64-bit, but not both at the same time. 366168404Spjd */ 367168404Spjd#if defined(__sparcv8) && defined(__sparcv9) 368168404Spjd#error "SPARC Versions 8 and 9 are mutually exclusive choices" 369168404Spjd#endif 370168404Spjd 371168404Spjd/* 372168404Spjd * Existing compilers do not set __sparcv8. Years will transpire before 373168404Spjd * the compilers can be depended on to set the feature test macro. In 374168404Spjd * the interim, we'll set it here on the basis of historical behaviour; 375168404Spjd * if you haven't asked for SPARC V9, then you must've meant SPARC V8. 376168404Spjd */ 377168404Spjd#if !defined(__sparcv9) && !defined(__sparcv8) 378168404Spjd#define __sparcv8 379168404Spjd#endif 380168404Spjd 381168404Spjd/* 382168404Spjd * Define the appropriate "processor characteristics" shared between 383168404Spjd * all Solaris on SPARC systems. 384168404Spjd */ 385174049Sjb#if defined(sun) 386168404Spjd#define _BIG_ENDIAN 387174049Sjb#endif 388168404Spjd#define _STACK_GROWS_DOWNWARD 389168404Spjd#define _LONG_LONG_HTOL 390168404Spjd#define _BIT_FIELDS_HTOL 391168404Spjd#define _IEEE_754 392168404Spjd#define _CHAR_IS_SIGNED 393168404Spjd#define _BOOL_ALIGNMENT 1 394168404Spjd#define _CHAR_ALIGNMENT 1 395168404Spjd#define _SHORT_ALIGNMENT 2 396168404Spjd#define _INT_ALIGNMENT 4 397168404Spjd#define _FLOAT_ALIGNMENT 4 398168404Spjd#define _FLOAT_COMPLEX_ALIGNMENT 4 399168404Spjd#define _LONG_LONG_ALIGNMENT 8 400168404Spjd#define _DOUBLE_ALIGNMENT 8 401168404Spjd#define _DOUBLE_COMPLEX_ALIGNMENT 8 402168404Spjd#define _ALIGNMENT_REQUIRED 1 403168404Spjd 404168404Spjd/* 405168404Spjd * Define the appropriate "implementation choices" shared between versions. 406168404Spjd */ 407168404Spjd#define _SUNOS_VTOC_8 408168404Spjd#define _DMA_USES_VIRTADDR 409168404Spjd#define _NO_FDISK_PRESENT 410168404Spjd#define _HAVE_TEM_FIRMWARE 411168404Spjd#define _UNIX_KRTLD 412168404Spjd 413168404Spjd/* 414168404Spjd * The following set of definitions characterize the implementation of 415168404Spjd * 32-bit Solaris on SPARC V8 systems. 416168404Spjd */ 417168404Spjd#if defined(__sparcv8) 418168404Spjd 419168404Spjd/* 420168404Spjd * Define the appropriate "processor characteristics" 421168404Spjd */ 422168404Spjd#define _LONG_ALIGNMENT 4 423168404Spjd#define _LONG_DOUBLE_ALIGNMENT 8 424168404Spjd#define _LONG_DOUBLE_COMPLEX_ALIGNMENT 8 425168404Spjd#define _POINTER_ALIGNMENT 4 426168404Spjd#define _MAX_ALIGNMENT 8 427168404Spjd 428168404Spjd#define _LONG_LONG_ALIGNMENT_32 _LONG_LONG_ALIGNMENT 429168404Spjd 430168404Spjd/* 431168404Spjd * Define the appropriate "implementation choices" 432168404Spjd */ 433168404Spjd#define _ILP32 434168404Spjd#if !defined(_I32LPx) && defined(_KERNEL) 435168404Spjd#define _I32LPx 436168404Spjd#endif 437168404Spjd 438168404Spjd/* 439168404Spjd * The following set of definitions characterize the implementation of 440168404Spjd * 64-bit Solaris on SPARC V9 systems. 441168404Spjd */ 442168404Spjd#elif defined(__sparcv9) 443168404Spjd 444168404Spjd/* 445168404Spjd * Define the appropriate "processor characteristics" 446168404Spjd */ 447168404Spjd#define _LONG_ALIGNMENT 8 448168404Spjd#define _LONG_DOUBLE_ALIGNMENT 16 449168404Spjd#define _LONG_DOUBLE_COMPLEX_ALIGNMENT 16 450168404Spjd#define _POINTER_ALIGNMENT 8 451168404Spjd#define _MAX_ALIGNMENT 16 452168404Spjd 453168404Spjd#define _LONG_LONG_ALIGNMENT_32 _LONG_LONG_ALIGMENT 454168404Spjd 455168404Spjd/* 456168404Spjd * Define the appropriate "implementation choices" 457168404Spjd */ 458168404Spjd#if !defined(_LP64) 459168404Spjd#define _LP64 460168404Spjd#endif 461168404Spjd#if !defined(_I32LPx) 462168404Spjd#define _I32LPx 463168404Spjd#endif 464168404Spjd#define _MULTI_DATAMODEL 465168404Spjd 466168404Spjd#else 467168404Spjd#error "unknown SPARC version" 468168404Spjd#endif 469168404Spjd 470168404Spjd/* 471168404Spjd * #error is strictly ansi-C, but works as well as anything for K&R systems. 472168404Spjd */ 473168404Spjd#else 474168404Spjd#error "ISA not supported" 475168404Spjd#endif 476168404Spjd 477168404Spjd#if defined(_ILP32) && defined(_LP64) 478168404Spjd#error "Both _ILP32 and _LP64 are defined" 479168404Spjd#endif 480168404Spjd 481168404Spjd#ifdef __cplusplus 482168404Spjd} 483168404Spjd#endif 484168404Spjd 485168404Spjd#endif /* _SYS_ISA_DEFS_H */ 486