/*
Copyright (c) 1993 Xerox Corporation.  All rights reserved.
*/
/*
$Id$

$Date$
 *
 * PCR architecture
 */

#ifndef ←←PCR←Arch←h
#define ←←PCR←Arch←h 1

/*
 * known architectures -- define *only* the one(s) that apply
 */

#undef PCR←Arch←SPARC
#undef PCR←Arch←SUN4
#if defined(PCR←Arch←SPARC) || defined(PCR←Arch←SUN4)
#   define PCR←Arch←name	"SPARC"
#endif

#undef PCR←Arch←IBMR6000
#if defined(PCR←Arch←IBMR6000)
#   define PCR←Arch←name	"IBMR6000"
#endif


#undef PCR←Arch←MIPS

#undef PCR←Arch←IRIS

#if defined(PCR←Arch←IRIS)
#   undef PCR←Arch←MIPS
#   define PCR←Arch←MIPS
#   define PCR←Arch←name	"SGI IRIS"
#elif defined(PCR←Arch←MIPS)
#   define PCR←Arch←name	"MIPS"
#endif

/*
 * Dimensions of variation ...
 *
 *   these should *all* be defined with appropriate values.
 */

/* test-and-set-like instruction exists */

#define PCR←Arch←TAS		0

/* endianness */

#define PCR←Arch←ENDIAN3210	0	/* big */
#define PCR←Arch←ENDIAN0123	0	/* little */
#define PCR←Arch←ENDIAN1032	0	/* weird */
#define PCR←Arch←ENDIAN2301	0	/* weird */

/* word size */

#undef PCR←Arch←STD←SIZES /* 8-bit byte, 16-bit short, 32-bit int/long/ptr */

/* alignment constraint: 0, 0x1, 0x3, 0x7, ... */

#undef PCR←Arch←ALIGN←MASK

/* stack direction: > 0 or < 0 */

#undef PCR←Arch←STK←PUSH←DIR

/*
 * Here we actually set this stuff for the chosen architecture
 */

#if (PCR←Arch←SPARC) || (PCR←Arch←SUN4)

#   undef PCR←Arch←ENDIAN3210
#   define PCR←Arch←ENDIAN3210		1

#   define PCR←Arch←STD←SIZES		1
#   define PCR←Arch←ALIGN←MASK		0x7
#   define PCR←Arch←STK←PUSH←DIR	(-1)

#elif (PCR←Arch←IBMR6000)

#   error IBMR6000 NYI

#elif (PCR←Arch←IRIS)

#else

#   error unknown arch

#endif

/* sanity checks */

#if ! PCR←Arch←STD←SIZES
#   error nonstandard sizes -- someday I will figure this out
#endif

#if ! defined(PCR←Arch←ALIGN←MASK)
#   error alignment constraint required
#endif

#if ! defined(PCR←Arch←STK←PUSH←DIR)
#   error no stack push direction defined
#endif

#endif /* ! ←←PCR←Arch←h */

/*
$Log$
*/