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