/* Definitions of target machine for GNU compiler, for IBM RS/6000.
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
   2000, 2001, 2002, 2003, 2004, 2005, 2006
   Free Software Foundation, Inc.
   Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)

   This file is part of GCC.

   GCC is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published
   by the Free Software Foundation; either version 2, or (at your
   option) any later version.

   GCC is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   You should have received a copy of the GNU General Public License
   along with GCC; see the file COPYING.  If not, write to the
   Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
   MA 02110-1301, USA.  */

/* Note that some other tm.h files include this one and then override
   many of the definitions.  */

/* Definitions for the object file format.  These are set at
   compile-time.  */

#define OBJECT_XCOFF 1
#define OBJECT_ELF 2
#define OBJECT_PEF 3
#define OBJECT_MACHO 4

#define TARGET_ELF (TARGET_OBJECT_FORMAT == OBJECT_ELF)
#define TARGET_XCOFF (TARGET_OBJECT_FORMAT == OBJECT_XCOFF)
#define TARGET_MACOS (TARGET_OBJECT_FORMAT == OBJECT_PEF)
#define TARGET_MACHO (TARGET_OBJECT_FORMAT == OBJECT_MACHO)

#ifndef TARGET_AIX
#define TARGET_AIX 0
#endif

/* Control whether function entry points use a "dot" symbol when
   ABI_AIX.  */
#define DOT_SYMBOLS 1

/* Default string to use for cpu if not specified.  */
#ifndef TARGET_CPU_DEFAULT
#define TARGET_CPU_DEFAULT ((char *)0)
#endif

/* If configured for PPC405, support PPC405CR Erratum77.  */
#ifdef CONFIG_PPC405CR
#define PPC405_ERRATUM77 (rs6000_cpu == PROCESSOR_PPC405)
#else
#define PPC405_ERRATUM77 0
#endif

/* Common ASM definitions used by ASM_SPEC among the various targets
   for handling -mcpu=xxx switches.  */
#define ASM_CPU_SPEC \
"%{!mcpu*: \
  %{mpower: %{!mpower2: -mpwr}} \
  %{mpower2: -mpwrx} \
  %{mpowerpc64*: -mppc64} \
  %{!mpowerpc64*: %{mpowerpc*: -mppc}} \
  %{mno-power: %{!mpowerpc*: -mcom}} \
  %{!mno-power: %{!mpower*: %(asm_default)}}} \
%{mcpu=common: -mcom} \
%{mcpu=power: -mpwr} \
%{mcpu=power2: -mpwrx} \
%{mcpu=power3: -mppc64} \
%{mcpu=power4: -mpower4} \
%{mcpu=power5: -mpower4} \
%{mcpu=power5+: -mpower4} \
%{mcpu=power6: -mpower4 -maltivec} \
%{mcpu=powerpc: -mppc} \
%{mcpu=rios: -mpwr} \
%{mcpu=rios1: -mpwr} \
%{mcpu=rios2: -mpwrx} \
%{mcpu=rsc: -mpwr} \
%{mcpu=rsc1: -mpwr} \
%{mcpu=rs64a: -mppc64} \
%{mcpu=401: -mppc} \
%{mcpu=403: -m403} \
%{mcpu=405: -m405} \
%{mcpu=405fp: -m405} \
%{mcpu=440: -m440} \
%{mcpu=440fp: -m440} \
%{mcpu=505: -mppc} \
%{mcpu=601: -m601} \
%{mcpu=602: -mppc} \
%{mcpu=603: -mppc} \
%{mcpu=603e: -mppc} \
%{mcpu=ec603e: -mppc} \
%{mcpu=604: -mppc} \
%{mcpu=604e: -mppc} \
%{mcpu=620: -mppc64} \
%{mcpu=630: -mppc64} \
%{mcpu=740: -mppc} \
%{mcpu=750: -mppc} \
%{mcpu=G3: -mppc} \
%{mcpu=7400: -mppc -maltivec} \
%{mcpu=7450: -mppc -maltivec} \
%{mcpu=G4: -mppc -maltivec} \
%{mcpu=801: -mppc} \
%{mcpu=821: -mppc} \
%{mcpu=823: -mppc} \
%{mcpu=860: -mppc} \
%{mcpu=970: -mpower4 -maltivec} \
%{mcpu=G5: -mpower4 -maltivec} \
%{mcpu=8540: -me500} \
%{maltivec: -maltivec} \
-many"

#define CPP_DEFAULT_SPEC ""

#define ASM_DEFAULT_SPEC ""

/* This macro defines names of additional specifications to put in the specs
   that can be used in various specifications like CC1_SPEC.  Its definition
   is an initializer with a subgrouping for each command option.

   Each subgrouping contains a string constant, that defines the
   specification name, and a string constant that used by the GCC driver
   program.

   Do not define this macro if it does not need to do anything.  */

#define SUBTARGET_EXTRA_SPECS

#define EXTRA_SPECS							\
  { "cpp_default",		CPP_DEFAULT_SPEC },			\
  { "asm_cpu",			ASM_CPU_SPEC },				\
  { "asm_default",		ASM_DEFAULT_SPEC },			\
  SUBTARGET_EXTRA_SPECS

/* Architecture type.  */

/* Define TARGET_MFCRF if the target assembler does not support the
   optional field operand for mfcr.  */

#ifndef HAVE_AS_MFCRF
#undef  TARGET_MFCRF
#define TARGET_MFCRF 0
#endif

/* Define TARGET_POPCNTB if the target assembler does not support the
   popcount byte instruction.  */

#ifndef HAVE_AS_POPCNTB
#undef  TARGET_POPCNTB
#define TARGET_POPCNTB 0
#endif

/* Define TARGET_FPRND if the target assembler does not support the
   fp rounding instructions.  */

#ifndef HAVE_AS_FPRND
#undef  TARGET_FPRND
#define TARGET_FPRND 0
#endif

#ifndef TARGET_SECURE_PLT
#define TARGET_SECURE_PLT 0
#endif

#define TARGET_32BIT		(! TARGET_64BIT)

#ifndef HAVE_AS_TLS
#define HAVE_AS_TLS 0
#endif

/* Return 1 for a symbol ref for a thread-local storage symbol.  */
#define RS6000_SYMBOL_REF_TLS_P(RTX) \
  (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)

#ifdef IN_LIBGCC2
/* For libgcc2 we make sure this is a compile time constant */
#if defined (__64BIT__) || defined (__powerpc64__) || defined (__ppc64__)
#undef TARGET_POWERPC64
#define TARGET_POWERPC64	1
#else
#undef TARGET_POWERPC64
#define TARGET_POWERPC64	0
#endif
#else
    /* The option machinery will define this.  */
#endif

#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)

/* Processor type.  Order must match cpu attribute in MD file.  */
enum processor_type
 {
   PROCESSOR_RIOS1,
   PROCESSOR_RIOS2,
   PROCESSOR_RS64A,
   PROCESSOR_MPCCORE,
   PROCESSOR_PPC403,
   PROCESSOR_PPC405,
   PROCESSOR_PPC440,
   PROCESSOR_PPC601,
   PROCESSOR_PPC603,
   PROCESSOR_PPC604,
   PROCESSOR_PPC604e,
   PROCESSOR_PPC620,
   PROCESSOR_PPC630,
   PROCESSOR_PPC750,
   PROCESSOR_PPC7400,
   PROCESSOR_PPC7450,
   PROCESSOR_PPC8540,
   PROCESSOR_POWER4,
   PROCESSOR_POWER5
};

/* LLVM LOCAL begin */
extern const char *rs6000_cpu_target;
/* LLVM LOCAL end */

extern enum processor_type rs6000_cpu;

/* Recast the processor type to the cpu attribute.  */
#define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)

/* Define generic processor types based upon current deployment.  */
#define PROCESSOR_COMMON    PROCESSOR_PPC601
#define PROCESSOR_POWER     PROCESSOR_RIOS1
#define PROCESSOR_POWERPC   PROCESSOR_PPC604
#define PROCESSOR_POWERPC64 PROCESSOR_RS64A

/* Define the default processor.  This is overridden by other tm.h files.  */
#define PROCESSOR_DEFAULT   PROCESSOR_RIOS1
#define PROCESSOR_DEFAULT64 PROCESSOR_RS64A

/* Specify the dialect of assembler to use.  New mnemonics is dialect one
   and the old mnemonics are dialect zero.  */
#define ASSEMBLER_DIALECT (TARGET_NEW_MNEMONICS ? 1 : 0)

/* Types of costly dependences.  */
enum rs6000_dependence_cost
 {
   max_dep_latency = 1000,
   no_dep_costly,
   all_deps_costly,
   true_store_to_load_dep_costly,
   store_to_load_dep_costly
 };

/* Types of nop insertion schemes in sched target hook sched_finish.  */
enum rs6000_nop_insertion
  {
    sched_finish_regroup_exact = 1000,
    sched_finish_pad_groups,
    sched_finish_none
  };

/* Dispatch group termination caused by an insn.  */
enum group_termination
  {
    current_group,
    previous_group
  };

/* Support for a compile-time default CPU, et cetera.  The rules are:
   --with-cpu is ignored if -mcpu is specified.
   --with-tune is ignored if -mtune is specified.
   --with-float is ignored if -mhard-float or -msoft-float are
    specified.  */
#define OPTION_DEFAULT_SPECS \
  {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
  {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
  {"float", "%{!msoft-float:%{!mhard-float:-m%(VALUE)-float}}" }

/* rs6000_select[0] is reserved for the default cpu defined via --with-cpu */
struct rs6000_cpu_select
{
  const char *string;
  const char *name;
  int set_tune_p;
  int set_arch_p;
};

extern struct rs6000_cpu_select rs6000_select[];

/* Debug support */
extern const char *rs6000_debug_name;	/* Name for -mdebug-xxxx option */
extern int rs6000_debug_stack;		/* debug stack applications */
extern int rs6000_debug_arg;		/* debug argument handling */

#define	TARGET_DEBUG_STACK	rs6000_debug_stack
#define	TARGET_DEBUG_ARG	rs6000_debug_arg

extern const char *rs6000_traceback_name; /* Type of traceback table.  */

/* These are separate from target_flags because we've run out of bits
   there.  */
extern int rs6000_long_double_type_size;
extern int rs6000_ieeequad;
extern int rs6000_altivec_abi;
extern int rs6000_spe_abi;
extern int rs6000_float_gprs;
extern int rs6000_alignment_flags;
extern const char *rs6000_sched_insert_nops_str;
extern enum rs6000_nop_insertion rs6000_sched_insert_nops;

/* Alignment options for fields in structures for sub-targets following
   AIX-like ABI.
   ALIGN_POWER word-aligns FP doubles (default AIX ABI).
   ALIGN_NATURAL doubleword-aligns FP doubles (align to object size).

   Override the macro definitions when compiling libobjc to avoid undefined
   reference to rs6000_alignment_flags due to library's use of GCC alignment
   macros which use the macros below.  */

#ifndef IN_TARGET_LIBS
#define MASK_ALIGN_POWER   0x00000000
#define MASK_ALIGN_NATURAL 0x00000001
#define TARGET_ALIGN_NATURAL (rs6000_alignment_flags & MASK_ALIGN_NATURAL)
/* APPLE LOCAL begin Macintosh alignment 2002-2-26 --ff */
#define OPTION_MASK_ALIGN_MAC68K  0x00000002
#define OPTION_ALIGN_MAC68K (rs6000_alignment_flags & OPTION_MASK_ALIGN_MAC68K)
/* APPLE LOCAL end Macintosh alignment 2002-2-26 --ff */
#else
#define TARGET_ALIGN_NATURAL 0
#endif

#define TARGET_LONG_DOUBLE_128 (rs6000_long_double_type_size == 128)
#define TARGET_IEEEQUAD rs6000_ieeequad
#define TARGET_ALTIVEC_ABI rs6000_altivec_abi

#define TARGET_SPE_ABI 0
#define TARGET_SPE 0
#define TARGET_E500 0
#define TARGET_ISEL 0
#define TARGET_FPRS 1
#define TARGET_E500_SINGLE 0
#define TARGET_E500_DOUBLE 0

/* E500 processors only support plain "sync", not lwsync.  */
#define TARGET_NO_LWSYNC TARGET_E500

/* Sometimes certain combinations of command options do not make sense
   on a particular target machine.  You can define a macro
   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
   defined, is executed once just after all the command options have
   been parsed.

   Do not use this macro to turn on various extra optimizations for
   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.

   On the RS/6000 this is used to define the target cpu type.  */

#define OVERRIDE_OPTIONS rs6000_override_options (TARGET_CPU_DEFAULT)

/* Define this to change the optimizations performed by default.  */
#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) optimization_options(LEVEL,SIZE)

/* Show we can debug even without a frame pointer.  */
#define CAN_DEBUG_WITHOUT_FP

/* Target pragma.  */
#define REGISTER_TARGET_PRAGMAS() do {				\
  c_register_pragma (0, "longcall", rs6000_pragma_longcall);	\
  targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \
} while (0)

/* Target #defines.  */
#define TARGET_CPU_CPP_BUILTINS() \
  rs6000_cpu_cpp_builtins (pfile)

/* This is used by rs6000_cpu_cpp_builtins to indicate the byte order
   we're compiling for.  Some configurations may need to override it.  */
#define RS6000_CPU_CPP_ENDIAN_BUILTINS()	\
  do						\
    {						\
      if (BYTES_BIG_ENDIAN)			\
	{					\
	  builtin_define ("__BIG_ENDIAN__");	\
	  builtin_define ("_BIG_ENDIAN");	\
	  builtin_assert ("machine=bigendian");	\
	}					\
      else					\
	{					\
	  builtin_define ("__LITTLE_ENDIAN__");	\
	  builtin_define ("_LITTLE_ENDIAN");	\
	  builtin_assert ("machine=littleendian"); \
	}					\
    }						\
  while (0)

/* Target machine storage layout.  */

/* Define this macro if it is advisable to hold scalars in registers
   in a wider mode than that declared by the program.  In such cases,
   the value is constrained to be within the bounds of the declared
   type, but kept valid in the wider mode.  The signedness of the
   extension may differ from that of the type.  */

#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)	\
  if (GET_MODE_CLASS (MODE) == MODE_INT		\
      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
    (MODE) = TARGET_32BIT ? SImode : DImode;

/* Define this if most significant bit is lowest numbered
   in instructions that operate on numbered bit-fields.  */
/* That is true on RS/6000.  */
#define BITS_BIG_ENDIAN 1

/* Define this if most significant byte of a word is the lowest numbered.  */
/* That is true on RS/6000.  */
#define BYTES_BIG_ENDIAN 1

/* Define this if most significant word of a multiword number is lowest
   numbered.

   For RS/6000 we can decide arbitrarily since there are no machine
   instructions for them.  Might as well be consistent with bits and bytes.  */
#define WORDS_BIG_ENDIAN 1

#define MAX_BITS_PER_WORD 64

/* Width of a word, in units (bytes).  */
#define UNITS_PER_WORD (! TARGET_POWERPC64 ? 4 : 8)
#ifdef IN_LIBGCC2
#define MIN_UNITS_PER_WORD UNITS_PER_WORD
#else
#define MIN_UNITS_PER_WORD 4
#endif
#define UNITS_PER_FP_WORD 8
#define UNITS_PER_ALTIVEC_WORD 16
#define UNITS_PER_SPE_WORD 8

/* Type used for ptrdiff_t, as a string used in a declaration.  */
#define PTRDIFF_TYPE "int"

/* Type used for size_t, as a string used in a declaration.  */
#define SIZE_TYPE "long unsigned int"

/* Type used for wchar_t, as a string used in a declaration.  */
#define WCHAR_TYPE "short unsigned int"

/* Width of wchar_t in bits.  */
#define WCHAR_TYPE_SIZE 16

/* A C expression for the size in bits of the type `short' on the
   target machine.  If you don't define this, the default is half a
   word.  (If this would be less than one storage unit, it is
   rounded up to one unit.)  */
#define SHORT_TYPE_SIZE 16

/* A C expression for the size in bits of the type `int' on the
   target machine.  If you don't define this, the default is one
   word.  */
#define INT_TYPE_SIZE 32

/* A C expression for the size in bits of the type `long' on the
   target machine.  If you don't define this, the default is one
   word.  */
#define LONG_TYPE_SIZE (TARGET_32BIT ? 32 : 64)

/* A C expression for the size in bits of the type `long long' on the
   target machine.  If you don't define this, the default is two
   words.  */
#define LONG_LONG_TYPE_SIZE 64

/* A C expression for the size in bits of the type `float' on the
   target machine.  If you don't define this, the default is one
   word.  */
#define FLOAT_TYPE_SIZE 32

/* A C expression for the size in bits of the type `double' on the
   target machine.  If you don't define this, the default is two
   words.  */
#define DOUBLE_TYPE_SIZE 64

/* A C expression for the size in bits of the type `long double' on
   the target machine.  If you don't define this, the default is two
   words.  */
#define LONG_DOUBLE_TYPE_SIZE rs6000_long_double_type_size

/* Define this to set long double type size to use in libgcc2.c, which can
   not depend on target_flags.  */
#ifdef __LONG_DOUBLE_128__
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
#else
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
#endif

/* Work around rs6000_long_double_type_size dependency in ada/targtyps.c.  */
#define WIDEST_HARDWARE_FP_SIZE 64

/* Width in bits of a pointer.
   See also the macro `Pmode' defined below.  */
#define POINTER_SIZE (TARGET_32BIT ? 32 : 64)

/* Allocation boundary (in *bits*) for storing arguments in argument list.  */
#define PARM_BOUNDARY (TARGET_32BIT ? 32 : 64)

/* Boundary (in *bits*) on which stack pointer should be aligned.  */
#define STACK_BOUNDARY \
  ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)

/* Allocation boundary (in *bits*) for the code of a function.  */
#define FUNCTION_BOUNDARY 32

/* APPLE LOCAL begin Macintosh alignment */
/* Constants for alignment macros below.  */
#define RS6000_DOUBLE_ALIGNMENT 64
#define RS6000_LONGLONG_ALIGNMENT 64
#define RS6000_VECTOR_ALIGNMENT 128
/* APPLE LOCAL end Macintosh alignment */

/* No data type wants to be aligned rounder than this.  */
#define BIGGEST_ALIGNMENT 128

/* A C expression to compute the alignment for a variables in the
   local store.  TYPE is the data type, and ALIGN is the alignment
   that the object would ordinarily have.  */
#define LOCAL_ALIGNMENT(TYPE, ALIGN)				\
  ((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) ? 128 :	\
    (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 : \
    (TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE \
     && SPE_VECTOR_MODE (TYPE_MODE (TYPE))) ? 64 : ALIGN)

/* Alignment of field after `int : 0' in a structure.  */
#define EMPTY_FIELD_BOUNDARY 32

/* Every structure's size must be a multiple of this.  */
#define STRUCTURE_SIZE_BOUNDARY 8

/* Return 1 if a structure or array containing FIELD should be
   accessed using `BLKMODE'.

   For the SPE, simd types are V2SI, and gcc can be tempted to put the
   entire thing in a DI and use subregs to access the internals.
   store_bit_field() will force (subreg:DI (reg:V2SI x))'s to the
   back-end.  Because a single GPR can hold a V2SI, but not a DI, the
   best thing to do is set structs to BLKmode and avoid Severe Tire
   Damage.

   On e500 v2, DF and DI modes suffer from the same anomaly.  DF can
   fit into 1, whereas DI still needs two.  */
#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \
  ((TARGET_SPE && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
   || (TARGET_E500_DOUBLE && (MODE) == DFmode))

/* A bit-field declared as `int' forces `int' alignment for the struct.  */
#define PCC_BITFIELD_TYPE_MATTERS 1

/* Make strings word-aligned so strcpy from constants will be faster.
   Make vector constants quadword aligned.  */
#define CONSTANT_ALIGNMENT(EXP, ALIGN)                           \
  (TREE_CODE (EXP) == STRING_CST	                         \
   && (ALIGN) < BITS_PER_WORD                                    \
   ? BITS_PER_WORD                                               \
   : (ALIGN))

/* Make arrays of chars word-aligned for the same reasons.
   Align vectors to 128 bits.  Align SPE vectors and E500 v2 doubles to
   64 bits.  */
#define DATA_ALIGNMENT(TYPE, ALIGN)		\
  (TREE_CODE (TYPE) == VECTOR_TYPE ? (TARGET_SPE_ABI ? 64 : 128)	\
   : (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 \
   : TREE_CODE (TYPE) == ARRAY_TYPE		\
   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode	\
   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))

/* Nonzero if move instructions will actually fail to work
   when given unaligned data.  */
#define STRICT_ALIGNMENT 0

/* Define this macro to be the value 1 if unaligned accesses have a cost
   many times greater than aligned accesses, for example if they are
   emulated in a trap handler.  */
#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN)				\
  (STRICT_ALIGNMENT							\
   || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode	\
	|| (MODE) == DImode)						\
       && (ALIGN) < 32))

/* Standard register usage.  */

/* Number of actual hardware registers.
   The hardware registers are assigned numbers for the compiler
   from 0 to just below FIRST_PSEUDO_REGISTER.
   All registers that the compiler knows about must be given numbers,
   even those that are not normally considered general registers.

   RS/6000 has 32 fixed-point registers, 32 floating-point registers,
   an MQ register, a count register, a link register, and 8 condition
   register fields, which we view here as separate registers.  AltiVec
   adds 32 vector registers and a VRsave register.

   In addition, the difference between the frame and argument pointers is
   a function of the number of registers saved, so we need to have a
   register for AP that will later be eliminated in favor of SP or FP.
   This is a normal register, but it is fixed.

   We also create a pseudo register for float/int conversions, that will
   really represent the memory location used.  It is represented here as
   a register, in order to work around problems in allocating stack storage
   in inline functions.

   Another pseudo (not included in DWARF_FRAME_REGISTERS) is soft frame
   pointer, which is eventually eliminated in favor of SP or FP.  */

/* APPLE LOCAL begin 3399553 */
/* OK, so this isn't technically the last physical register on the
   processor.  It's the last register we want mapped into the EH
   information.  Typically, this would be the last physical register,
   however in our case we'd like to maintain backwards compatibility
   instead of defining space we won't use anyway.  */
#define LAST_PHYSICAL_REGISTER	113

#define FIRST_PSEUDO_REGISTER 115
/* APPLE LOCAL end 3399553 */

/* This must be included for pre gcc 3.0 glibc compatibility.  */
#define PRE_GCC3_DWARF_FRAME_REGISTERS 77

/* Add 32 dwarf columns for synthetic SPE registers.  */
/* APPLE LOCAL 3399553 */
#define DWARF_FRAME_REGISTERS (LAST_PHYSICAL_REGISTER + 32)

/* The SPE has an additional 32 synthetic registers, with DWARF debug
   info numbering for these registers starting at 1200.  While eh_frame
   register numbering need not be the same as the debug info numbering,
   we choose to number these regs for eh_frame at 1200 too.  This allows
   future versions of the rs6000 backend to add hard registers and
   continue to use the gcc hard register numbering for eh_frame.  If the
   extra SPE registers in eh_frame were numbered starting from the
   current value of FIRST_PSEUDO_REGISTER, then if FIRST_PSEUDO_REGISTER
   changed we'd need to introduce a mapping in DWARF_FRAME_REGNUM to
   avoid invalidating older SPE eh_frame info.

   We must map them here to avoid huge unwinder tables mostly consisting
   of unused space.  */
/* APPLE LOCAL begin 3399553 */
#define DWARF_REG_TO_UNWIND_COLUMN(r)  \
  ((r) > 1200 ? ((r) - 1200 + LAST_PHYSICAL_REGISTER) : (r))
/* APPLE LOCAL end 3399553 */

/* Use standard DWARF numbering for DWARF debugging information.  */
#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)

/* Use gcc hard register numbering for eh_frame.  */
#define DWARF_FRAME_REGNUM(REGNO) (REGNO)

/* Map register numbers held in the call frame info that gcc has
   collected using DWARF_FRAME_REGNUM to those that should be output in
   .debug_frame and .eh_frame.  We continue to use gcc hard reg numbers
   for .eh_frame, but use the numbers mandated by the various ABIs for
   .debug_frame.  rs6000_emit_prologue has translated any combination of
   CR2, CR3, CR4 saves to a save of CR2.  The actual code emitted saves
   the whole of CR, so we map CR2_REGNO to the DWARF reg for CR.  */
#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH)	\
  ((FOR_EH) ? (REGNO)				\
   : (REGNO) == CR2_REGNO ? 64			\
   : DBX_REGISTER_NUMBER (REGNO))

/* 1 for registers that have pervasive standard uses
   and are not available for the register allocator.

   On RS/6000, r1 is used for the stack.  On Darwin, r2 is available
   as a local register; for all other OS's r2 is the TOC pointer.

   cr5 is not supposed to be used.

   On System V implementations, r13 is fixed and not available for use.  */

#define FIXED_REGISTERS  \
  {0, 1, FIXED_R2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FIXED_R13, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,	   \
   /* AltiVec registers.  */			   \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1						   \
   , 1, 1, 1                                       \
   /* APPLE LOCAL 3399553 */                       \
   , 1                                             \
}

/* 1 for registers not available across function calls.
   These must include the FIXED_REGISTERS and also any
   registers that can be used without being saved.
   The latter must include the registers where values are returned
   and the register where structure-value addresses are passed.
   Aside from that, you can include as many other registers as you like.  */

#define CALL_USED_REGISTERS  \
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,	   \
   /* AltiVec registers.  */			   \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1						   \
   , 1, 1, 1                                       \
   /* APPLE LOCAL 3399553 */                       \
   , 1                                             \
}

/* Like `CALL_USED_REGISTERS' except this macro doesn't require that
   the entire set of `FIXED_REGISTERS' be included.
   (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
   This macro is optional.  If not specified, it defaults to the value
   of `CALL_USED_REGISTERS'.  */

#define CALL_REALLY_USED_REGISTERS  \
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,	   \
   /* AltiVec registers.  */			   \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0						   \
   , 0, 0, 0                                       \
   /* APPLE LOCAL 3399553 */                       \
   , 0						   \
}

#define MQ_REGNO     64
#define CR0_REGNO    68
#define CR1_REGNO    69
#define CR2_REGNO    70
#define CR3_REGNO    71
#define CR4_REGNO    72
#define MAX_CR_REGNO 75
#define XER_REGNO    76
#define FIRST_ALTIVEC_REGNO	77
#define LAST_ALTIVEC_REGNO	108
#define TOTAL_ALTIVEC_REGS	(LAST_ALTIVEC_REGNO - FIRST_ALTIVEC_REGNO + 1)
#define VRSAVE_REGNO		109
#define VSCR_REGNO		110
#define SPE_ACC_REGNO		111
#define SPEFSCR_REGNO		112
/* APPLE LOCAL 3399553 */
#define FPSCR_REGNO		114

#define FIRST_SAVED_ALTIVEC_REGNO (FIRST_ALTIVEC_REGNO+20)
#define FIRST_SAVED_FP_REGNO    (14+32)
#define FIRST_SAVED_GP_REGNO 13

/* APPLE LOCAL begin 3399553 */
/* List the order in which to allocate registers.  Each register must be
   listed once, even those in FIXED_REGISTERS.

   We allocate in the following order:
	fp0		(not saved or used for anything)
	fp13 - fp2	(not saved; incoming fp arg registers)
	fp1		(not saved; return value)
	fp31 - fp14	(saved; order given to save least number)
	cr7, cr6	(not saved or special)
	cr1		(not saved, but used for FP operations)
	cr0		(not saved, but used for arithmetic operations)
	cr4, cr3, cr2	(saved)
	r0		(not saved; cannot be base reg)
	r9		(not saved; best for TImode)
	r11, r10, r8-r4	(not saved; highest used first to make less conflict)
	r3		(not saved; return value register)
	r31 - r13	(saved; order given to save least number)
	r12		(not saved; if used for DImode or DFmode would use r13)
	mq		(not saved; best to use it if we can)
	ctr		(not saved; when we have the choice ctr is better)
	lr		(saved)
	cr5, r1, r2, ap, xer (fixed)
	v0 - v1		(not saved or used for anything)
	v13 - v3	(not saved; incoming vector arg registers)
	v2		(not saved; incoming vector arg reg; return value)
	v19 - v14	(not saved or used for anything)
	v31 - v20	(saved; order given to save least number)
	vrsave, vscr	(fixed)
	spe_acc, spefscr (fixed)
	sfp		(fixed)
        fpscr		(fixed)
*/
/* APPLE LOCAL end 3399553 */

#if FIXED_R2 == 1
#define MAYBE_R2_AVAILABLE
#define MAYBE_R2_FIXED 2,
#else
#define MAYBE_R2_AVAILABLE 2,
#define MAYBE_R2_FIXED
#endif

#define REG_ALLOC_ORDER						\
  {32,								\
   45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34,		\
   33,								\
   63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,		\
   50, 49, 48, 47, 46,						\
   75, 74, 69, 68, 72, 71, 70,					\
   0, MAYBE_R2_AVAILABLE					\
   9, 11, 10, 8, 7, 6, 5, 4,					\
   3,								\
   31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19,		\
   18, 17, 16, 15, 14, 13, 12,					\
   64, 66, 65,							\
   73, 1, MAYBE_R2_FIXED 67, 76,				\
   /* AltiVec registers.  */					\
   77, 78,							\
   90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80,			\
   79,								\
   96, 95, 94, 93, 92, 91,					\
   108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97,	\
   109, 110,							\
   /* APPLE LOCAL 3399553 */					\
   111, 112, 113, 114						\
}

/* True if register is floating-point.  */
#define FP_REGNO_P(N) ((N) >= 32 && (N) <= 63)

/* True if register is a condition register.  */
#define CR_REGNO_P(N) ((N) >= 68 && (N) <= 75)

/* True if register is a condition register, but not cr0.  */
#define CR_REGNO_NOT_CR0_P(N) ((N) >= 69 && (N) <= 75)

/* True if register is an integer register.  */
#define INT_REGNO_P(N) \
  ((N) <= 31 || (N) == ARG_POINTER_REGNUM || (N) == FRAME_POINTER_REGNUM)

/* SPE SIMD registers are just the GPRs.  */
#define SPE_SIMD_REGNO_P(N) ((N) <= 31)

/* True if register is the XER register.  */
#define XER_REGNO_P(N) ((N) == XER_REGNO)

/* True if register is an AltiVec register.  */
#define ALTIVEC_REGNO_P(N) ((N) >= FIRST_ALTIVEC_REGNO && (N) <= LAST_ALTIVEC_REGNO)

/* Return number of consecutive hard regs needed starting at reg REGNO
   to hold something of mode MODE.  */

#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs ((REGNO), (MODE))

#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE)	\
  ((TARGET_32BIT && TARGET_POWERPC64			\
    && (GET_MODE_SIZE (MODE) > 4)  \
    && INT_REGNO_P (REGNO)) ? 1 : 0)

#define ALTIVEC_VECTOR_MODE(MODE)	\
	 ((MODE) == V16QImode		\
	  || (MODE) == V8HImode		\
	  || (MODE) == V4SFmode		\
	  || (MODE) == V4SImode)

#define SPE_VECTOR_MODE(MODE)		\
	((MODE) == V4HImode          	\
         || (MODE) == V2SFmode          \
         || (MODE) == V1DImode          \
         || (MODE) == V2SImode)

#define UNITS_PER_SIMD_WORD					\
        (TARGET_ALTIVEC ? UNITS_PER_ALTIVEC_WORD		\
	 : (TARGET_SPE ? UNITS_PER_SPE_WORD : UNITS_PER_WORD))

/* Value is TRUE if hard register REGNO can hold a value of
   machine-mode MODE.  */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
  rs6000_hard_regno_mode_ok_p[(int)(MODE)][REGNO]

/* Value is 1 if it is a good idea to tie two pseudo registers
   when one has mode MODE1 and one has mode MODE2.
   If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
   for any hard reg, then this must be 0 for correct output.  */
#define MODES_TIEABLE_P(MODE1, MODE2) \
  (SCALAR_FLOAT_MODE_P (MODE1)			\
   ? SCALAR_FLOAT_MODE_P (MODE2)		\
   : SCALAR_FLOAT_MODE_P (MODE2)		\
   ? SCALAR_FLOAT_MODE_P (MODE1)		\
   : GET_MODE_CLASS (MODE1) == MODE_CC		\
   ? GET_MODE_CLASS (MODE2) == MODE_CC		\
   : GET_MODE_CLASS (MODE2) == MODE_CC		\
   ? GET_MODE_CLASS (MODE1) == MODE_CC		\
   : SPE_VECTOR_MODE (MODE1)			\
   ? SPE_VECTOR_MODE (MODE2)			\
   : SPE_VECTOR_MODE (MODE2)			\
   ? SPE_VECTOR_MODE (MODE1)			\
   : ALTIVEC_VECTOR_MODE (MODE1)		\
   ? ALTIVEC_VECTOR_MODE (MODE2)		\
   : ALTIVEC_VECTOR_MODE (MODE2)		\
   ? ALTIVEC_VECTOR_MODE (MODE1)		\
   : 1)

/* Post-reload, we can't use any new AltiVec registers, as we already
   emitted the vrsave mask.  */

#define HARD_REGNO_RENAME_OK(SRC, DST) \
  (! ALTIVEC_REGNO_P (DST) || regs_ever_live[DST])

/* A C expression returning the cost of moving data from a register of class
   CLASS1 to one of CLASS2.  */

#define REGISTER_MOVE_COST rs6000_register_move_cost

/* A C expressions returning the cost of moving data of MODE from a register to
   or from memory.  */

#define MEMORY_MOVE_COST rs6000_memory_move_cost

/* Specify the cost of a branch insn; roughly the number of extra insns that
   should be added to avoid a branch.

   Set this to 3 on the RS/6000 since that is roughly the average cost of an
   unscheduled conditional branch.  */

#define BRANCH_COST 3

/* Override BRANCH_COST heuristic which empirically produces worse
   performance for removing short circuiting from the logical ops.  */

#define LOGICAL_OP_NON_SHORT_CIRCUIT 0

/* A fixed register used at prologue and epilogue generation to fix
   addressing modes.  The SPE needs heavy addressing fixes at the last
   minute, and it's best to save a register for it.

   AltiVec also needs fixes, but we've gotten around using r11, which
   is actually wrong because when use_backchain_to_restore_sp is true,
   we end up clobbering r11.

   The AltiVec case needs to be fixed.  Dunno if we should break ABI
   compatibility and reserve a register for it as well..  */

#define FIXED_SCRATCH (TARGET_SPE ? 14 : 11)

/* Define this macro to change register usage conditional on target
   flags.  */

#define CONDITIONAL_REGISTER_USAGE rs6000_conditional_register_usage ()

/* Specify the registers used for certain standard purposes.
   The values of these macros are register numbers.  */

/* RS/6000 pc isn't overloaded on a register that the compiler knows about.  */
/* #define PC_REGNUM  */

/* Register to use for pushing function arguments.  */
#define STACK_POINTER_REGNUM 1

/* Base register for access to local variables of the function.  */
#define HARD_FRAME_POINTER_REGNUM 31

/* Base register for access to local variables of the function.  */
#define FRAME_POINTER_REGNUM 113

/* Value should be nonzero if functions must have frame pointers.
   Zero means the frame pointer need not be set up (and parms
   may be accessed via the stack pointer) in functions that seem suitable.
   This is computed in `reload', in reload1.c.  */
#define FRAME_POINTER_REQUIRED 0

/* Base register for access to arguments of the function.  */
#define ARG_POINTER_REGNUM 67

/* Place to put static chain when calling a function that requires it.  */
#define STATIC_CHAIN_REGNUM 11

/* Link register number.  */
#define LINK_REGISTER_REGNUM 65

/* Count register number.  */
#define COUNT_REGISTER_REGNUM 66

/* Define the classes of registers for register constraints in the
   machine description.  Also define ranges of constants.

   One of the classes must always be named ALL_REGS and include all hard regs.
   If there is more than one class, another class must be named NO_REGS
   and contain no registers.

   The name GENERAL_REGS must be the name of a class (or an alias for
   another name such as ALL_REGS).  This is the class of registers
   that is allowed by "g" or "r" in a register constraint.
   Also, registers outside this class are allocated only when
   instructions express preferences for them.

   The classes must be numbered in nondecreasing order; that is,
   a larger-numbered class must never be contained completely
   in a smaller-numbered class.

   For any two classes, it is very desirable that there be another
   class that represents their union.  */

/* The RS/6000 has three types of registers, fixed-point, floating-point,
   and condition registers, plus three special registers, MQ, CTR, and the
   link register.  AltiVec adds a vector register class.

   However, r0 is special in that it cannot be used as a base register.
   So make a class for registers valid as base registers.

   Also, cr0 is the only condition code register that can be used in
   arithmetic insns, so make a separate class for it.  */

enum reg_class
{
  NO_REGS,
  BASE_REGS,
  GENERAL_REGS,
  FLOAT_REGS,
  ALTIVEC_REGS,
  VRSAVE_REGS,
  VSCR_REGS,
  SPE_ACC_REGS,
  SPEFSCR_REGS,
  NON_SPECIAL_REGS,
  MQ_REGS,
  LINK_REGS,
  CTR_REGS,
  LINK_OR_CTR_REGS,
  SPECIAL_REGS,
  SPEC_OR_GEN_REGS,
  CR0_REGS,
  CR_REGS,
  NON_FLOAT_REGS,
  XER_REGS,
  ALL_REGS,
  LIM_REG_CLASSES
};

#define N_REG_CLASSES (int) LIM_REG_CLASSES

/* Give names of register classes as strings for dump file.  */

#define REG_CLASS_NAMES							\
{									\
  "NO_REGS",								\
  "BASE_REGS",								\
  "GENERAL_REGS",							\
  "FLOAT_REGS",								\
  "ALTIVEC_REGS",							\
  "VRSAVE_REGS",							\
  "VSCR_REGS",								\
  "SPE_ACC_REGS",                                                       \
  "SPEFSCR_REGS",                                                       \
  "NON_SPECIAL_REGS",							\
  "MQ_REGS",								\
  "LINK_REGS",								\
  "CTR_REGS",								\
  "LINK_OR_CTR_REGS",							\
  "SPECIAL_REGS",							\
  "SPEC_OR_GEN_REGS",							\
  "CR0_REGS",								\
  "CR_REGS",								\
  "NON_FLOAT_REGS",							\
  "XER_REGS",								\
  "ALL_REGS"								\
}

/* Define which registers fit in which classes.
   This is an initializer for a vector of HARD_REG_SET
   of length N_REG_CLASSES.  */

#define REG_CLASS_CONTENTS						     \
{									     \
  { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */	     \
  { 0xfffffffe, 0x00000000, 0x00000008, 0x00020000 }, /* BASE_REGS */	     \
  { 0xffffffff, 0x00000000, 0x00000008, 0x00020000 }, /* GENERAL_REGS */     \
  { 0x00000000, 0xffffffff, 0x00000000, 0x00000000 }, /* FLOAT_REGS */       \
  { 0x00000000, 0x00000000, 0xffffe000, 0x00001fff }, /* ALTIVEC_REGS */     \
  { 0x00000000, 0x00000000, 0x00000000, 0x00002000 }, /* VRSAVE_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000000, 0x00004000 }, /* VSCR_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000000, 0x00008000 }, /* SPE_ACC_REGS */     \
  { 0x00000000, 0x00000000, 0x00000000, 0x00010000 }, /* SPEFSCR_REGS */     \
  { 0xffffffff, 0xffffffff, 0x00000008, 0x00020000 }, /* NON_SPECIAL_REGS */ \
  { 0x00000000, 0x00000000, 0x00000001, 0x00000000 }, /* MQ_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000002, 0x00000000 }, /* LINK_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000004, 0x00000000 }, /* CTR_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000006, 0x00000000 }, /* LINK_OR_CTR_REGS */ \
  { 0x00000000, 0x00000000, 0x00000007, 0x00002000 }, /* SPECIAL_REGS */     \
  { 0xffffffff, 0x00000000, 0x0000000f, 0x00022000 }, /* SPEC_OR_GEN_REGS */ \
  { 0x00000000, 0x00000000, 0x00000010, 0x00000000 }, /* CR0_REGS */	     \
  { 0x00000000, 0x00000000, 0x00000ff0, 0x00000000 }, /* CR_REGS */	     \
  { 0xffffffff, 0x00000000, 0x0000efff, 0x00020000 }, /* NON_FLOAT_REGS */   \
  { 0x00000000, 0x00000000, 0x00001000, 0x00000000 }, /* XER_REGS */	     \
  /* APPLE LOCAL 3399553 */						     \
  { 0xffffffff, 0xffffffff, 0xffffffff, 0x0007ffff }  /* ALL_REGS */	     \
}

/* The same information, inverted:
   Return the class number of the smallest class containing
   reg number REGNO.  This could be a conditional expression
   or could index an array.  */

#define REGNO_REG_CLASS(REGNO)			\
 ((REGNO) == 0 ? GENERAL_REGS			\
  : (REGNO) < 32 ? BASE_REGS			\
  : FP_REGNO_P (REGNO) ? FLOAT_REGS		\
  : ALTIVEC_REGNO_P (REGNO) ? ALTIVEC_REGS	\
  : (REGNO) == CR0_REGNO ? CR0_REGS		\
  : CR_REGNO_P (REGNO) ? CR_REGS		\
  : (REGNO) == MQ_REGNO ? MQ_REGS		\
  : (REGNO) == LINK_REGISTER_REGNUM ? LINK_REGS	\
  : (REGNO) == COUNT_REGISTER_REGNUM ? CTR_REGS	\
  : (REGNO) == ARG_POINTER_REGNUM ? BASE_REGS	\
  : (REGNO) == XER_REGNO ? XER_REGS		\
  : (REGNO) == VRSAVE_REGNO ? VRSAVE_REGS	\
  : (REGNO) == VSCR_REGNO ? VRSAVE_REGS		\
  : (REGNO) == SPE_ACC_REGNO ? SPE_ACC_REGS	\
  : (REGNO) == SPEFSCR_REGNO ? SPEFSCR_REGS	\
  : (REGNO) == FRAME_POINTER_REGNUM ? BASE_REGS	\
  : NO_REGS)

/* The class value for index registers, and the one for base regs.  */
#define INDEX_REG_CLASS GENERAL_REGS
#define BASE_REG_CLASS BASE_REGS

/* Given an rtx X being reloaded into a reg required to be
   in class CLASS, return the class of reg to actually use.
   In general this is just CLASS; but on some machines
   in some cases it is preferable to use a more restrictive class.

   On the RS/6000, we have to return NO_REGS when we want to reload a
   floating-point CONST_DOUBLE to force it to be copied to memory.

   We also don't want to reload integer values into floating-point
   registers if we can at all help it.  In fact, this can
   cause reload to die, if it tries to generate a reload of CTR
   into a FP register and discovers it doesn't have the memory location
   required.

   ??? Would it be a good idea to have reload do the converse, that is
   try to reload floating modes into FP registers if possible?
 */

#define PREFERRED_RELOAD_CLASS(X,CLASS)			\
  ((CONSTANT_P (X)					\
    && reg_classes_intersect_p ((CLASS), FLOAT_REGS))	\
   ? NO_REGS 						\
   : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT 	\
      && (CLASS) == NON_SPECIAL_REGS)			\
   ? GENERAL_REGS					\
   : (CLASS))

/* Return the register class of a scratch register needed to copy IN into
   or out of a register in CLASS in MODE.  If it can be done directly,
   NO_REGS is returned.  */

#define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \
  rs6000_secondary_reload_class (CLASS, MODE, IN)

/* If we are copying between FP or AltiVec registers and anything
   else, we need a memory location.  */

#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) 		\
 ((CLASS1) != (CLASS2) && ((CLASS1) == FLOAT_REGS		\
			   || (CLASS2) == FLOAT_REGS		\
			   || (CLASS1) == ALTIVEC_REGS		\
			   || (CLASS2) == ALTIVEC_REGS))

/* Return the maximum number of consecutive registers
   needed to represent mode MODE in a register of class CLASS.

   On RS/6000, this is the size of MODE in words,
   except in the FP regs, where a single reg is enough for two words.  */
#define CLASS_MAX_NREGS(CLASS, MODE)					\
 (((CLASS) == FLOAT_REGS) 						\
  ? ((GET_MODE_SIZE (MODE) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD) \
  : (TARGET_E500_DOUBLE && (CLASS) == GENERAL_REGS && (MODE) == DFmode) \
  ? 1                                                                   \
  : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))

/* Return nonzero if for CLASS a mode change from FROM to TO is invalid.  */

#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)			\
  (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO)				\
   ? ((GET_MODE_SIZE (FROM) < 8 || GET_MODE_SIZE (TO) < 8		\
       || TARGET_IEEEQUAD)						\
      && reg_classes_intersect_p (FLOAT_REGS, CLASS))			\
   : (((TARGET_E500_DOUBLE						\
	&& ((((TO) == DFmode) + ((FROM) == DFmode)) == 1		\
	    || (((TO) == DImode) + ((FROM) == DImode)) == 1))		\
       || (TARGET_SPE							\
	   && (SPE_VECTOR_MODE (FROM) + SPE_VECTOR_MODE (TO)) == 1))	\
      && reg_classes_intersect_p (GENERAL_REGS, CLASS)))

/* Stack layout; function entry, exit and calling.  */

/* Enumeration to give which calling sequence to use.  */
enum rs6000_abi {
  ABI_NONE,
  ABI_AIX,			/* IBM's AIX */
  ABI_V4,			/* System V.4/eabi */
  ABI_DARWIN			/* Apple's Darwin (OS X kernel) */
};

extern enum rs6000_abi rs6000_current_abi;	/* available for use by subtarget */

/* Define this if pushing a word on the stack
   makes the stack pointer a smaller address.  */
#define STACK_GROWS_DOWNWARD

/* Offsets recorded in opcodes are a multiple of this alignment factor.  */
#define DWARF_CIE_DATA_ALIGNMENT (-((int) (TARGET_32BIT ? 4 : 8)))

/* Define this to nonzero if the nominal address of the stack frame
   is at the high-address end of the local variables;
   that is, each additional local variable allocated
   goes at a more negative offset in the frame.

   On the RS/6000, we grow upwards, from the area after the outgoing
   arguments.  */
/* LLVM LOCAL begin stack protector */
#define FRAME_GROWS_DOWNWARD 0
/* LLVM LOCAL end stack protector */


/* Size of the outgoing register save area */
#define RS6000_REG_SAVE ((DEFAULT_ABI == ABI_AIX			\
			  || DEFAULT_ABI == ABI_DARWIN)			\
			 ? (TARGET_64BIT ? 64 : 32)			\
			 : 0)

/* Size of the fixed area on the stack */
#define RS6000_SAVE_AREA \
  (((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) ? 24 : 8)	\
   << (TARGET_64BIT ? 1 : 0))

/* MEM representing address to save the TOC register */
#define RS6000_SAVE_TOC gen_rtx_MEM (Pmode, \
				     plus_constant (stack_pointer_rtx, \
						    (TARGET_32BIT ? 20 : 40)))

/* APPLE LOCAL begin radar 4859753 */
/* Make 8-byte structs BLKmode instead of DImode */
#define RS6000_8BYTE_STRUCT_HACK 0
/* APPLE LOCAL end radar 4859753 */
/* Align an address */
#define RS6000_ALIGN(n,a) (((n) + (a) - 1) & ~((a) - 1))

/* Offset within stack frame to start allocating local variables at.
   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
   first local allocated.  Otherwise, it is the offset to the BEGINNING
   of the first local allocated.

   On the RS/6000, the frame pointer is the same as the stack pointer,
   except for dynamic allocations.  So we start after the fixed area and
   outgoing parameter area.  */

#define STARTING_FRAME_OFFSET						\
  (FRAME_GROWS_DOWNWARD							\
   ? 0									\
   : (RS6000_ALIGN (current_function_outgoing_args_size,		\
		    TARGET_ALTIVEC ? 16 : 8)				\
      + RS6000_SAVE_AREA))

/* Offset from the stack pointer register to an item dynamically
   allocated on the stack, e.g., by `alloca'.

   The default value for this macro is `STACK_POINTER_OFFSET' plus the
   length of the outgoing arguments.  The default is correct for most
   machines.  See `function.c' for details.  */
#define STACK_DYNAMIC_OFFSET(FUNDECL)					\
  (RS6000_ALIGN (current_function_outgoing_args_size,			\
		 TARGET_ALTIVEC ? 16 : 8)				\
   + (STACK_POINTER_OFFSET))

/* If we generate an insn to push BYTES bytes,
   this says how many the stack pointer really advances by.
   On RS/6000, don't define this because there are no push insns.  */
/*  #define PUSH_ROUNDING(BYTES) */

/* Offset of first parameter from the argument pointer register value.
   On the RS/6000, we define the argument pointer to the start of the fixed
   area.  */
#define FIRST_PARM_OFFSET(FNDECL) RS6000_SAVE_AREA

/* Offset from the argument pointer register value to the top of
   stack.  This is different from FIRST_PARM_OFFSET because of the
   register save area.  */
#define ARG_POINTER_CFA_OFFSET(FNDECL) 0

/* Define this if stack space is still allocated for a parameter passed
   in a register.  The value is the number of bytes allocated to this
   area.  */
#define REG_PARM_STACK_SPACE(FNDECL)	RS6000_REG_SAVE

/* Define this if the above stack space is to be considered part of the
   space allocated by the caller.  */
#define OUTGOING_REG_PARM_STACK_SPACE

/* This is the difference between the logical top of stack and the actual sp.

   For the RS/6000, sp points past the fixed area.  */
#define STACK_POINTER_OFFSET RS6000_SAVE_AREA

/* Define this if the maximum size of all the outgoing args is to be
   accumulated and pushed during the prologue.  The amount can be
   found in the variable current_function_outgoing_args_size.  */
#define ACCUMULATE_OUTGOING_ARGS 1

/* Value is the number of bytes of arguments automatically
   popped when returning from a subroutine call.
   FUNDECL is the declaration node of the function (as a tree),
   FUNTYPE is the data type of the function (as a tree),
   or for a library call it is an identifier node for the subroutine name.
   SIZE is the number of bytes of arguments passed on the stack.  */

#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0

/* Define how to find the value returned by a function.
   VALTYPE is the data type of the value (as a tree).
   If the precise function being called is known, FUNC is its FUNCTION_DECL;
   otherwise, FUNC is 0.  */

#define FUNCTION_VALUE(VALTYPE, FUNC) rs6000_function_value ((VALTYPE), (FUNC))

/* Define how to find the value returned by a library function
   assuming the value has mode MODE.  */

#define LIBCALL_VALUE(MODE) rs6000_libcall_value ((MODE))

/* DRAFT_V4_STRUCT_RET defaults off.  */
#define DRAFT_V4_STRUCT_RET 0

/* Let TARGET_RETURN_IN_MEMORY control what happens.  */
#define DEFAULT_PCC_STRUCT_RETURN 0

/* Mode of stack savearea.
   FUNCTION is VOIDmode because calling convention maintains SP.
   BLOCK needs Pmode for SP.
   NONLOCAL needs twice Pmode to maintain both backchain and SP.  */
#define STACK_SAVEAREA_MODE(LEVEL)	\
  (LEVEL == SAVE_FUNCTION ? VOIDmode	\
  : LEVEL == SAVE_NONLOCAL ? (TARGET_32BIT ? DImode : TImode) : Pmode)

/* Minimum and maximum general purpose registers used to hold arguments.  */
#define GP_ARG_MIN_REG 3
#define GP_ARG_MAX_REG 10
#define GP_ARG_NUM_REG (GP_ARG_MAX_REG - GP_ARG_MIN_REG + 1)

/* Minimum and maximum floating point registers used to hold arguments.  */
#define FP_ARG_MIN_REG 33
#define	FP_ARG_AIX_MAX_REG 45
#define	FP_ARG_V4_MAX_REG  40
#define	FP_ARG_MAX_REG ((DEFAULT_ABI == ABI_AIX				\
			 || DEFAULT_ABI == ABI_DARWIN)			\
			? FP_ARG_AIX_MAX_REG : FP_ARG_V4_MAX_REG)
#define FP_ARG_NUM_REG (FP_ARG_MAX_REG - FP_ARG_MIN_REG + 1)

/* Minimum and maximum AltiVec registers used to hold arguments.  */
#define ALTIVEC_ARG_MIN_REG (FIRST_ALTIVEC_REGNO + 2)
#define ALTIVEC_ARG_MAX_REG (ALTIVEC_ARG_MIN_REG + 11)
#define ALTIVEC_ARG_NUM_REG (ALTIVEC_ARG_MAX_REG - ALTIVEC_ARG_MIN_REG + 1)

/* Return registers */
#define GP_ARG_RETURN GP_ARG_MIN_REG
#define FP_ARG_RETURN FP_ARG_MIN_REG
#define ALTIVEC_ARG_RETURN (FIRST_ALTIVEC_REGNO + 2)

/* Flags for the call/call_value rtl operations set up by function_arg */
#define CALL_NORMAL		0x00000000	/* no special processing */
/* Bits in 0x00000001 are unused.  */
#define CALL_V4_CLEAR_FP_ARGS	0x00000002	/* V.4, no FP args passed */
#define CALL_V4_SET_FP_ARGS	0x00000004	/* V.4, FP args were passed */
#define CALL_LONG		0x00000008	/* always call indirect */
#define CALL_LIBCALL		0x00000010	/* libcall */

/* We don't have prologue and epilogue functions to save/restore
   everything for most ABIs.  */
#define WORLD_SAVE_P(INFO) 0

/* 1 if N is a possible register number for a function value
   as seen by the caller.

   On RS/6000, this is r3, fp1, and v2 (for AltiVec).  */
#define FUNCTION_VALUE_REGNO_P(N)					\
  ((N) == GP_ARG_RETURN							\
   || ((N) == FP_ARG_RETURN && TARGET_HARD_FLOAT && TARGET_FPRS)	\
   || ((N) == ALTIVEC_ARG_RETURN && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI))

/* 1 if N is a possible register number for function argument passing.
   On RS/6000, these are r3-r10 and fp1-fp13.
   On AltiVec, v2 - v13 are used for passing vectors.  */
#define FUNCTION_ARG_REGNO_P(N)						\
  ((unsigned) (N) - GP_ARG_MIN_REG < GP_ARG_NUM_REG			\
   || ((unsigned) (N) - ALTIVEC_ARG_MIN_REG < ALTIVEC_ARG_NUM_REG	\
       && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI)				\
   || ((unsigned) (N) - FP_ARG_MIN_REG < FP_ARG_NUM_REG			\
       && TARGET_HARD_FLOAT && TARGET_FPRS))

/* Define a data type for recording info about an argument list
   during the scan of that argument list.  This data type should
   hold all necessary information about the function itself
   and about the args processed so far, enough to enable macros
   such as FUNCTION_ARG to determine where the next arg should go.

   On the RS/6000, this is a structure.  The first element is the number of
   total argument words, the second is used to store the next
   floating-point register number, and the third says how many more args we
   have prototype types for.

   For ABI_V4, we treat these slightly differently -- `sysv_gregno' is
   the next available GP register, `fregno' is the next available FP
   register, and `words' is the number of words used on the stack.

   The varargs/stdarg support requires that this structure's size
   be a multiple of sizeof(int).  */

typedef struct rs6000_args
{
  int words;			/* # words used for passing GP registers */
  int fregno;			/* next available FP register */
  int vregno;			/* next available AltiVec register */
  int nargs_prototype;		/* # args left in the current prototype */
  int prototype;		/* Whether a prototype was defined */
  int stdarg;			/* Whether function is a stdarg function.  */
  int call_cookie;		/* Do special things for this call */
  int sysv_gregno;		/* next available GP register */
  int intoffset;		/* running offset in struct (darwin64) */
  int use_stack;		/* any part of struct on stack (darwin64) */
  /* APPLE LOCAL begin fix 64-bit varargs 4028089 */
  int floats_in_gpr;		/* count of SFmode floats taking up
				   GPR space (darwin64) */
  /* APPLE LOCAL end fix 64-bit varargs 4028089 */
  int named;			/* false for varargs params */
} CUMULATIVE_ARGS;

/* Initialize a variable CUM of type CUMULATIVE_ARGS
   for a call to a function whose data type is FNTYPE.
   For a library call, FNTYPE is 0.  */

#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
  init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE, FALSE, N_NAMED_ARGS)

/* Similar, but when scanning the definition of a procedure.  We always
   set NARGS_PROTOTYPE large so we never return an EXPR_LIST.  */

#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
  init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE, FALSE, 1000)

/* Like INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls.  */

#define INIT_CUMULATIVE_LIBCALL_ARGS(CUM, MODE, LIBNAME) \
  init_cumulative_args (&CUM, NULL_TREE, LIBNAME, FALSE, TRUE, 0)

/* Update the data in CUM to advance over an argument
   of mode MODE and data type TYPE.
   (TYPE is null for libcalls where that information may not be available.)  */

#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)	\
  function_arg_advance (&CUM, MODE, TYPE, NAMED, 0)

/* Determine where to put an argument to a function.
   Value is zero to push the argument on the stack,
   or a hard register in which to store the argument.

   MODE is the argument's machine mode.
   TYPE is the data type of the argument (as a tree).
    This is null for libcalls where that information may
    not be available.
   CUM is a variable of type CUMULATIVE_ARGS which gives info about
    the preceding args and about the function being called.
   NAMED is nonzero if this argument is a named parameter
    (otherwise it is an extra parameter matching an ellipsis).

   On RS/6000 the first eight words of non-FP are normally in registers
   and the rest are pushed.  The first 13 FP args are in registers.

   If this is floating-point and no prototype is specified, we use
   both an FP and integer register (or possibly FP reg and stack).  Library
   functions (when TYPE is zero) always have the proper types for args,
   so we can pass the FP value just in one register.  emit_library_function
   doesn't support EXPR_LIST anyway.  */

#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
  function_arg (&CUM, MODE, TYPE, NAMED)

/* If defined, a C expression which determines whether, and in which
   direction, to pad out an argument with extra space.  The value
   should be of type `enum direction': either `upward' to pad above
   the argument, `downward' to pad below, or `none' to inhibit
   padding.  */

#define FUNCTION_ARG_PADDING(MODE, TYPE) function_arg_padding (MODE, TYPE)

/* If defined, a C expression that gives the alignment boundary, in bits,
   of an argument with the specified mode and type.  If it is not defined,
   PARM_BOUNDARY is used for all arguments.  */

#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
  function_arg_boundary (MODE, TYPE)

/* Implement `va_start' for varargs and stdarg.  */
#define EXPAND_BUILTIN_VA_START(valist, nextarg) \
  rs6000_va_start (valist, nextarg)

#define PAD_VARARGS_DOWN \
   (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward)

/* Output assembler code to FILE to increment profiler label # LABELNO
   for profiling a function entry.  */

#define FUNCTION_PROFILER(FILE, LABELNO)	\
  output_function_profiler ((FILE), (LABELNO));

/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
   the stack pointer does not matter. No definition is equivalent to
   always zero.

   On the RS/6000, this is nonzero because we can restore the stack from
   its backpointer, which we maintain.  */
#define EXIT_IGNORE_STACK	1

/* Define this macro as a C expression that is nonzero for registers
   that are used by the epilogue or the return' pattern.  The stack
   and frame pointer registers are already be assumed to be used as
   needed.  */

#define	EPILOGUE_USES(REGNO)					\
  ((reload_completed && (REGNO) == LINK_REGISTER_REGNUM)	\
   || (TARGET_ALTIVEC && (REGNO) == VRSAVE_REGNO)		\
   || (current_function_calls_eh_return				\
       && TARGET_AIX						\
       && (REGNO) == 2))


/* TRAMPOLINE_TEMPLATE deleted */

/* Length in units of the trampoline for entering a nested function.  */

#define TRAMPOLINE_SIZE rs6000_trampoline_size ()

/* Emit RTL insns to initialize the variable parts of a trampoline.
   FNADDR is an RTX for the address of the function's pure code.
   CXT is an RTX for the static chain value for the function.  */

#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT)		\
  rs6000_initialize_trampoline (ADDR, FNADDR, CXT)

/* Definitions for __builtin_return_address and __builtin_frame_address.
   __builtin_return_address (0) should give link register (65), enable
   this.  */
/* This should be uncommented, so that the link register is used, but
   currently this would result in unmatched insns and spilling fixed
   registers so we'll leave it for another day.  When these problems are
   taken care of one additional fetch will be necessary in RETURN_ADDR_RTX.
   (mrs) */
/* #define RETURN_ADDR_IN_PREVIOUS_FRAME */

/* Number of bytes into the frame return addresses can be found.  See
   rs6000_stack_info in rs6000.c for more information on how the different
   abi's store the return address.  */
#define RETURN_ADDRESS_OFFSET						\
 ((DEFAULT_ABI == ABI_AIX						\
   || DEFAULT_ABI == ABI_DARWIN)	? (TARGET_32BIT ? 8 : 16) :	\
  (DEFAULT_ABI == ABI_V4)		? 4 :				\
  (internal_error ("RETURN_ADDRESS_OFFSET not supported"), 0))

/* The current return address is in link register (65).  The return address
   of anything farther back is accessed normally at an offset of 8 from the
   frame pointer.  */
#define RETURN_ADDR_RTX(COUNT, FRAME)                 \
  (rs6000_return_addr (COUNT, FRAME))


/* Definitions for register eliminations.

   We have two registers that can be eliminated on the RS/6000.  First, the
   frame pointer register can often be eliminated in favor of the stack
   pointer register.  Secondly, the argument pointer register can always be
   eliminated; it is replaced with either the stack or frame pointer.

   In addition, we use the elimination mechanism to see if r30 is needed
   Initially we assume that it isn't.  If it is, we spill it.  This is done
   by making it an eliminable register.  We replace it with itself so that
   if it isn't needed, then existing uses won't be modified.  */

/* This is an array of structures.  Each structure initializes one pair
   of eliminable registers.  The "from" register number is given first,
   followed by "to".  Eliminations of the same "from" register are listed
   in order of preference.  */
#define ELIMINABLE_REGS					\
{{ HARD_FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},	\
 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},		\
 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM},	\
 { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},		\
 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM},	\
 { RS6000_PIC_OFFSET_TABLE_REGNUM, RS6000_PIC_OFFSET_TABLE_REGNUM } }

/* Given FROM and TO register numbers, say whether this elimination is allowed.
   Frame pointer elimination is automatically handled.

   For the RS/6000, if frame pointer elimination is being done, we would like
   to convert ap into fp, not sp.

   We need r30 if -mminimal-toc was specified, and there are constant pool
   references.  */

#define CAN_ELIMINATE(FROM, TO)						\
 ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM		\
  ? ! frame_pointer_needed						\
  : (FROM) == RS6000_PIC_OFFSET_TABLE_REGNUM 				\
  ? ! TARGET_MINIMAL_TOC || TARGET_NO_TOC || get_pool_size () == 0	\
  : 1)

/* Define the offset between two registers, one to be eliminated, and the other
   its replacement, at the start of a routine.  */
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
  ((OFFSET) = rs6000_initial_elimination_offset(FROM, TO))

/* Addressing modes, and classification of registers for them.  */

#define HAVE_PRE_DECREMENT 1
#define HAVE_PRE_INCREMENT 1

/* Macros to check register numbers against specific register classes.  */

/* These assume that REGNO is a hard or pseudo reg number.
   They give nonzero only if REGNO is a hard reg of the suitable class
   or a pseudo reg currently allocated to a suitable hard reg.
   Since they use reg_renumber, they are safe only once reg_renumber
   has been allocated, which happens in local-alloc.c.  */

#define REGNO_OK_FOR_INDEX_P(REGNO)				\
((REGNO) < FIRST_PSEUDO_REGISTER				\
 ? (REGNO) <= 31 || (REGNO) == 67				\
   || (REGNO) == FRAME_POINTER_REGNUM				\
 : (reg_renumber[REGNO] >= 0					\
    && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67	\
	|| reg_renumber[REGNO] == FRAME_POINTER_REGNUM)))

#define REGNO_OK_FOR_BASE_P(REGNO)				\
((REGNO) < FIRST_PSEUDO_REGISTER				\
 ? ((REGNO) > 0 && (REGNO) <= 31) || (REGNO) == 67		\
   || (REGNO) == FRAME_POINTER_REGNUM				\
 : (reg_renumber[REGNO] > 0					\
    && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67	\
	|| reg_renumber[REGNO] == FRAME_POINTER_REGNUM)))

/* Maximum number of registers that can appear in a valid memory address.  */

#define MAX_REGS_PER_ADDRESS 2

/* Recognize any constant value that is a valid address.  */

#define CONSTANT_ADDRESS_P(X)   \
  (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF		\
   || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST		\
   || GET_CODE (X) == HIGH)

/* Nonzero if the constant value X is a legitimate general operand.
   It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.

   On the RS/6000, all integer constants are acceptable, most won't be valid
   for particular insns, though.  Only easy FP constants are
   acceptable.  */

#define LEGITIMATE_CONSTANT_P(X)				\
  (((GET_CODE (X) != CONST_DOUBLE				\
     && GET_CODE (X) != CONST_VECTOR)				\
    || GET_MODE (X) == VOIDmode					\
    || (TARGET_POWERPC64 && GET_MODE (X) == DImode)		\
    || easy_fp_constant (X, GET_MODE (X))			\
    || easy_vector_constant (X, GET_MODE (X)))			\
   && !rs6000_tls_referenced_p (X))

#define EASY_VECTOR_15(n) ((n) >= -16 && (n) <= 15)
#define EASY_VECTOR_15_ADD_SELF(n) (!EASY_VECTOR_15((n))	\
				    && EASY_VECTOR_15((n) >> 1) \
				    && ((n) & 1) == 0)

/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
   and check its validity for a certain class.
   We have two alternate definitions for each of them.
   The usual definition accepts all pseudo regs; the other rejects
   them unless they have been allocated suitable hard regs.
   The symbol REG_OK_STRICT causes the latter definition to be used.

   Most source files want to accept pseudo regs in the hope that
   they will get allocated to the class that the insn wants them to be in.
   Source files for reload pass need to be strict.
   After reload, it makes no difference, since pseudo regs have
   been eliminated by then.  */

#ifdef REG_OK_STRICT
# define REG_OK_STRICT_FLAG 1
#else
# define REG_OK_STRICT_FLAG 0
#endif

/* Nonzero if X is a hard reg that can be used as an index
   or if it is a pseudo reg in the non-strict case.  */
#define INT_REG_OK_FOR_INDEX_P(X, STRICT)			\
  ((!(STRICT) && REGNO (X) >= FIRST_PSEUDO_REGISTER)		\
   || REGNO_OK_FOR_INDEX_P (REGNO (X)))

/* Nonzero if X is a hard reg that can be used as a base reg
   or if it is a pseudo reg in the non-strict case.  */
#define INT_REG_OK_FOR_BASE_P(X, STRICT)			\
  ((!(STRICT) && REGNO (X) >= FIRST_PSEUDO_REGISTER)		\
   || REGNO_OK_FOR_BASE_P (REGNO (X)))

#define REG_OK_FOR_INDEX_P(X) INT_REG_OK_FOR_INDEX_P (X, REG_OK_STRICT_FLAG)
#define REG_OK_FOR_BASE_P(X)  INT_REG_OK_FOR_BASE_P (X, REG_OK_STRICT_FLAG)

/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
   that is a valid memory address for an instruction.
   The MODE argument is the machine mode for the MEM expression
   that wants to use this address.

   On the RS/6000, there are four valid addresses: a SYMBOL_REF that
   refers to a constant pool entry of an address (or the sum of it
   plus a constant), a short (16-bit signed) constant plus a register,
   the sum of two registers, or a register indirect, possibly with an
   auto-increment.  For DFmode and DImode with a constant plus register,
   we must ensure that both words are addressable or PowerPC64 with offset
   word aligned.

   For modes spanning multiple registers (DFmode in 32-bit GPRs,
   32-bit DImode, TImode), indexed addressing cannot be used because
   adjacent memory cells are accessed by adding word-sized offsets
   during assembly output.  */

#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)			\
{ if (rs6000_legitimate_address (MODE, X, REG_OK_STRICT_FLAG))	\
    goto ADDR;							\
}

/* Try machine-dependent ways of modifying an illegitimate address
   to be legitimate.  If we find one, return the new, valid address.
   This macro is used in only one place: `memory_address' in explow.c.

   OLDX is the address as it was before break_out_memory_refs was called.
   In some cases it is useful to look at this to decide what needs to be done.

   MODE and WIN are passed so that this macro can use
   GO_IF_LEGITIMATE_ADDRESS.

   It is always safe for this macro to do nothing.  It exists to recognize
   opportunities to optimize the output.

   On RS/6000, first check for the sum of a register with a constant
   integer that is out of range.  If so, generate code to add the
   constant with the low-order 16 bits masked to the register and force
   this result into another register (this can be done with `cau').
   Then generate an address of REG+(CONST&0xffff), allowing for the
   possibility of bit 16 being a one.

   Then check for the sum of a register and something not constant, try to
   load the other things into a register and return the sum.  */

#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)			\
{  rtx result = rs6000_legitimize_address (X, OLDX, MODE);	\
   if (result != NULL_RTX)					\
     {								\
       (X) = result;						\
       goto WIN;						\
     }								\
}

/* Try a machine-dependent way of reloading an illegitimate address
   operand.  If we find one, push the reload and jump to WIN.  This
   macro is used in only one place: `find_reloads_address' in reload.c.

   Implemented on rs6000 by rs6000_legitimize_reload_address.
   Note that (X) is evaluated twice; this is safe in current usage.  */

#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN)	     \
do {									     \
  int win;								     \
  (X) = rs6000_legitimize_reload_address ((X), (MODE), (OPNUM),		     \
			(int)(TYPE), (IND_LEVELS), &win);		     \
  if ( win )								     \
    goto WIN;								     \
} while (0)

/* Go to LABEL if ADDR (a legitimate address expression)
   has an effect that depends on the machine mode it is used for.  */

#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)		\
do {								\
  if (rs6000_mode_dependent_address (ADDR))			\
    goto LABEL;							\
} while (0)

/* The register number of the register used to address a table of
   static data addresses in memory.  In some cases this register is
   defined by a processor's "application binary interface" (ABI).
   When this macro is defined, RTL is generated for this register
   once, as with the stack pointer and frame pointer registers.  If
   this macro is not defined, it is up to the machine-dependent files
   to allocate such a register (if necessary).  */

#define RS6000_PIC_OFFSET_TABLE_REGNUM 30
#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? RS6000_PIC_OFFSET_TABLE_REGNUM : INVALID_REGNUM)

#define TOC_REGISTER (TARGET_MINIMAL_TOC ? RS6000_PIC_OFFSET_TABLE_REGNUM : 2)

/* Define this macro if the register defined by
   `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  Do not define
   this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined.  */

/* #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED */

/* A C expression that is nonzero if X is a legitimate immediate
   operand on the target machine when generating position independent
   code.  You can assume that X satisfies `CONSTANT_P', so you need
   not check this.  You can also assume FLAG_PIC is true, so you need
   not check it either.  You need not define this macro if all
   constants (including `SYMBOL_REF') can be immediate operands when
   generating position independent code.  */

/* #define LEGITIMATE_PIC_OPERAND_P (X) */

/* Define this if some processing needs to be done immediately before
   emitting code for an insn.  */

/* #define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) */

/* Specify the machine mode that this machine uses
   for the index in the tablejump instruction.  */
#define CASE_VECTOR_MODE SImode

/* Define as C expression which evaluates to nonzero if the tablejump
   instruction expects the table to contain offsets from the address of the
   table.
   Do not define this if the table should contain absolute addresses.  */
#define CASE_VECTOR_PC_RELATIVE 1

/* Define this as 1 if `char' should by default be signed; else as 0.  */
#define DEFAULT_SIGNED_CHAR 0

/* This flag, if defined, says the same insns that convert to a signed fixnum
   also convert validly to an unsigned one.  */

/* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */

/* An integer expression for the size in bits of the largest integer machine
   mode that should actually be used.  */

/* Allow pairs of registers to be used, which is the intent of the default.  */
#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_POWERPC64 ? TImode : DImode)

/* Max number of bytes we can move from memory to memory
   in one reasonably fast instruction.  */
#define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8)
#define MAX_MOVE_MAX 8

/* Nonzero if access to memory by bytes is no faster than for words.
   Also nonzero if doing byte operations (specifically shifts) in registers
   is undesirable.  */
#define SLOW_BYTE_ACCESS 1

/* Define if operations between registers always perform the operation
   on the full register even if a narrower mode is specified.  */
#define WORD_REGISTER_OPERATIONS

/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
   will either zero-extend or sign-extend.  The value of this macro should
   be the code that says which one of the two operations is implicitly
   done, UNKNOWN if none.  */
#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND

/* Define if loading short immediate values into registers sign extends.  */
#define SHORT_IMMEDIATES_SIGN_EXTEND

/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
   is done just by pretending it is already truncated.  */
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1

/* The cntlzw and cntlzd instructions return 32 and 64 for input of zero.  */
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
  ((VALUE) = ((MODE) == SImode ? 32 : 64))

/* The CTZ patterns return -1 for input of zero.  */
#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = -1)

/* Specify the machine mode that pointers have.
   After generation of rtl, the compiler makes no further distinction
   between pointers and any other objects of this machine mode.  */
#define Pmode (TARGET_32BIT ? SImode : DImode)

/* Supply definition of STACK_SIZE_MODE for allocate_dynamic_stack_space.  */
#define STACK_SIZE_MODE (TARGET_32BIT ? SImode : DImode)

/* Mode of a function address in a call instruction (for indexing purposes).
   Doesn't matter on RS/6000.  */
#define FUNCTION_MODE SImode

/* Define this if addresses of constant functions
   shouldn't be put through pseudo regs where they can be cse'd.
   Desirable on machines where ordinary constants are expensive
   but a CALL with constant address is cheap.  */
#define NO_FUNCTION_CSE

/* Define this to be nonzero if shift instructions ignore all but the low-order
   few bits.

   The sle and sre instructions which allow SHIFT_COUNT_TRUNCATED
   have been dropped from the PowerPC architecture.  */

#define SHIFT_COUNT_TRUNCATED (TARGET_POWER ? 1 : 0)

/* Adjust the length of an INSN.  LENGTH is the currently-computed length and
   should be adjusted to reflect any required changes.  This macro is used when
   there is some systematic length adjustment required that would be difficult
   to express in the length attribute.  */

/* #define ADJUST_INSN_LENGTH(X,LENGTH) */

/* Given a comparison code (EQ, NE, etc.) and the first operand of a
   COMPARE, return the mode to be used for the comparison.  For
   floating-point, CCFPmode should be used.  CCUNSmode should be used
   for unsigned comparisons.  CCEQmode should be used when we are
   doing an inequality comparison on the result of a
   comparison.  CCmode should be used in all other cases.  */

#define SELECT_CC_MODE(OP,X,Y) \
  (SCALAR_FLOAT_MODE_P (GET_MODE (X)) ? CCFPmode	\
   : (OP) == GTU || (OP) == LTU || (OP) == GEU || (OP) == LEU ? CCUNSmode \
   : (((OP) == EQ || (OP) == NE) && COMPARISON_P (X)			  \
      ? CCEQmode : CCmode))

/* Can the condition code MODE be safely reversed?  This is safe in
   all cases on this port, because at present it doesn't use the
   trapping FP comparisons (fcmpo).  */
#define REVERSIBLE_CC_MODE(MODE) 1

/* Given a condition code and a mode, return the inverse condition.  */
#define REVERSE_CONDITION(CODE, MODE) rs6000_reverse_condition (MODE, CODE)

/* Define the information needed to generate branch and scc insns.  This is
   stored from the compare operation.  */

extern GTY(()) rtx rs6000_compare_op0;
extern GTY(()) rtx rs6000_compare_op1;
extern int rs6000_compare_fp_p;

/* Control the assembler format that we output.  */

/* A C string constant describing how to begin a comment in the target
   assembler language.  The compiler assumes that the comment will end at
   the end of the line.  */
#define ASM_COMMENT_START " #"

/* Flag to say the TOC is initialized */
extern int toc_initialized;

/* Macro to output a special constant pool entry.  Go to WIN if we output
   it.  Otherwise, it is written the usual way.

   On the RS/6000, toc entries are handled this way.  */

#define ASM_OUTPUT_SPECIAL_POOL_ENTRY(FILE, X, MODE, ALIGN, LABELNO, WIN) \
{ if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (X, MODE))			  \
    {									  \
      output_toc (FILE, X, LABELNO, MODE);				  \
      goto WIN;								  \
    }									  \
}

#ifdef HAVE_GAS_WEAK
#define RS6000_WEAK 1
#else
#define RS6000_WEAK 0
#endif

#if RS6000_WEAK
/* Used in lieu of ASM_WEAKEN_LABEL.  */
#define	ASM_WEAKEN_DECL(FILE, DECL, NAME, VAL)			 	\
  do									\
    {									\
      fputs ("\t.weak\t", (FILE));					\
      RS6000_OUTPUT_BASENAME ((FILE), (NAME)); 				\
      if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL			\
	  && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS)			\
	{								\
	  if (TARGET_XCOFF)						\
	    fputs ("[DS]", (FILE));					\
	  fputs ("\n\t.weak\t.", (FILE));				\
	  RS6000_OUTPUT_BASENAME ((FILE), (NAME)); 			\
	}								\
      fputc ('\n', (FILE));						\
      if (VAL)								\
	{								\
	  ASM_OUTPUT_DEF ((FILE), (NAME), (VAL));			\
	  if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL		\
	      && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS)			\
	    {								\
	      fputs ("\t.set\t.", (FILE));				\
	      RS6000_OUTPUT_BASENAME ((FILE), (NAME));			\
	      fputs (",.", (FILE));					\
	      RS6000_OUTPUT_BASENAME ((FILE), (VAL));			\
	      fputc ('\n', (FILE));					\
	    }								\
	}								\
    }									\
  while (0)
#endif

#if HAVE_GAS_WEAKREF
#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE)			\
  do									\
    {									\
      fputs ("\t.weakref\t", (FILE));					\
      RS6000_OUTPUT_BASENAME ((FILE), (NAME)); 				\
      fputs (", ", (FILE));						\
      RS6000_OUTPUT_BASENAME ((FILE), (VALUE));				\
      if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL			\
	  && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS)			\
	{								\
	  fputs ("\n\t.weakref\t.", (FILE));				\
	  RS6000_OUTPUT_BASENAME ((FILE), (NAME)); 			\
	  fputs (", .", (FILE));					\
	  RS6000_OUTPUT_BASENAME ((FILE), (VALUE));			\
	}								\
      fputc ('\n', (FILE));						\
    } while (0)
#endif

/* This implements the `alias' attribute.  */
#undef	ASM_OUTPUT_DEF_FROM_DECLS
#define	ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET)			\
  do									\
    {									\
      const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0);		\
      const char *name = IDENTIFIER_POINTER (TARGET);			\
      if (TREE_CODE (DECL) == FUNCTION_DECL				\
	  && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS)			\
	{								\
	  if (TREE_PUBLIC (DECL))					\
	    {								\
	      if (!RS6000_WEAK || !DECL_WEAK (DECL))			\
		{							\
		  fputs ("\t.globl\t.", FILE);				\
		  RS6000_OUTPUT_BASENAME (FILE, alias);			\
		  putc ('\n', FILE);					\
		}							\
	    }								\
	  else if (TARGET_XCOFF)					\
	    {								\
	      fputs ("\t.lglobl\t.", FILE);				\
	      RS6000_OUTPUT_BASENAME (FILE, alias);			\
	      putc ('\n', FILE);					\
	    }								\
	  fputs ("\t.set\t.", FILE);					\
	  RS6000_OUTPUT_BASENAME (FILE, alias);				\
	  fputs (",.", FILE);						\
	  RS6000_OUTPUT_BASENAME (FILE, name);				\
	  fputc ('\n', FILE);						\
	}								\
      ASM_OUTPUT_DEF (FILE, alias, name);				\
    }									\
   while (0)

#define TARGET_ASM_FILE_START rs6000_file_start

/* Output to assembler file text saying following lines
   may contain character constants, extra white space, comments, etc.  */

#define ASM_APP_ON ""

/* Output to assembler file text saying following lines
   no longer contain unusual constructs.  */

#define ASM_APP_OFF ""

/* How to refer to registers in assembler output.
   This sequence is indexed by compiler's hard-register-number (see above).  */

extern char rs6000_reg_names[][8];	/* register names (0 vs. %r0).  */

#define REGISTER_NAMES							\
{									\
  &rs6000_reg_names[ 0][0],	/* r0   */				\
  &rs6000_reg_names[ 1][0],	/* r1	*/				\
  &rs6000_reg_names[ 2][0],     /* r2	*/				\
  &rs6000_reg_names[ 3][0],	/* r3	*/				\
  &rs6000_reg_names[ 4][0],	/* r4	*/				\
  &rs6000_reg_names[ 5][0],	/* r5	*/				\
  &rs6000_reg_names[ 6][0],	/* r6	*/				\
  &rs6000_reg_names[ 7][0],	/* r7	*/				\
  &rs6000_reg_names[ 8][0],	/* r8	*/				\
  &rs6000_reg_names[ 9][0],	/* r9	*/				\
  &rs6000_reg_names[10][0],	/* r10  */				\
  &rs6000_reg_names[11][0],	/* r11  */				\
  &rs6000_reg_names[12][0],	/* r12  */				\
  &rs6000_reg_names[13][0],	/* r13  */				\
  &rs6000_reg_names[14][0],	/* r14  */				\
  &rs6000_reg_names[15][0],	/* r15  */				\
  &rs6000_reg_names[16][0],	/* r16  */				\
  &rs6000_reg_names[17][0],	/* r17  */				\
  &rs6000_reg_names[18][0],	/* r18  */				\
  &rs6000_reg_names[19][0],	/* r19  */				\
  &rs6000_reg_names[20][0],	/* r20  */				\
  &rs6000_reg_names[21][0],	/* r21  */				\
  &rs6000_reg_names[22][0],	/* r22  */				\
  &rs6000_reg_names[23][0],	/* r23  */				\
  &rs6000_reg_names[24][0],	/* r24  */				\
  &rs6000_reg_names[25][0],	/* r25  */				\
  &rs6000_reg_names[26][0],	/* r26  */				\
  &rs6000_reg_names[27][0],	/* r27  */				\
  &rs6000_reg_names[28][0],	/* r28  */				\
  &rs6000_reg_names[29][0],	/* r29  */				\
  &rs6000_reg_names[30][0],	/* r30  */				\
  &rs6000_reg_names[31][0],	/* r31  */				\
									\
  &rs6000_reg_names[32][0],     /* fr0  */				\
  &rs6000_reg_names[33][0],	/* fr1  */				\
  &rs6000_reg_names[34][0],	/* fr2  */				\
  &rs6000_reg_names[35][0],	/* fr3  */				\
  &rs6000_reg_names[36][0],	/* fr4  */				\
  &rs6000_reg_names[37][0],	/* fr5  */				\
  &rs6000_reg_names[38][0],	/* fr6  */				\
  &rs6000_reg_names[39][0],	/* fr7  */				\
  &rs6000_reg_names[40][0],	/* fr8  */				\
  &rs6000_reg_names[41][0],	/* fr9  */				\
  &rs6000_reg_names[42][0],	/* fr10 */				\
  &rs6000_reg_names[43][0],	/* fr11 */				\
  &rs6000_reg_names[44][0],	/* fr12 */				\
  &rs6000_reg_names[45][0],	/* fr13 */				\
  &rs6000_reg_names[46][0],	/* fr14 */				\
  &rs6000_reg_names[47][0],	/* fr15 */				\
  &rs6000_reg_names[48][0],	/* fr16 */				\
  &rs6000_reg_names[49][0],	/* fr17 */				\
  &rs6000_reg_names[50][0],	/* fr18 */				\
  &rs6000_reg_names[51][0],	/* fr19 */				\
  &rs6000_reg_names[52][0],	/* fr20 */				\
  &rs6000_reg_names[53][0],	/* fr21 */				\
  &rs6000_reg_names[54][0],	/* fr22 */				\
  &rs6000_reg_names[55][0],	/* fr23 */				\
  &rs6000_reg_names[56][0],	/* fr24 */				\
  &rs6000_reg_names[57][0],	/* fr25 */				\
  &rs6000_reg_names[58][0],	/* fr26 */				\
  &rs6000_reg_names[59][0],	/* fr27 */				\
  &rs6000_reg_names[60][0],	/* fr28 */				\
  &rs6000_reg_names[61][0],	/* fr29 */				\
  &rs6000_reg_names[62][0],	/* fr30 */				\
  &rs6000_reg_names[63][0],	/* fr31 */				\
									\
  &rs6000_reg_names[64][0],     /* mq   */				\
  &rs6000_reg_names[65][0],	/* lr   */				\
  &rs6000_reg_names[66][0],	/* ctr  */				\
  &rs6000_reg_names[67][0],	/* ap   */				\
									\
  &rs6000_reg_names[68][0],	/* cr0  */				\
  &rs6000_reg_names[69][0],	/* cr1  */				\
  &rs6000_reg_names[70][0],	/* cr2  */				\
  &rs6000_reg_names[71][0],	/* cr3  */				\
  &rs6000_reg_names[72][0],	/* cr4  */				\
  &rs6000_reg_names[73][0],	/* cr5  */				\
  &rs6000_reg_names[74][0],	/* cr6  */				\
  &rs6000_reg_names[75][0],	/* cr7  */				\
									\
  &rs6000_reg_names[76][0],	/* xer  */				\
									\
  &rs6000_reg_names[77][0],	/* v0  */				\
  &rs6000_reg_names[78][0],	/* v1  */				\
  &rs6000_reg_names[79][0],	/* v2  */				\
  &rs6000_reg_names[80][0],	/* v3  */				\
  &rs6000_reg_names[81][0],	/* v4  */				\
  &rs6000_reg_names[82][0],	/* v5  */				\
  &rs6000_reg_names[83][0],	/* v6  */				\
  &rs6000_reg_names[84][0],	/* v7  */				\
  &rs6000_reg_names[85][0],	/* v8  */				\
  &rs6000_reg_names[86][0],	/* v9  */				\
  &rs6000_reg_names[87][0],	/* v10  */				\
  &rs6000_reg_names[88][0],	/* v11  */				\
  &rs6000_reg_names[89][0],	/* v12  */				\
  &rs6000_reg_names[90][0],	/* v13  */				\
  &rs6000_reg_names[91][0],	/* v14  */				\
  &rs6000_reg_names[92][0],	/* v15  */				\
  &rs6000_reg_names[93][0],	/* v16  */				\
  &rs6000_reg_names[94][0],	/* v17  */				\
  &rs6000_reg_names[95][0],	/* v18  */				\
  &rs6000_reg_names[96][0],	/* v19  */				\
  &rs6000_reg_names[97][0],	/* v20  */				\
  &rs6000_reg_names[98][0],	/* v21  */				\
  &rs6000_reg_names[99][0],	/* v22  */				\
  &rs6000_reg_names[100][0],	/* v23  */				\
  &rs6000_reg_names[101][0],	/* v24  */				\
  &rs6000_reg_names[102][0],	/* v25  */				\
  &rs6000_reg_names[103][0],	/* v26  */				\
  &rs6000_reg_names[104][0],	/* v27  */				\
  &rs6000_reg_names[105][0],	/* v28  */				\
  &rs6000_reg_names[106][0],	/* v29  */				\
  &rs6000_reg_names[107][0],	/* v30  */				\
  &rs6000_reg_names[108][0],	/* v31  */				\
  &rs6000_reg_names[109][0],	/* vrsave  */				\
  &rs6000_reg_names[110][0],	/* vscr  */				\
  &rs6000_reg_names[111][0],	/* spe_acc */				\
  &rs6000_reg_names[112][0],	/* spefscr */				\
  &rs6000_reg_names[113][0],	/* sfp  */				\
  /* APPLE LOCAL 3399553 */						\
  &rs6000_reg_names[114][0],	/* fpscr */				\
}

/* Table of additional register names to use in user input.  */

#define ADDITIONAL_REGISTER_NAMES \
 {{"r0",    0}, {"r1",    1}, {"r2",    2}, {"r3",    3},	\
  {"r4",    4}, {"r5",    5}, {"r6",    6}, {"r7",    7},	\
  {"r8",    8}, {"r9",    9}, {"r10",  10}, {"r11",  11},	\
  {"r12",  12}, {"r13",  13}, {"r14",  14}, {"r15",  15},	\
  {"r16",  16}, {"r17",  17}, {"r18",  18}, {"r19",  19},	\
  {"r20",  20}, {"r21",  21}, {"r22",  22}, {"r23",  23},	\
  {"r24",  24}, {"r25",  25}, {"r26",  26}, {"r27",  27},	\
  {"r28",  28}, {"r29",  29}, {"r30",  30}, {"r31",  31},	\
  {"fr0",  32}, {"fr1",  33}, {"fr2",  34}, {"fr3",  35},	\
  {"fr4",  36}, {"fr5",  37}, {"fr6",  38}, {"fr7",  39},	\
  {"fr8",  40}, {"fr9",  41}, {"fr10", 42}, {"fr11", 43},	\
  {"fr12", 44}, {"fr13", 45}, {"fr14", 46}, {"fr15", 47},	\
  {"fr16", 48}, {"fr17", 49}, {"fr18", 50}, {"fr19", 51},	\
  {"fr20", 52}, {"fr21", 53}, {"fr22", 54}, {"fr23", 55},	\
  {"fr24", 56}, {"fr25", 57}, {"fr26", 58}, {"fr27", 59},	\
  {"fr28", 60}, {"fr29", 61}, {"fr30", 62}, {"fr31", 63},	\
  {"v0",   77}, {"v1",   78}, {"v2",   79}, {"v3",   80},       \
  {"v4",   81}, {"v5",   82}, {"v6",   83}, {"v7",   84},       \
  {"v8",   85}, {"v9",   86}, {"v10",  87}, {"v11",  88},       \
  {"v12",  89}, {"v13",  90}, {"v14",  91}, {"v15",  92},       \
  {"v16",  93}, {"v17",  94}, {"v18",  95}, {"v19",  96},       \
  {"v20",  97}, {"v21",  98}, {"v22",  99}, {"v23",  100},	\
  {"v24",  101},{"v25",  102},{"v26",  103},{"v27",  104},      \
  {"v28",  105},{"v29",  106},{"v30",  107},{"v31",  108},      \
  {"vrsave", 109}, {"vscr", 110},				\
  {"spe_acc", 111}, {"spefscr", 112},				\
  /* no additional names for: mq, lr, ctr, ap */		\
  {"cr0",  68}, {"cr1",  69}, {"cr2",  70}, {"cr3",  71},	\
  {"cr4",  72}, {"cr5",  73}, {"cr6",  74}, {"cr7",  75},	\
  {"cc",   68}, {"sp",    1}, {"toc",   2} }

/* Text to write out after a CALL that may be replaced by glue code by
   the loader.  This depends on the AIX version.  */
#define RS6000_CALL_GLUE "cror 31,31,31"

/* This is how to output an element of a case-vector that is relative.  */

#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
  do { char buf[100];					\
       fputs ("\t.long ", FILE);			\
       ASM_GENERATE_INTERNAL_LABEL (buf, "L", VALUE);	\
       assemble_name (FILE, buf);			\
       putc ('-', FILE);				\
       ASM_GENERATE_INTERNAL_LABEL (buf, "L", REL);	\
       assemble_name (FILE, buf);			\
       putc ('\n', FILE);				\
     } while (0)

/* This is how to output an assembler line
   that says to advance the location counter
   to a multiple of 2**LOG bytes.  */

#define ASM_OUTPUT_ALIGN(FILE,LOG)	\
  if ((LOG) != 0)			\
    fprintf (FILE, "\t.align %d\n", (LOG))

/* APPLE LOCAL begin CW asm blocks */
#define IASM_REGISTER_NAME(STR, BUF) rs6000_iasm_register_name (STR, BUF)
/* APPLE LOCAL end CW asm blocks */

/* Pick up the return address upon entry to a procedure. Used for
   dwarf2 unwind information.  This also enables the table driven
   mechanism.  */

#define INCOMING_RETURN_ADDR_RTX   gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
#define DWARF_FRAME_RETURN_COLUMN  DWARF_FRAME_REGNUM (LINK_REGISTER_REGNUM)

/* Describe how we implement __builtin_eh_return.  */
#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 3 : INVALID_REGNUM)
#define EH_RETURN_STACKADJ_RTX  gen_rtx_REG (Pmode, 10)

/* Print operand X (an rtx) in assembler syntax to file FILE.
   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
   For `%' followed by punctuation, CODE is the punctuation and X is null.  */

#define PRINT_OPERAND(FILE, X, CODE)  print_operand (FILE, X, CODE)

/* Define which CODE values are valid.  */

#define PRINT_OPERAND_PUNCT_VALID_P(CODE)  \
  ((CODE) == '.' || (CODE) == '&')

/* Print a memory address as an operand to reference that memory location.  */

#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)

/* uncomment for disabling the corresponding default options */
/* #define  MACHINE_no_sched_interblock */
/* #define  MACHINE_no_sched_speculative */
/* #define  MACHINE_no_sched_speculative_load */

/* General flags.  */
extern int flag_pic;
/* APPLE LOCAL begin optimization pragmas 3124235/3420242 */
/* APPLE LOCAL end optimization pragmas 3124235/3420242 */
extern int frame_pointer_needed;

enum rs6000_builtins
{
  /* AltiVec builtins.  */
  ALTIVEC_BUILTIN_ST_INTERNAL_4si,
  ALTIVEC_BUILTIN_LD_INTERNAL_4si,
  ALTIVEC_BUILTIN_ST_INTERNAL_8hi,
  ALTIVEC_BUILTIN_LD_INTERNAL_8hi,
  ALTIVEC_BUILTIN_ST_INTERNAL_16qi,
  ALTIVEC_BUILTIN_LD_INTERNAL_16qi,
  ALTIVEC_BUILTIN_ST_INTERNAL_4sf,
  ALTIVEC_BUILTIN_LD_INTERNAL_4sf,
  ALTIVEC_BUILTIN_VADDUBM,
  ALTIVEC_BUILTIN_VADDUHM,
  ALTIVEC_BUILTIN_VADDUWM,
  ALTIVEC_BUILTIN_VADDFP,
  ALTIVEC_BUILTIN_VADDCUW,
  ALTIVEC_BUILTIN_VADDUBS,
  ALTIVEC_BUILTIN_VADDSBS,
  ALTIVEC_BUILTIN_VADDUHS,
  ALTIVEC_BUILTIN_VADDSHS,
  ALTIVEC_BUILTIN_VADDUWS,
  ALTIVEC_BUILTIN_VADDSWS,
  ALTIVEC_BUILTIN_VAND,
  ALTIVEC_BUILTIN_VANDC,
  ALTIVEC_BUILTIN_VAVGUB,
  ALTIVEC_BUILTIN_VAVGSB,
  ALTIVEC_BUILTIN_VAVGUH,
  ALTIVEC_BUILTIN_VAVGSH,
  ALTIVEC_BUILTIN_VAVGUW,
  ALTIVEC_BUILTIN_VAVGSW,
  ALTIVEC_BUILTIN_VCFUX,
  ALTIVEC_BUILTIN_VCFSX,
  ALTIVEC_BUILTIN_VCTSXS,
  ALTIVEC_BUILTIN_VCTUXS,
  ALTIVEC_BUILTIN_VCMPBFP,
  ALTIVEC_BUILTIN_VCMPEQUB,
  ALTIVEC_BUILTIN_VCMPEQUH,
  ALTIVEC_BUILTIN_VCMPEQUW,
  ALTIVEC_BUILTIN_VCMPEQFP,
  ALTIVEC_BUILTIN_VCMPGEFP,
  ALTIVEC_BUILTIN_VCMPGTUB,
  ALTIVEC_BUILTIN_VCMPGTSB,
  ALTIVEC_BUILTIN_VCMPGTUH,
  ALTIVEC_BUILTIN_VCMPGTSH,
  ALTIVEC_BUILTIN_VCMPGTUW,
  ALTIVEC_BUILTIN_VCMPGTSW,
  ALTIVEC_BUILTIN_VCMPGTFP,
  ALTIVEC_BUILTIN_VEXPTEFP,
  ALTIVEC_BUILTIN_VLOGEFP,
  ALTIVEC_BUILTIN_VMADDFP,
  ALTIVEC_BUILTIN_VMAXUB,
  ALTIVEC_BUILTIN_VMAXSB,
  ALTIVEC_BUILTIN_VMAXUH,
  ALTIVEC_BUILTIN_VMAXSH,
  ALTIVEC_BUILTIN_VMAXUW,
  ALTIVEC_BUILTIN_VMAXSW,
  ALTIVEC_BUILTIN_VMAXFP,
  ALTIVEC_BUILTIN_VMHADDSHS,
  ALTIVEC_BUILTIN_VMHRADDSHS,
  ALTIVEC_BUILTIN_VMLADDUHM,
  ALTIVEC_BUILTIN_VMRGHB,
  ALTIVEC_BUILTIN_VMRGHH,
  ALTIVEC_BUILTIN_VMRGHW,
  ALTIVEC_BUILTIN_VMRGLB,
  ALTIVEC_BUILTIN_VMRGLH,
  ALTIVEC_BUILTIN_VMRGLW,
  ALTIVEC_BUILTIN_VMSUMUBM,
  ALTIVEC_BUILTIN_VMSUMMBM,
  ALTIVEC_BUILTIN_VMSUMUHM,
  ALTIVEC_BUILTIN_VMSUMSHM,
  ALTIVEC_BUILTIN_VMSUMUHS,
  ALTIVEC_BUILTIN_VMSUMSHS,
  ALTIVEC_BUILTIN_VMINUB,
  ALTIVEC_BUILTIN_VMINSB,
  ALTIVEC_BUILTIN_VMINUH,
  ALTIVEC_BUILTIN_VMINSH,
  ALTIVEC_BUILTIN_VMINUW,
  ALTIVEC_BUILTIN_VMINSW,
  ALTIVEC_BUILTIN_VMINFP,
  ALTIVEC_BUILTIN_VMULEUB,
  ALTIVEC_BUILTIN_VMULESB,
  ALTIVEC_BUILTIN_VMULEUH,
  ALTIVEC_BUILTIN_VMULESH,
  ALTIVEC_BUILTIN_VMULOUB,
  ALTIVEC_BUILTIN_VMULOSB,
  ALTIVEC_BUILTIN_VMULOUH,
  ALTIVEC_BUILTIN_VMULOSH,
  ALTIVEC_BUILTIN_VNMSUBFP,
  ALTIVEC_BUILTIN_VNOR,
  ALTIVEC_BUILTIN_VOR,
  ALTIVEC_BUILTIN_VSEL_4SI,
  ALTIVEC_BUILTIN_VSEL_4SF,
  ALTIVEC_BUILTIN_VSEL_8HI,
  ALTIVEC_BUILTIN_VSEL_16QI,
  ALTIVEC_BUILTIN_VPERM_4SI,
  ALTIVEC_BUILTIN_VPERM_4SF,
  ALTIVEC_BUILTIN_VPERM_8HI,
  ALTIVEC_BUILTIN_VPERM_16QI,
  ALTIVEC_BUILTIN_VPKUHUM,
  ALTIVEC_BUILTIN_VPKUWUM,
  ALTIVEC_BUILTIN_VPKPX,
  ALTIVEC_BUILTIN_VPKUHSS,
  ALTIVEC_BUILTIN_VPKSHSS,
  ALTIVEC_BUILTIN_VPKUWSS,
  ALTIVEC_BUILTIN_VPKSWSS,
  ALTIVEC_BUILTIN_VPKUHUS,
  ALTIVEC_BUILTIN_VPKSHUS,
  ALTIVEC_BUILTIN_VPKUWUS,
  ALTIVEC_BUILTIN_VPKSWUS,
  ALTIVEC_BUILTIN_VREFP,
  ALTIVEC_BUILTIN_VRFIM,
  ALTIVEC_BUILTIN_VRFIN,
  ALTIVEC_BUILTIN_VRFIP,
  ALTIVEC_BUILTIN_VRFIZ,
  ALTIVEC_BUILTIN_VRLB,
  ALTIVEC_BUILTIN_VRLH,
  ALTIVEC_BUILTIN_VRLW,
  ALTIVEC_BUILTIN_VRSQRTEFP,
  ALTIVEC_BUILTIN_VSLB,
  ALTIVEC_BUILTIN_VSLH,
  ALTIVEC_BUILTIN_VSLW,
  ALTIVEC_BUILTIN_VSL,
  ALTIVEC_BUILTIN_VSLO,
  ALTIVEC_BUILTIN_VSPLTB,
  ALTIVEC_BUILTIN_VSPLTH,
  ALTIVEC_BUILTIN_VSPLTW,
  ALTIVEC_BUILTIN_VSPLTISB,
  ALTIVEC_BUILTIN_VSPLTISH,
  ALTIVEC_BUILTIN_VSPLTISW,
  ALTIVEC_BUILTIN_VSRB,
  ALTIVEC_BUILTIN_VSRH,
  ALTIVEC_BUILTIN_VSRW,
  ALTIVEC_BUILTIN_VSRAB,
  ALTIVEC_BUILTIN_VSRAH,
  ALTIVEC_BUILTIN_VSRAW,
  ALTIVEC_BUILTIN_VSR,
  ALTIVEC_BUILTIN_VSRO,
  ALTIVEC_BUILTIN_VSUBUBM,
  ALTIVEC_BUILTIN_VSUBUHM,
  ALTIVEC_BUILTIN_VSUBUWM,
  ALTIVEC_BUILTIN_VSUBFP,
  ALTIVEC_BUILTIN_VSUBCUW,
  ALTIVEC_BUILTIN_VSUBUBS,
  ALTIVEC_BUILTIN_VSUBSBS,
  ALTIVEC_BUILTIN_VSUBUHS,
  ALTIVEC_BUILTIN_VSUBSHS,
  ALTIVEC_BUILTIN_VSUBUWS,
  ALTIVEC_BUILTIN_VSUBSWS,
  ALTIVEC_BUILTIN_VSUM4UBS,
  ALTIVEC_BUILTIN_VSUM4SBS,
  ALTIVEC_BUILTIN_VSUM4SHS,
  ALTIVEC_BUILTIN_VSUM2SWS,
  ALTIVEC_BUILTIN_VSUMSWS,
  ALTIVEC_BUILTIN_VXOR,
  ALTIVEC_BUILTIN_VSLDOI_16QI,
  ALTIVEC_BUILTIN_VSLDOI_8HI,
  ALTIVEC_BUILTIN_VSLDOI_4SI,
  ALTIVEC_BUILTIN_VSLDOI_4SF,
  ALTIVEC_BUILTIN_VUPKHSB,
  ALTIVEC_BUILTIN_VUPKHPX,
  ALTIVEC_BUILTIN_VUPKHSH,
  ALTIVEC_BUILTIN_VUPKLSB,
  ALTIVEC_BUILTIN_VUPKLPX,
  ALTIVEC_BUILTIN_VUPKLSH,
  ALTIVEC_BUILTIN_MTVSCR,
  ALTIVEC_BUILTIN_MFVSCR,
  ALTIVEC_BUILTIN_DSSALL,
  ALTIVEC_BUILTIN_DSS,
  ALTIVEC_BUILTIN_LVSL,
  ALTIVEC_BUILTIN_LVSR,
  ALTIVEC_BUILTIN_DSTT,
  ALTIVEC_BUILTIN_DSTST,
  ALTIVEC_BUILTIN_DSTSTT,
  ALTIVEC_BUILTIN_DST,
  ALTIVEC_BUILTIN_LVEBX,
  ALTIVEC_BUILTIN_LVEHX,
  ALTIVEC_BUILTIN_LVEWX,
  ALTIVEC_BUILTIN_LVXL,
  ALTIVEC_BUILTIN_LVX,
  ALTIVEC_BUILTIN_STVX,
  ALTIVEC_BUILTIN_STVEBX,
  ALTIVEC_BUILTIN_STVEHX,
  ALTIVEC_BUILTIN_STVEWX,
  ALTIVEC_BUILTIN_STVXL,
  ALTIVEC_BUILTIN_VCMPBFP_P,
  ALTIVEC_BUILTIN_VCMPEQFP_P,
  ALTIVEC_BUILTIN_VCMPEQUB_P,
  ALTIVEC_BUILTIN_VCMPEQUH_P,
  ALTIVEC_BUILTIN_VCMPEQUW_P,
  ALTIVEC_BUILTIN_VCMPGEFP_P,
  ALTIVEC_BUILTIN_VCMPGTFP_P,
  ALTIVEC_BUILTIN_VCMPGTSB_P,
  ALTIVEC_BUILTIN_VCMPGTSH_P,
  ALTIVEC_BUILTIN_VCMPGTSW_P,
  ALTIVEC_BUILTIN_VCMPGTUB_P,
  ALTIVEC_BUILTIN_VCMPGTUH_P,
  ALTIVEC_BUILTIN_VCMPGTUW_P,
  ALTIVEC_BUILTIN_ABSS_V4SI,
  ALTIVEC_BUILTIN_ABSS_V8HI,
  ALTIVEC_BUILTIN_ABSS_V16QI,
  ALTIVEC_BUILTIN_ABS_V4SI,
  ALTIVEC_BUILTIN_ABS_V4SF,
  ALTIVEC_BUILTIN_ABS_V8HI,
  ALTIVEC_BUILTIN_ABS_V16QI,
  ALTIVEC_BUILTIN_MASK_FOR_LOAD,
  ALTIVEC_BUILTIN_MASK_FOR_STORE,
  ALTIVEC_BUILTIN_VEC_INIT_V4SI,
  ALTIVEC_BUILTIN_VEC_INIT_V8HI,
  ALTIVEC_BUILTIN_VEC_INIT_V16QI,
  ALTIVEC_BUILTIN_VEC_INIT_V4SF,
  ALTIVEC_BUILTIN_VEC_SET_V4SI,
  ALTIVEC_BUILTIN_VEC_SET_V8HI,
  ALTIVEC_BUILTIN_VEC_SET_V16QI,
  ALTIVEC_BUILTIN_VEC_SET_V4SF,
  ALTIVEC_BUILTIN_VEC_EXT_V4SI,
  ALTIVEC_BUILTIN_VEC_EXT_V8HI,
  ALTIVEC_BUILTIN_VEC_EXT_V16QI,
  ALTIVEC_BUILTIN_VEC_EXT_V4SF,

  /* Altivec overloaded builtins.  */
  ALTIVEC_BUILTIN_VCMPEQ_P,
  ALTIVEC_BUILTIN_OVERLOADED_FIRST = ALTIVEC_BUILTIN_VCMPEQ_P,
  ALTIVEC_BUILTIN_VCMPGT_P,
  ALTIVEC_BUILTIN_VCMPGE_P,
  ALTIVEC_BUILTIN_VEC_ABS,
  ALTIVEC_BUILTIN_VEC_ABSS,
  ALTIVEC_BUILTIN_VEC_ADD,
  ALTIVEC_BUILTIN_VEC_ADDC,
  ALTIVEC_BUILTIN_VEC_ADDS,
  ALTIVEC_BUILTIN_VEC_AND,
  ALTIVEC_BUILTIN_VEC_ANDC,
  ALTIVEC_BUILTIN_VEC_AVG,
  ALTIVEC_BUILTIN_VEC_CEIL,
  ALTIVEC_BUILTIN_VEC_CMPB,
  ALTIVEC_BUILTIN_VEC_CMPEQ,
  ALTIVEC_BUILTIN_VEC_CMPEQUB,
  ALTIVEC_BUILTIN_VEC_CMPEQUH,
  ALTIVEC_BUILTIN_VEC_CMPEQUW,
  ALTIVEC_BUILTIN_VEC_CMPGE,
  ALTIVEC_BUILTIN_VEC_CMPGT,
  ALTIVEC_BUILTIN_VEC_CMPLE,
  ALTIVEC_BUILTIN_VEC_CMPLT,
  ALTIVEC_BUILTIN_VEC_CTF,
  ALTIVEC_BUILTIN_VEC_CTS,
  ALTIVEC_BUILTIN_VEC_CTU,
  ALTIVEC_BUILTIN_VEC_DST,
  ALTIVEC_BUILTIN_VEC_DSTST,
  ALTIVEC_BUILTIN_VEC_DSTSTT,
  ALTIVEC_BUILTIN_VEC_DSTT,
  ALTIVEC_BUILTIN_VEC_EXPTE,
  ALTIVEC_BUILTIN_VEC_FLOOR,
  ALTIVEC_BUILTIN_VEC_LD,
  ALTIVEC_BUILTIN_VEC_LDE,
  ALTIVEC_BUILTIN_VEC_LDL,
  ALTIVEC_BUILTIN_VEC_LOGE,
  ALTIVEC_BUILTIN_VEC_LVEBX,
  ALTIVEC_BUILTIN_VEC_LVEHX,
  ALTIVEC_BUILTIN_VEC_LVEWX,
  ALTIVEC_BUILTIN_VEC_LVSL,
  ALTIVEC_BUILTIN_VEC_LVSR,
  ALTIVEC_BUILTIN_VEC_MADD,
  ALTIVEC_BUILTIN_VEC_MADDS,
  ALTIVEC_BUILTIN_VEC_MAX,
  ALTIVEC_BUILTIN_VEC_MERGEH,
  ALTIVEC_BUILTIN_VEC_MERGEL,
  ALTIVEC_BUILTIN_VEC_MIN,
  ALTIVEC_BUILTIN_VEC_MLADD,
  ALTIVEC_BUILTIN_VEC_MPERM,
  ALTIVEC_BUILTIN_VEC_MRADDS,
  ALTIVEC_BUILTIN_VEC_MRGHB,
  ALTIVEC_BUILTIN_VEC_MRGHH,
  ALTIVEC_BUILTIN_VEC_MRGHW,
  ALTIVEC_BUILTIN_VEC_MRGLB,
  ALTIVEC_BUILTIN_VEC_MRGLH,
  ALTIVEC_BUILTIN_VEC_MRGLW,
  ALTIVEC_BUILTIN_VEC_MSUM,
  ALTIVEC_BUILTIN_VEC_MSUMS,
  ALTIVEC_BUILTIN_VEC_MTVSCR,
  ALTIVEC_BUILTIN_VEC_MULE,
  ALTIVEC_BUILTIN_VEC_MULO,
  ALTIVEC_BUILTIN_VEC_NMSUB,
  ALTIVEC_BUILTIN_VEC_NOR,
  ALTIVEC_BUILTIN_VEC_OR,
  ALTIVEC_BUILTIN_VEC_PACK,
  ALTIVEC_BUILTIN_VEC_PACKPX,
  ALTIVEC_BUILTIN_VEC_PACKS,
  ALTIVEC_BUILTIN_VEC_PACKSU,
  ALTIVEC_BUILTIN_VEC_PERM,
  ALTIVEC_BUILTIN_VEC_RE,
  ALTIVEC_BUILTIN_VEC_RL,
  ALTIVEC_BUILTIN_VEC_ROUND,
  ALTIVEC_BUILTIN_VEC_RSQRTE,
  ALTIVEC_BUILTIN_VEC_SEL,
  ALTIVEC_BUILTIN_VEC_SL,
  ALTIVEC_BUILTIN_VEC_SLD,
  ALTIVEC_BUILTIN_VEC_SLL,
  ALTIVEC_BUILTIN_VEC_SLO,
  ALTIVEC_BUILTIN_VEC_SPLAT,
  ALTIVEC_BUILTIN_VEC_SPLAT_S16,
  ALTIVEC_BUILTIN_VEC_SPLAT_S32,
  ALTIVEC_BUILTIN_VEC_SPLAT_S8,
  ALTIVEC_BUILTIN_VEC_SPLAT_U16,
  ALTIVEC_BUILTIN_VEC_SPLAT_U32,
  ALTIVEC_BUILTIN_VEC_SPLAT_U8,
  ALTIVEC_BUILTIN_VEC_SPLTB,
  ALTIVEC_BUILTIN_VEC_SPLTH,
  ALTIVEC_BUILTIN_VEC_SPLTW,
  ALTIVEC_BUILTIN_VEC_SR,
  ALTIVEC_BUILTIN_VEC_SRA,
  ALTIVEC_BUILTIN_VEC_SRL,
  ALTIVEC_BUILTIN_VEC_SRO,
  ALTIVEC_BUILTIN_VEC_ST,
  ALTIVEC_BUILTIN_VEC_STE,
  ALTIVEC_BUILTIN_VEC_STL,
  ALTIVEC_BUILTIN_VEC_STVEBX,
  ALTIVEC_BUILTIN_VEC_STVEHX,
  ALTIVEC_BUILTIN_VEC_STVEWX,
  ALTIVEC_BUILTIN_VEC_SUB,
  ALTIVEC_BUILTIN_VEC_SUBC,
  ALTIVEC_BUILTIN_VEC_SUBS,
  ALTIVEC_BUILTIN_VEC_SUM2S,
  ALTIVEC_BUILTIN_VEC_SUM4S,
  ALTIVEC_BUILTIN_VEC_SUMS,
  ALTIVEC_BUILTIN_VEC_TRUNC,
  ALTIVEC_BUILTIN_VEC_UNPACKH,
  ALTIVEC_BUILTIN_VEC_UNPACKL,
  ALTIVEC_BUILTIN_VEC_VADDFP,
  ALTIVEC_BUILTIN_VEC_VADDSBS,
  ALTIVEC_BUILTIN_VEC_VADDSHS,
  ALTIVEC_BUILTIN_VEC_VADDSWS,
  ALTIVEC_BUILTIN_VEC_VADDUBM,
  ALTIVEC_BUILTIN_VEC_VADDUBS,
  ALTIVEC_BUILTIN_VEC_VADDUHM,
  ALTIVEC_BUILTIN_VEC_VADDUHS,
  ALTIVEC_BUILTIN_VEC_VADDUWM,
  ALTIVEC_BUILTIN_VEC_VADDUWS,
  ALTIVEC_BUILTIN_VEC_VAVGSB,
  ALTIVEC_BUILTIN_VEC_VAVGSH,
  ALTIVEC_BUILTIN_VEC_VAVGSW,
  ALTIVEC_BUILTIN_VEC_VAVGUB,
  ALTIVEC_BUILTIN_VEC_VAVGUH,
  ALTIVEC_BUILTIN_VEC_VAVGUW,
  ALTIVEC_BUILTIN_VEC_VCFSX,
  ALTIVEC_BUILTIN_VEC_VCFUX,
  ALTIVEC_BUILTIN_VEC_VCMPEQFP,
  ALTIVEC_BUILTIN_VEC_VCMPEQUB,
  ALTIVEC_BUILTIN_VEC_VCMPEQUH,
  ALTIVEC_BUILTIN_VEC_VCMPEQUW,
  ALTIVEC_BUILTIN_VEC_VCMPGTFP,
  ALTIVEC_BUILTIN_VEC_VCMPGTSB,
  ALTIVEC_BUILTIN_VEC_VCMPGTSH,
  ALTIVEC_BUILTIN_VEC_VCMPGTSW,
  ALTIVEC_BUILTIN_VEC_VCMPGTUB,
  ALTIVEC_BUILTIN_VEC_VCMPGTUH,
  ALTIVEC_BUILTIN_VEC_VCMPGTUW,
  ALTIVEC_BUILTIN_VEC_VMAXFP,
  ALTIVEC_BUILTIN_VEC_VMAXSB,
  ALTIVEC_BUILTIN_VEC_VMAXSH,
  ALTIVEC_BUILTIN_VEC_VMAXSW,
  ALTIVEC_BUILTIN_VEC_VMAXUB,
  ALTIVEC_BUILTIN_VEC_VMAXUH,
  ALTIVEC_BUILTIN_VEC_VMAXUW,
  ALTIVEC_BUILTIN_VEC_VMINFP,
  ALTIVEC_BUILTIN_VEC_VMINSB,
  ALTIVEC_BUILTIN_VEC_VMINSH,
  ALTIVEC_BUILTIN_VEC_VMINSW,
  ALTIVEC_BUILTIN_VEC_VMINUB,
  ALTIVEC_BUILTIN_VEC_VMINUH,
  ALTIVEC_BUILTIN_VEC_VMINUW,
  ALTIVEC_BUILTIN_VEC_VMRGHB,
  ALTIVEC_BUILTIN_VEC_VMRGHH,
  ALTIVEC_BUILTIN_VEC_VMRGHW,
  ALTIVEC_BUILTIN_VEC_VMRGLB,
  ALTIVEC_BUILTIN_VEC_VMRGLH,
  ALTIVEC_BUILTIN_VEC_VMRGLW,
  ALTIVEC_BUILTIN_VEC_VMSUMMBM,
  ALTIVEC_BUILTIN_VEC_VMSUMSHM,
  ALTIVEC_BUILTIN_VEC_VMSUMSHS,
  ALTIVEC_BUILTIN_VEC_VMSUMUBM,
  ALTIVEC_BUILTIN_VEC_VMSUMUHM,
  ALTIVEC_BUILTIN_VEC_VMSUMUHS,
  ALTIVEC_BUILTIN_VEC_VMULESB,
  ALTIVEC_BUILTIN_VEC_VMULESH,
  ALTIVEC_BUILTIN_VEC_VMULEUB,
  ALTIVEC_BUILTIN_VEC_VMULEUH,
  ALTIVEC_BUILTIN_VEC_VMULOSB,
  ALTIVEC_BUILTIN_VEC_VMULOSH,
  ALTIVEC_BUILTIN_VEC_VMULOUB,
  ALTIVEC_BUILTIN_VEC_VMULOUH,
  ALTIVEC_BUILTIN_VEC_VPKSHSS,
  ALTIVEC_BUILTIN_VEC_VPKSHUS,
  ALTIVEC_BUILTIN_VEC_VPKSWSS,
  ALTIVEC_BUILTIN_VEC_VPKSWUS,
  ALTIVEC_BUILTIN_VEC_VPKUHUM,
  ALTIVEC_BUILTIN_VEC_VPKUHUS,
  ALTIVEC_BUILTIN_VEC_VPKUWUM,
  ALTIVEC_BUILTIN_VEC_VPKUWUS,
  ALTIVEC_BUILTIN_VEC_VRLB,
  ALTIVEC_BUILTIN_VEC_VRLH,
  ALTIVEC_BUILTIN_VEC_VRLW,
  ALTIVEC_BUILTIN_VEC_VSLB,
  ALTIVEC_BUILTIN_VEC_VSLH,
  ALTIVEC_BUILTIN_VEC_VSLW,
  ALTIVEC_BUILTIN_VEC_VSPLTB,
  ALTIVEC_BUILTIN_VEC_VSPLTH,
  ALTIVEC_BUILTIN_VEC_VSPLTW,
  ALTIVEC_BUILTIN_VEC_VSRAB,
  ALTIVEC_BUILTIN_VEC_VSRAH,
  ALTIVEC_BUILTIN_VEC_VSRAW,
  ALTIVEC_BUILTIN_VEC_VSRB,
  ALTIVEC_BUILTIN_VEC_VSRH,
  ALTIVEC_BUILTIN_VEC_VSRW,
  ALTIVEC_BUILTIN_VEC_VSUBFP,
  ALTIVEC_BUILTIN_VEC_VSUBSBS,
  ALTIVEC_BUILTIN_VEC_VSUBSHS,
  ALTIVEC_BUILTIN_VEC_VSUBSWS,
  ALTIVEC_BUILTIN_VEC_VSUBUBM,
  ALTIVEC_BUILTIN_VEC_VSUBUBS,
  ALTIVEC_BUILTIN_VEC_VSUBUHM,
  ALTIVEC_BUILTIN_VEC_VSUBUHS,
  ALTIVEC_BUILTIN_VEC_VSUBUWM,
  ALTIVEC_BUILTIN_VEC_VSUBUWS,
  ALTIVEC_BUILTIN_VEC_VSUM4SBS,
  ALTIVEC_BUILTIN_VEC_VSUM4SHS,
  ALTIVEC_BUILTIN_VEC_VSUM4UBS,
  ALTIVEC_BUILTIN_VEC_VUPKHPX,
  ALTIVEC_BUILTIN_VEC_VUPKHSB,
  ALTIVEC_BUILTIN_VEC_VUPKHSH,
  ALTIVEC_BUILTIN_VEC_VUPKLPX,
  ALTIVEC_BUILTIN_VEC_VUPKLSB,
  ALTIVEC_BUILTIN_VEC_VUPKLSH,
  ALTIVEC_BUILTIN_VEC_XOR,
  ALTIVEC_BUILTIN_VEC_STEP,
  ALTIVEC_BUILTIN_OVERLOADED_LAST = ALTIVEC_BUILTIN_VEC_STEP,

  /* SPE builtins.  */
  SPE_BUILTIN_EVADDW,
  SPE_BUILTIN_EVAND,
  SPE_BUILTIN_EVANDC,
  SPE_BUILTIN_EVDIVWS,
  SPE_BUILTIN_EVDIVWU,
  SPE_BUILTIN_EVEQV,
  SPE_BUILTIN_EVFSADD,
  SPE_BUILTIN_EVFSDIV,
  SPE_BUILTIN_EVFSMUL,
  SPE_BUILTIN_EVFSSUB,
  SPE_BUILTIN_EVLDDX,
  SPE_BUILTIN_EVLDHX,
  SPE_BUILTIN_EVLDWX,
  SPE_BUILTIN_EVLHHESPLATX,
  SPE_BUILTIN_EVLHHOSSPLATX,
  SPE_BUILTIN_EVLHHOUSPLATX,
  SPE_BUILTIN_EVLWHEX,
  SPE_BUILTIN_EVLWHOSX,
  SPE_BUILTIN_EVLWHOUX,
  SPE_BUILTIN_EVLWHSPLATX,
  SPE_BUILTIN_EVLWWSPLATX,
  SPE_BUILTIN_EVMERGEHI,
  SPE_BUILTIN_EVMERGEHILO,
  SPE_BUILTIN_EVMERGELO,
  SPE_BUILTIN_EVMERGELOHI,
  SPE_BUILTIN_EVMHEGSMFAA,
  SPE_BUILTIN_EVMHEGSMFAN,
  SPE_BUILTIN_EVMHEGSMIAA,
  SPE_BUILTIN_EVMHEGSMIAN,
  SPE_BUILTIN_EVMHEGUMIAA,
  SPE_BUILTIN_EVMHEGUMIAN,
  SPE_BUILTIN_EVMHESMF,
  SPE_BUILTIN_EVMHESMFA,
  SPE_BUILTIN_EVMHESMFAAW,
  SPE_BUILTIN_EVMHESMFANW,
  SPE_BUILTIN_EVMHESMI,
  SPE_BUILTIN_EVMHESMIA,
  SPE_BUILTIN_EVMHESMIAAW,
  SPE_BUILTIN_EVMHESMIANW,
  SPE_BUILTIN_EVMHESSF,
  SPE_BUILTIN_EVMHESSFA,
  SPE_BUILTIN_EVMHESSFAAW,
  SPE_BUILTIN_EVMHESSFANW,
  SPE_BUILTIN_EVMHESSIAAW,
  SPE_BUILTIN_EVMHESSIANW,
  SPE_BUILTIN_EVMHEUMI,
  SPE_BUILTIN_EVMHEUMIA,
  SPE_BUILTIN_EVMHEUMIAAW,
  SPE_BUILTIN_EVMHEUMIANW,
  SPE_BUILTIN_EVMHEUSIAAW,
  SPE_BUILTIN_EVMHEUSIANW,
  SPE_BUILTIN_EVMHOGSMFAA,
  SPE_BUILTIN_EVMHOGSMFAN,
  SPE_BUILTIN_EVMHOGSMIAA,
  SPE_BUILTIN_EVMHOGSMIAN,
  SPE_BUILTIN_EVMHOGUMIAA,
  SPE_BUILTIN_EVMHOGUMIAN,
  SPE_BUILTIN_EVMHOSMF,
  SPE_BUILTIN_EVMHOSMFA,
  SPE_BUILTIN_EVMHOSMFAAW,
  SPE_BUILTIN_EVMHOSMFANW,
  SPE_BUILTIN_EVMHOSMI,
  SPE_BUILTIN_EVMHOSMIA,
  SPE_BUILTIN_EVMHOSMIAAW,
  SPE_BUILTIN_EVMHOSMIANW,
  SPE_BUILTIN_EVMHOSSF,
  SPE_BUILTIN_EVMHOSSFA,
  SPE_BUILTIN_EVMHOSSFAAW,
  SPE_BUILTIN_EVMHOSSFANW,
  SPE_BUILTIN_EVMHOSSIAAW,
  SPE_BUILTIN_EVMHOSSIANW,
  SPE_BUILTIN_EVMHOUMI,
  SPE_BUILTIN_EVMHOUMIA,
  SPE_BUILTIN_EVMHOUMIAAW,
  SPE_BUILTIN_EVMHOUMIANW,
  SPE_BUILTIN_EVMHOUSIAAW,
  SPE_BUILTIN_EVMHOUSIANW,
  SPE_BUILTIN_EVMWHSMF,
  SPE_BUILTIN_EVMWHSMFA,
  SPE_BUILTIN_EVMWHSMI,
  SPE_BUILTIN_EVMWHSMIA,
  SPE_BUILTIN_EVMWHSSF,
  SPE_BUILTIN_EVMWHSSFA,
  SPE_BUILTIN_EVMWHUMI,
  SPE_BUILTIN_EVMWHUMIA,
  SPE_BUILTIN_EVMWLSMIAAW,
  SPE_BUILTIN_EVMWLSMIANW,
  SPE_BUILTIN_EVMWLSSIAAW,
  SPE_BUILTIN_EVMWLSSIANW,
  SPE_BUILTIN_EVMWLUMI,
  SPE_BUILTIN_EVMWLUMIA,
  SPE_BUILTIN_EVMWLUMIAAW,
  SPE_BUILTIN_EVMWLUMIANW,
  SPE_BUILTIN_EVMWLUSIAAW,
  SPE_BUILTIN_EVMWLUSIANW,
  SPE_BUILTIN_EVMWSMF,
  SPE_BUILTIN_EVMWSMFA,
  SPE_BUILTIN_EVMWSMFAA,
  SPE_BUILTIN_EVMWSMFAN,
  SPE_BUILTIN_EVMWSMI,
  SPE_BUILTIN_EVMWSMIA,
  SPE_BUILTIN_EVMWSMIAA,
  SPE_BUILTIN_EVMWSMIAN,
  SPE_BUILTIN_EVMWHSSFAA,
  SPE_BUILTIN_EVMWSSF,
  SPE_BUILTIN_EVMWSSFA,
  SPE_BUILTIN_EVMWSSFAA,
  SPE_BUILTIN_EVMWSSFAN,
  SPE_BUILTIN_EVMWUMI,
  SPE_BUILTIN_EVMWUMIA,
  SPE_BUILTIN_EVMWUMIAA,
  SPE_BUILTIN_EVMWUMIAN,
  SPE_BUILTIN_EVNAND,
  SPE_BUILTIN_EVNOR,
  SPE_BUILTIN_EVOR,
  SPE_BUILTIN_EVORC,
  SPE_BUILTIN_EVRLW,
  SPE_BUILTIN_EVSLW,
  SPE_BUILTIN_EVSRWS,
  SPE_BUILTIN_EVSRWU,
  SPE_BUILTIN_EVSTDDX,
  SPE_BUILTIN_EVSTDHX,
  SPE_BUILTIN_EVSTDWX,
  SPE_BUILTIN_EVSTWHEX,
  SPE_BUILTIN_EVSTWHOX,
  SPE_BUILTIN_EVSTWWEX,
  SPE_BUILTIN_EVSTWWOX,
  SPE_BUILTIN_EVSUBFW,
  SPE_BUILTIN_EVXOR,
  SPE_BUILTIN_EVABS,
  SPE_BUILTIN_EVADDSMIAAW,
  SPE_BUILTIN_EVADDSSIAAW,
  SPE_BUILTIN_EVADDUMIAAW,
  SPE_BUILTIN_EVADDUSIAAW,
  SPE_BUILTIN_EVCNTLSW,
  SPE_BUILTIN_EVCNTLZW,
  SPE_BUILTIN_EVEXTSB,
  SPE_BUILTIN_EVEXTSH,
  SPE_BUILTIN_EVFSABS,
  SPE_BUILTIN_EVFSCFSF,
  SPE_BUILTIN_EVFSCFSI,
  SPE_BUILTIN_EVFSCFUF,
  SPE_BUILTIN_EVFSCFUI,
  SPE_BUILTIN_EVFSCTSF,
  SPE_BUILTIN_EVFSCTSI,
  SPE_BUILTIN_EVFSCTSIZ,
  SPE_BUILTIN_EVFSCTUF,
  SPE_BUILTIN_EVFSCTUI,
  SPE_BUILTIN_EVFSCTUIZ,
  SPE_BUILTIN_EVFSNABS,
  SPE_BUILTIN_EVFSNEG,
  SPE_BUILTIN_EVMRA,
  SPE_BUILTIN_EVNEG,
  SPE_BUILTIN_EVRNDW,
  SPE_BUILTIN_EVSUBFSMIAAW,
  SPE_BUILTIN_EVSUBFSSIAAW,
  SPE_BUILTIN_EVSUBFUMIAAW,
  SPE_BUILTIN_EVSUBFUSIAAW,
  SPE_BUILTIN_EVADDIW,
  SPE_BUILTIN_EVLDD,
  SPE_BUILTIN_EVLDH,
  SPE_BUILTIN_EVLDW,
  SPE_BUILTIN_EVLHHESPLAT,
  SPE_BUILTIN_EVLHHOSSPLAT,
  SPE_BUILTIN_EVLHHOUSPLAT,
  SPE_BUILTIN_EVLWHE,
  SPE_BUILTIN_EVLWHOS,
  SPE_BUILTIN_EVLWHOU,
  SPE_BUILTIN_EVLWHSPLAT,
  SPE_BUILTIN_EVLWWSPLAT,
  SPE_BUILTIN_EVRLWI,
  SPE_BUILTIN_EVSLWI,
  SPE_BUILTIN_EVSRWIS,
  SPE_BUILTIN_EVSRWIU,
  SPE_BUILTIN_EVSTDD,
  SPE_BUILTIN_EVSTDH,
  SPE_BUILTIN_EVSTDW,
  SPE_BUILTIN_EVSTWHE,
  SPE_BUILTIN_EVSTWHO,
  SPE_BUILTIN_EVSTWWE,
  SPE_BUILTIN_EVSTWWO,
  SPE_BUILTIN_EVSUBIFW,

  /* Compares.  */
  SPE_BUILTIN_EVCMPEQ,
  SPE_BUILTIN_EVCMPGTS,
  SPE_BUILTIN_EVCMPGTU,
  SPE_BUILTIN_EVCMPLTS,
  SPE_BUILTIN_EVCMPLTU,
  SPE_BUILTIN_EVFSCMPEQ,
  SPE_BUILTIN_EVFSCMPGT,
  SPE_BUILTIN_EVFSCMPLT,
  SPE_BUILTIN_EVFSTSTEQ,
  SPE_BUILTIN_EVFSTSTGT,
  SPE_BUILTIN_EVFSTSTLT,

  /* EVSEL compares.  */
  SPE_BUILTIN_EVSEL_CMPEQ,
  SPE_BUILTIN_EVSEL_CMPGTS,
  SPE_BUILTIN_EVSEL_CMPGTU,
  SPE_BUILTIN_EVSEL_CMPLTS,
  SPE_BUILTIN_EVSEL_CMPLTU,
  SPE_BUILTIN_EVSEL_FSCMPEQ,
  SPE_BUILTIN_EVSEL_FSCMPGT,
  SPE_BUILTIN_EVSEL_FSCMPLT,
  SPE_BUILTIN_EVSEL_FSTSTEQ,
  SPE_BUILTIN_EVSEL_FSTSTGT,
  SPE_BUILTIN_EVSEL_FSTSTLT,

  SPE_BUILTIN_EVSPLATFI,
  SPE_BUILTIN_EVSPLATI,
  SPE_BUILTIN_EVMWHSSMAA,
  SPE_BUILTIN_EVMWHSMFAA,
  SPE_BUILTIN_EVMWHSMIAA,
  SPE_BUILTIN_EVMWHUSIAA,
  SPE_BUILTIN_EVMWHUMIAA,
  SPE_BUILTIN_EVMWHSSFAN,
  SPE_BUILTIN_EVMWHSSIAN,
  SPE_BUILTIN_EVMWHSMFAN,
  SPE_BUILTIN_EVMWHSMIAN,
  SPE_BUILTIN_EVMWHUSIAN,
  SPE_BUILTIN_EVMWHUMIAN,
  SPE_BUILTIN_EVMWHGSSFAA,
  SPE_BUILTIN_EVMWHGSMFAA,
  SPE_BUILTIN_EVMWHGSMIAA,
  SPE_BUILTIN_EVMWHGUMIAA,
  SPE_BUILTIN_EVMWHGSSFAN,
  SPE_BUILTIN_EVMWHGSMFAN,
  SPE_BUILTIN_EVMWHGSMIAN,
  SPE_BUILTIN_EVMWHGUMIAN,
  SPE_BUILTIN_MTSPEFSCR,
  SPE_BUILTIN_MFSPEFSCR,
  SPE_BUILTIN_BRINC,

  /* APPLE LOCAL begin AltiVec */
  /* AltiVec PIM functions, used in Apple AltiVec mode.  */
  ALTIVEC_PIM__FIRST,

  /* PIM Operations.  */
  ALTIVEC_PIM_VEC_ABS = ALTIVEC_PIM__FIRST,
  ALTIVEC_PIM_VEC_ABS_2,
  ALTIVEC_PIM_VEC_ABS_3,
  ALTIVEC_PIM_VEC_ABS_4,
  ALTIVEC_PIM_VEC_ABSS,
  ALTIVEC_PIM_VEC_ABSS_2,
  ALTIVEC_PIM_VEC_ABSS_3,
  ALTIVEC_PIM_VEC_ADD,
  ALTIVEC_PIM_VEC_ADD_2,
  ALTIVEC_PIM_VEC_ADD_3,
  ALTIVEC_PIM_VEC_ADD_4,
  ALTIVEC_PIM_VEC_ADDC,
  ALTIVEC_PIM_VEC_ADDS,
  ALTIVEC_PIM_VEC_ADDS_2,
  ALTIVEC_PIM_VEC_ADDS_3,
  ALTIVEC_PIM_VEC_ADDS_4,
  ALTIVEC_PIM_VEC_ADDS_5,
  ALTIVEC_PIM_VEC_ADDS_6,
  ALTIVEC_PIM_VEC_AND,
  ALTIVEC_PIM_VEC_ANDC,
  ALTIVEC_PIM_VEC_AVG,
  ALTIVEC_PIM_VEC_AVG_2,
  ALTIVEC_PIM_VEC_AVG_3,
  ALTIVEC_PIM_VEC_AVG_4,
  ALTIVEC_PIM_VEC_AVG_5,
  ALTIVEC_PIM_VEC_AVG_6,
  ALTIVEC_PIM_VEC_CEIL,
  ALTIVEC_PIM_VEC_CMPB,
  ALTIVEC_PIM_VEC_CMPEQ,
  ALTIVEC_PIM_VEC_CMPEQ_2,
  ALTIVEC_PIM_VEC_CMPEQ_3,
  ALTIVEC_PIM_VEC_CMPEQ_4,
  ALTIVEC_PIM_VEC_CMPGE,
  ALTIVEC_PIM_VEC_CMPGT,
  ALTIVEC_PIM_VEC_CMPGT_2,
  ALTIVEC_PIM_VEC_CMPGT_3,
  ALTIVEC_PIM_VEC_CMPGT_4,
  ALTIVEC_PIM_VEC_CMPGT_5,
  ALTIVEC_PIM_VEC_CMPGT_6,
  ALTIVEC_PIM_VEC_CMPGT_7,
  ALTIVEC_PIM_VEC_CMPLE,
  ALTIVEC_PIM_VEC_CMPLT,
  ALTIVEC_PIM_VEC_CMPLT_2,
  ALTIVEC_PIM_VEC_CMPLT_3,
  ALTIVEC_PIM_VEC_CMPLT_4,
  ALTIVEC_PIM_VEC_CMPLT_5,
  ALTIVEC_PIM_VEC_CMPLT_6,
  ALTIVEC_PIM_VEC_CMPLT_7,
  ALTIVEC_PIM_VEC_CTF,
  ALTIVEC_PIM_VEC_CTF_2,
  ALTIVEC_PIM_VEC_CTS,
  ALTIVEC_PIM_VEC_CTU,
  ALTIVEC_PIM_VEC_DSS,
  ALTIVEC_PIM_VEC_DSSALL,
  ALTIVEC_PIM_VEC_DST,
  ALTIVEC_PIM_VEC_DSTST,
  ALTIVEC_PIM_VEC_DSTSTT,
  ALTIVEC_PIM_VEC_DSTT,
  ALTIVEC_PIM_VEC_EXPTE,
  ALTIVEC_PIM_VEC_FLOOR,
  ALTIVEC_PIM_VEC_LD,
  ALTIVEC_PIM_VEC_LDE,
  ALTIVEC_PIM_VEC_LDE_2,
  ALTIVEC_PIM_VEC_LDE_3,
  ALTIVEC_PIM_VEC_LDL,
  ALTIVEC_PIM_VEC_LOGE,
  ALTIVEC_PIM_VEC_LVEBX,
  ALTIVEC_PIM_VEC_LVEHX,
  ALTIVEC_PIM_VEC_LVEWX,
  ALTIVEC_PIM_VEC_LVSL,
  ALTIVEC_PIM_VEC_LVSR,
  ALTIVEC_PIM_VEC_LVX,
  ALTIVEC_PIM_VEC_LVXL,
  ALTIVEC_PIM_VEC_MADD,
  ALTIVEC_PIM_VEC_MADDS,
  ALTIVEC_PIM_VEC_MAX,
  ALTIVEC_PIM_VEC_MAX_2,
  ALTIVEC_PIM_VEC_MAX_3,
  ALTIVEC_PIM_VEC_MAX_4,
  ALTIVEC_PIM_VEC_MAX_5,
  ALTIVEC_PIM_VEC_MAX_6,
  ALTIVEC_PIM_VEC_MAX_7,
  ALTIVEC_PIM_VEC_MERGEH,
  ALTIVEC_PIM_VEC_MERGEH_2,
  ALTIVEC_PIM_VEC_MERGEH_3,
  ALTIVEC_PIM_VEC_MERGEL,
  ALTIVEC_PIM_VEC_MERGEL_2,
  ALTIVEC_PIM_VEC_MERGEL_3,
  ALTIVEC_PIM_VEC_MFVSCR,
  ALTIVEC_PIM_VEC_MIN,
  ALTIVEC_PIM_VEC_MIN_2,
  ALTIVEC_PIM_VEC_MIN_3,
  ALTIVEC_PIM_VEC_MIN_4,
  ALTIVEC_PIM_VEC_MIN_5,
  ALTIVEC_PIM_VEC_MIN_6,
  ALTIVEC_PIM_VEC_MIN_7,
  ALTIVEC_PIM_VEC_MLADD,
  ALTIVEC_PIM_VEC_MLADD_2,
  ALTIVEC_PIM_VEC_MRADDS,
  ALTIVEC_PIM_VEC_MSUM,
  ALTIVEC_PIM_VEC_MSUM_2,
  ALTIVEC_PIM_VEC_MSUM_3,
  ALTIVEC_PIM_VEC_MSUM_4,
  ALTIVEC_PIM_VEC_MSUMS,
  ALTIVEC_PIM_VEC_MSUMS_2,
  ALTIVEC_PIM_VEC_MTVSCR,
  ALTIVEC_PIM_VEC_MULE,
  ALTIVEC_PIM_VEC_MULE_2,
  ALTIVEC_PIM_VEC_MULE_3,
  ALTIVEC_PIM_VEC_MULE_4,
  ALTIVEC_PIM_VEC_MULO,
  ALTIVEC_PIM_VEC_MULO_2,
  ALTIVEC_PIM_VEC_MULO_3,
  ALTIVEC_PIM_VEC_MULO_4,
  ALTIVEC_PIM_VEC_NMSUB,
  ALTIVEC_PIM_VEC_NOR,
  ALTIVEC_PIM_VEC_OR,
  ALTIVEC_PIM_VEC_PACK,
  ALTIVEC_PIM_VEC_PACK_2,
  ALTIVEC_PIM_VEC_PACKPX,
  ALTIVEC_PIM_VEC_PACKS,
  ALTIVEC_PIM_VEC_PACKS_2,
  ALTIVEC_PIM_VEC_PACKS_3,
  ALTIVEC_PIM_VEC_PACKS_4,
  ALTIVEC_PIM_VEC_PACKSU,
  ALTIVEC_PIM_VEC_PACKSU_2,
  ALTIVEC_PIM_VEC_PACKSU_3,
  ALTIVEC_PIM_VEC_PACKSU_4,
  ALTIVEC_PIM_VEC_PERM,
  ALTIVEC_PIM_VEC_RE,
  ALTIVEC_PIM_VEC_RL,
  ALTIVEC_PIM_VEC_RL_2,
  ALTIVEC_PIM_VEC_RL_3,
  ALTIVEC_PIM_VEC_ROUND,
  ALTIVEC_PIM_VEC_RSQRTE,
  ALTIVEC_PIM_VEC_SEL,
  ALTIVEC_PIM_VEC_SL,
  ALTIVEC_PIM_VEC_SL_2,
  ALTIVEC_PIM_VEC_SL_3,
  ALTIVEC_PIM_VEC_SLD,
  ALTIVEC_PIM_VEC_SLL,
  ALTIVEC_PIM_VEC_SLO,
  ALTIVEC_PIM_VEC_SPLAT,
  ALTIVEC_PIM_VEC_SPLAT_2,
  ALTIVEC_PIM_VEC_SPLAT_3,
  ALTIVEC_PIM_VEC_SPLAT_S8,
  ALTIVEC_PIM_VEC_SPLAT_S16,
  ALTIVEC_PIM_VEC_SPLAT_S32,
  ALTIVEC_PIM_VEC_SPLAT_U8,
  ALTIVEC_PIM_VEC_SPLAT_U16,
  ALTIVEC_PIM_VEC_SPLAT_U32,
  ALTIVEC_PIM_VEC_SR,
  ALTIVEC_PIM_VEC_SR_2,
  ALTIVEC_PIM_VEC_SR_3,
  ALTIVEC_PIM_VEC_SRA,
  ALTIVEC_PIM_VEC_SRA_2,
  ALTIVEC_PIM_VEC_SRA_3,
  ALTIVEC_PIM_VEC_SRL,
  ALTIVEC_PIM_VEC_SRO,
  ALTIVEC_PIM_VEC_ST,
  ALTIVEC_PIM_VEC_STE,
  ALTIVEC_PIM_VEC_STE_2,
  ALTIVEC_PIM_VEC_STE_3,
  ALTIVEC_PIM_VEC_STL,
  ALTIVEC_PIM_VEC_STVEBX,
  ALTIVEC_PIM_VEC_STVEHX,
  ALTIVEC_PIM_VEC_STVEWX,
  ALTIVEC_PIM_VEC_STVX,
  ALTIVEC_PIM_VEC_STVXL,
  ALTIVEC_PIM_VEC_SUB,
  ALTIVEC_PIM_VEC_SUB_2,
  ALTIVEC_PIM_VEC_SUB_3,
  ALTIVEC_PIM_VEC_SUB_4,
  ALTIVEC_PIM_VEC_SUBC,
  ALTIVEC_PIM_VEC_SUBS,
  ALTIVEC_PIM_VEC_SUBS_2,
  ALTIVEC_PIM_VEC_SUBS_3,
  ALTIVEC_PIM_VEC_SUBS_4,
  ALTIVEC_PIM_VEC_SUBS_5,
  ALTIVEC_PIM_VEC_SUBS_6,
  ALTIVEC_PIM_VEC_SUM4S,
  ALTIVEC_PIM_VEC_SUM4S_2,
  ALTIVEC_PIM_VEC_SUM4S_3,
  ALTIVEC_PIM_VEC_SUM2S,
  ALTIVEC_PIM_VEC_SUMS,
  ALTIVEC_PIM_VEC_TRUNC,
  ALTIVEC_PIM_VEC_UNPACKH,
  ALTIVEC_PIM_VEC_UNPACKH_2,
  ALTIVEC_PIM_VEC_UNPACKH_3,
  ALTIVEC_PIM_VEC_UNPACKL,
  ALTIVEC_PIM_VEC_UNPACKL_2,
  ALTIVEC_PIM_VEC_UNPACKL_3,
  ALTIVEC_PIM_VEC_VADDCUW,
  ALTIVEC_PIM_VEC_VADDFP,
  ALTIVEC_PIM_VEC_VADDSBS,
  ALTIVEC_PIM_VEC_VADDSHS,
  ALTIVEC_PIM_VEC_VADDSWS,
  ALTIVEC_PIM_VEC_VADDUBM,
  ALTIVEC_PIM_VEC_VADDUBS,
  ALTIVEC_PIM_VEC_VADDUHM,
  ALTIVEC_PIM_VEC_VADDUHS,
  ALTIVEC_PIM_VEC_VADDUWM,
  ALTIVEC_PIM_VEC_VADDUWS,
  ALTIVEC_PIM_VEC_VAND,
  ALTIVEC_PIM_VEC_VANDC,
  ALTIVEC_PIM_VEC_VAVGSB,
  ALTIVEC_PIM_VEC_VAVGSH,
  ALTIVEC_PIM_VEC_VAVGSW,
  ALTIVEC_PIM_VEC_VAVGUB,
  ALTIVEC_PIM_VEC_VAVGUH,
  ALTIVEC_PIM_VEC_VAVGUW,
  ALTIVEC_PIM_VEC_VCFSX,
  ALTIVEC_PIM_VEC_VCFUX,
  ALTIVEC_PIM_VEC_VCMPBFP,
  ALTIVEC_PIM_VEC_VCMPEQFP,
  ALTIVEC_PIM_VEC_VCMPEQUB,
  ALTIVEC_PIM_VEC_VCMPEQUH,
  ALTIVEC_PIM_VEC_VCMPEQUW,
  ALTIVEC_PIM_VEC_VCMPGEFP,
  ALTIVEC_PIM_VEC_VCMPGTFP,
  ALTIVEC_PIM_VEC_VCMPGTSB,
  ALTIVEC_PIM_VEC_VCMPGTSH,
  ALTIVEC_PIM_VEC_VCMPGTSW,
  ALTIVEC_PIM_VEC_VCMPGTUB,
  ALTIVEC_PIM_VEC_VCMPGTUH,
  ALTIVEC_PIM_VEC_VCMPGTUW,
  ALTIVEC_PIM_VEC_VCTSXS,
  ALTIVEC_PIM_VEC_VCTUXS,
  ALTIVEC_PIM_VEC_VEXPTEFP,
  ALTIVEC_PIM_VEC_VLOGEFP,
  ALTIVEC_PIM_VEC_VMADDFP,
  ALTIVEC_PIM_VEC_VMAXFP,
  ALTIVEC_PIM_VEC_VMAXSB,
  ALTIVEC_PIM_VEC_VMAXSH,
  ALTIVEC_PIM_VEC_VMAXSW,
  ALTIVEC_PIM_VEC_VMAXUB,
  ALTIVEC_PIM_VEC_VMAXUH,
  ALTIVEC_PIM_VEC_VMAXUW,
  ALTIVEC_PIM_VEC_VMHADDSHS,
  ALTIVEC_PIM_VEC_VMHRADDSHS,
  ALTIVEC_PIM_VEC_VMINFP,
  ALTIVEC_PIM_VEC_VMINSB,
  ALTIVEC_PIM_VEC_VMINSH,
  ALTIVEC_PIM_VEC_VMINSW,
  ALTIVEC_PIM_VEC_VMINUB,
  ALTIVEC_PIM_VEC_VMINUH,
  ALTIVEC_PIM_VEC_VMINUW,
  ALTIVEC_PIM_VEC_VMLADDUHM,
  ALTIVEC_PIM_VEC_VMRGHB,
  ALTIVEC_PIM_VEC_VMRGHH,
  ALTIVEC_PIM_VEC_VMRGHW,
  ALTIVEC_PIM_VEC_VMRGLB,
  ALTIVEC_PIM_VEC_VMRGLH,
  ALTIVEC_PIM_VEC_VMRGLW,
  ALTIVEC_PIM_VEC_VMSUMMBM,
  ALTIVEC_PIM_VEC_VMSUMSHM,
  ALTIVEC_PIM_VEC_VMSUMSHS,
  ALTIVEC_PIM_VEC_VMSUMUBM,
  ALTIVEC_PIM_VEC_VMSUMUHM,
  ALTIVEC_PIM_VEC_VMSUMUHS,
  ALTIVEC_PIM_VEC_VMULESB,
  ALTIVEC_PIM_VEC_VMULESH,
  ALTIVEC_PIM_VEC_VMULEUB,
  ALTIVEC_PIM_VEC_VMULEUH,
  ALTIVEC_PIM_VEC_VMULOSB,
  ALTIVEC_PIM_VEC_VMULOSH,
  ALTIVEC_PIM_VEC_VMULOUB,
  ALTIVEC_PIM_VEC_VMULOUH,
  ALTIVEC_PIM_VEC_VNMSUBFP,
  ALTIVEC_PIM_VEC_VNOR,
  ALTIVEC_PIM_VEC_VOR,
  ALTIVEC_PIM_VEC_VPERM,
  ALTIVEC_PIM_VEC_VPKPX,
  ALTIVEC_PIM_VEC_VPKSHSS,
  ALTIVEC_PIM_VEC_VPKSHUS,
  ALTIVEC_PIM_VEC_VPKSWSS,
  ALTIVEC_PIM_VEC_VPKSWUS,
  ALTIVEC_PIM_VEC_VPKUHUM,
  ALTIVEC_PIM_VEC_VPKUHUS,
  ALTIVEC_PIM_VEC_VPKUWUM,
  ALTIVEC_PIM_VEC_VPKUWUS,
  ALTIVEC_PIM_VEC_VREFP,
  ALTIVEC_PIM_VEC_VRFIM,
  ALTIVEC_PIM_VEC_VRFIN,
  ALTIVEC_PIM_VEC_VRFIP,
  ALTIVEC_PIM_VEC_VRFIZ,
  ALTIVEC_PIM_VEC_VRLB,
  ALTIVEC_PIM_VEC_VRLH,
  ALTIVEC_PIM_VEC_VRLW,
  ALTIVEC_PIM_VEC_VRSQRTEFP,
  ALTIVEC_PIM_VEC_VSEL,
  ALTIVEC_PIM_VEC_VSL,
  ALTIVEC_PIM_VEC_VSLB,
  ALTIVEC_PIM_VEC_VSLDOI,
  ALTIVEC_PIM_VEC_VSLH,
  ALTIVEC_PIM_VEC_VSLO,
  ALTIVEC_PIM_VEC_VSLW,
  ALTIVEC_PIM_VEC_VSPLTB,
  ALTIVEC_PIM_VEC_VSPLTH,
  ALTIVEC_PIM_VEC_VSPLTISB,
  ALTIVEC_PIM_VEC_VSPLTISH,
  ALTIVEC_PIM_VEC_VSPLTISW,
  ALTIVEC_PIM_VEC_VSPLTW,
  ALTIVEC_PIM_VEC_VSR,
  ALTIVEC_PIM_VEC_VSRAB,
  ALTIVEC_PIM_VEC_VSRAH,
  ALTIVEC_PIM_VEC_VSRAW,
  ALTIVEC_PIM_VEC_VSRB,
  ALTIVEC_PIM_VEC_VSRH,
  ALTIVEC_PIM_VEC_VSRO,
  ALTIVEC_PIM_VEC_VSRW,
  ALTIVEC_PIM_VEC_VSUBCUW,
  ALTIVEC_PIM_VEC_VSUBFP,
  ALTIVEC_PIM_VEC_VSUBSBS,
  ALTIVEC_PIM_VEC_VSUBSHS,
  ALTIVEC_PIM_VEC_VSUBSWS,
  ALTIVEC_PIM_VEC_VSUBUBM,
  ALTIVEC_PIM_VEC_VSUBUBS,
  ALTIVEC_PIM_VEC_VSUBUHM,
  ALTIVEC_PIM_VEC_VSUBUHS,
  ALTIVEC_PIM_VEC_VSUBUWM,
  ALTIVEC_PIM_VEC_VSUBUWS,
  ALTIVEC_PIM_VEC_VSUM4SBS,
  ALTIVEC_PIM_VEC_VSUM4SHS,
  ALTIVEC_PIM_VEC_VSUM4UBS,
  ALTIVEC_PIM_VEC_VSUM2SWS,
  ALTIVEC_PIM_VEC_VSUMSWS,
  ALTIVEC_PIM_VEC_VUPKHPX,
  ALTIVEC_PIM_VEC_VUPKHSB,
  ALTIVEC_PIM_VEC_VUPKHSH,
  ALTIVEC_PIM_VEC_VUPKLPX,
  ALTIVEC_PIM_VEC_VUPKLSB,
  ALTIVEC_PIM_VEC_VUPKLSH,
  ALTIVEC_PIM_VEC_VXOR,
  ALTIVEC_PIM_VEC_XOR,

  /* PIM Predicates.  */
  ALTIVEC_PIM_VEC_ALL_EQ,
  ALTIVEC_PIM_VEC_ALL_EQ_2,
  ALTIVEC_PIM_VEC_ALL_EQ_3,
  ALTIVEC_PIM_VEC_ALL_EQ_4,
  ALTIVEC_PIM_VEC_ALL_GE,
  ALTIVEC_PIM_VEC_ALL_GE_2,
  ALTIVEC_PIM_VEC_ALL_GE_3,
  ALTIVEC_PIM_VEC_ALL_GE_4,
  ALTIVEC_PIM_VEC_ALL_GE_5,
  ALTIVEC_PIM_VEC_ALL_GE_6,
  ALTIVEC_PIM_VEC_ALL_GE_7,
  ALTIVEC_PIM_VEC_ALL_GT,
  ALTIVEC_PIM_VEC_ALL_GT_2,
  ALTIVEC_PIM_VEC_ALL_GT_3,
  ALTIVEC_PIM_VEC_ALL_GT_4,
  ALTIVEC_PIM_VEC_ALL_GT_5,
  ALTIVEC_PIM_VEC_ALL_GT_6,
  ALTIVEC_PIM_VEC_ALL_GT_7,
  ALTIVEC_PIM_VEC_ALL_IN,
  ALTIVEC_PIM_VEC_ALL_LE,
  ALTIVEC_PIM_VEC_ALL_LE_2,
  ALTIVEC_PIM_VEC_ALL_LE_3,
  ALTIVEC_PIM_VEC_ALL_LE_4,
  ALTIVEC_PIM_VEC_ALL_LE_5,
  ALTIVEC_PIM_VEC_ALL_LE_6,
  ALTIVEC_PIM_VEC_ALL_LE_7,
  ALTIVEC_PIM_VEC_ALL_LT,
  ALTIVEC_PIM_VEC_ALL_LT_2,
  ALTIVEC_PIM_VEC_ALL_LT_3,
  ALTIVEC_PIM_VEC_ALL_LT_4,
  ALTIVEC_PIM_VEC_ALL_LT_5,
  ALTIVEC_PIM_VEC_ALL_LT_6,
  ALTIVEC_PIM_VEC_ALL_LT_7,
  ALTIVEC_PIM_VEC_ALL_NAN,
  ALTIVEC_PIM_VEC_ALL_NE,
  ALTIVEC_PIM_VEC_ALL_NE_2,
  ALTIVEC_PIM_VEC_ALL_NE_3,
  ALTIVEC_PIM_VEC_ALL_NE_4,
  ALTIVEC_PIM_VEC_ALL_NGE,
  ALTIVEC_PIM_VEC_ALL_NGT,
  ALTIVEC_PIM_VEC_ALL_NLE,
  ALTIVEC_PIM_VEC_ALL_NLT,
  ALTIVEC_PIM_VEC_ALL_NUMERIC,
  ALTIVEC_PIM_VEC_ANY_EQ,
  ALTIVEC_PIM_VEC_ANY_EQ_2,
  ALTIVEC_PIM_VEC_ANY_EQ_3,
  ALTIVEC_PIM_VEC_ANY_EQ_4,
  ALTIVEC_PIM_VEC_ANY_GE,
  ALTIVEC_PIM_VEC_ANY_GE_2,
  ALTIVEC_PIM_VEC_ANY_GE_3,
  ALTIVEC_PIM_VEC_ANY_GE_4,
  ALTIVEC_PIM_VEC_ANY_GE_5,
  ALTIVEC_PIM_VEC_ANY_GE_6,
  ALTIVEC_PIM_VEC_ANY_GE_7,
  ALTIVEC_PIM_VEC_ANY_GT,
  ALTIVEC_PIM_VEC_ANY_GT_2,
  ALTIVEC_PIM_VEC_ANY_GT_3,
  ALTIVEC_PIM_VEC_ANY_GT_4,
  ALTIVEC_PIM_VEC_ANY_GT_5,
  ALTIVEC_PIM_VEC_ANY_GT_6,
  ALTIVEC_PIM_VEC_ANY_GT_7,
  ALTIVEC_PIM_VEC_ANY_LE,
  ALTIVEC_PIM_VEC_ANY_LE_2,
  ALTIVEC_PIM_VEC_ANY_LE_3,
  ALTIVEC_PIM_VEC_ANY_LE_4,
  ALTIVEC_PIM_VEC_ANY_LE_5,
  ALTIVEC_PIM_VEC_ANY_LE_6,
  ALTIVEC_PIM_VEC_ANY_LE_7,
  ALTIVEC_PIM_VEC_ANY_LT,
  ALTIVEC_PIM_VEC_ANY_LT_2,
  ALTIVEC_PIM_VEC_ANY_LT_3,
  ALTIVEC_PIM_VEC_ANY_LT_4,
  ALTIVEC_PIM_VEC_ANY_LT_5,
  ALTIVEC_PIM_VEC_ANY_LT_6,
  ALTIVEC_PIM_VEC_ANY_LT_7,
  ALTIVEC_PIM_VEC_ANY_NAN,
  ALTIVEC_PIM_VEC_ANY_NE,
  ALTIVEC_PIM_VEC_ANY_NE_2,
  ALTIVEC_PIM_VEC_ANY_NE_3,
  ALTIVEC_PIM_VEC_ANY_NE_4,
  ALTIVEC_PIM_VEC_ANY_NGE,
  ALTIVEC_PIM_VEC_ANY_NGT,
  ALTIVEC_PIM_VEC_ANY_NLE,
  ALTIVEC_PIM_VEC_ANY_NLT,
  ALTIVEC_PIM_VEC_ANY_NUMERIC,
  ALTIVEC_PIM_VEC_ANY_OUT,

  ALTIVEC_PIM__LAST = ALTIVEC_PIM_VEC_ANY_OUT,
  /* APPLE LOCAL end AltiVec */

  /* APPLE LOCAL begin constant cfstrings */
  RS6000_BUILTIN_MAX,
  TARGET_BUILTIN_MAX = RS6000_BUILTIN_MAX,
  /* APPLE LOCAL end constant cfstrings */

  RS6000_BUILTIN_COUNT
};
/* APPLE LOCAL radar 4204303 */
#define INITIAL_FRAME_ADDRESS_RTX stack_pointer_rtx

/* APPLE LOCAL begin CW asm blocks */
/* Table of instructions that need extra constraints.  */
#undef TARGET_IASM_OP_CONSTRAINT
#define TARGET_IASM_OP_CONSTRAINT \
  { "la", 2, "m" },	\
  { "lbz", 2, "m" },	\
  { "lbzu", 2, "m" },	\
  { "ld", 2, "m" },	\
  { "ldu", 2, "m" },	\
  { "lfd", 2, "m" },	\
  { "lfdu", 2, "m" },	\
  { "lfs", 2, "m" },	\
  { "lfsu", 2, "m" },	\
  { "lha", 2, "m" },	\
  { "lhau", 2, "m" },	\
  { "lhz", 2, "m" },	\
  { "lhzu", 2, "m" },	\
  { "lmw", 2, "m" },	\
  { "lwa", 2, "m" },	\
  { "lwz", 2, "m" },	\
  { "lwzu", 2, "m" },	\
  { "stb", 2, "m" },	\
  { "stbu", 2, "m" },	\
  { "std", 2, "m" },	\
  { "stdu", 2, "m" },	\
  { "stfd", 2, "m" },	\
  { "stfdu", 2, "m" },	\
  { "stfs", 2, "m" },	\
  { "stfsu", 2, "m" },	\
  { "sth", 2, "m" },	\
  { "sthu", 2, "m" },	\
  { "stmw", 2, "m" },	\
  { "stw", 2, "m" },	\
  { "stwu", 2, "m" },

#define IASM_FUNCTION_MODIFIER "z"

/* APPLE LOCAL end CW asm blocks */

/* LLVM LOCAL begin */
#define LLVM_TARGET_INTRINSIC_PREFIX "ppc"

/* Turn -march=xx into a CPU type.
 */
#define LLVM_SET_SUBTARGET_FEATURES(F) \
  { \
    F.setCPU(rs6000_cpu_target); \
    F.AddFeature("altivec", TARGET_ALTIVEC); \
    F.AddFeature("gpul", TARGET_MFCRF); \
    F.AddFeature("fsqrt", TARGET_PPC_GPOPT); \
    F.AddFeature("64bit", TARGET_POWERPC64); \
  }

/* When -m64 is specified, set the architecture to powerpc64-os-blah even if the
 * compiler was configured for powerpc-os-blah.
 */
#define LLVM_OVERRIDE_TARGET_ARCH() \
  (TARGET_64BIT ? "powerpc64" : "powerpc")

/* LLVM_TARGET_INTRINSIC_LOWER - To handle builtins, we want to expand the
 * invocation into normal LLVM code.  If the target can handle the builtin, this
 * macro should call the target TreeToLLVM::TargetIntrinsicLower method and
 *  return true.This macro is invoked from a method in the TreeToLLVM class.
 */
#define LLVM_TARGET_INTRINSIC_LOWER(EXP, BUILTIN_CODE, DESTLOC, RESULT,       \
                                    DESTTY, OPS)                 \
        TargetIntrinsicLower(EXP, BUILTIN_CODE, DESTLOC, RESULT, DESTTY, OPS);

#ifdef LLVM_ABI_H
extern bool llvm_rs6000_should_pass_aggregate_byval(tree, const Type *);

#define LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(X, TY)      \
  llvm_rs6000_should_pass_aggregate_byval((X), (TY))

extern bool llvm_rs6000_should_pass_vector_in_integer_regs(tree);

/* All non-Altivec vectors are passed in integer regs. */
#define LLVM_SHOULD_PASS_VECTOR_IN_INTEGER_REGS(X)            \
  llvm_rs6000_should_pass_vector_in_integer_regs((X))

extern bool llvm_rs6000_should_pass_aggregate_in_mixed_regs(tree, const Type*, 
                                              std::vector<const Type*>&);

/* FIXME this is needed for 64-bit  */
#define LLVM_SHOULD_PASS_AGGREGATE_IN_MIXED_REGS(T, TY, E) \
   llvm_rs6000_should_pass_aggregate_in_mixed_regs((T), (TY), (E))

extern tree llvm_rs6000_should_return_vector_as_scalar(tree, bool);

/* (Generic) vectors 4 bytes long are returned as an int.
   Vectors 8 bytes long are returned as 2 ints. */
#define LLVM_SHOULD_RETURN_VECTOR_AS_SCALAR(X,isBuiltin)  \
  llvm_rs6000_should_return_vector_as_scalar((X), (isBuiltin))

extern bool llvm_rs6000_should_return_vector_as_shadow(tree, bool);

/* Non-altivec vectors bigger than 8 bytes are returned by sret. */
#define LLVM_SHOULD_RETURN_VECTOR_AS_SHADOW(X,isBuiltin)\
  llvm_rs6000_should_return_vector_as_shadow((X), (isBuiltin))

#endif /* LLVM_ABI_H */

/* LLVM LOCAL end */

enum rs6000_builtin_type_index
{
  RS6000_BTI_NOT_OPAQUE,
  RS6000_BTI_opaque_V2SI,
  RS6000_BTI_opaque_V2SF,
  RS6000_BTI_opaque_p_V2SI,
  RS6000_BTI_opaque_V4SI,
  RS6000_BTI_V16QI,
  RS6000_BTI_V2SI,
  RS6000_BTI_V2SF,
  RS6000_BTI_V4HI,
  RS6000_BTI_V4SI,
  RS6000_BTI_V4SF,
  RS6000_BTI_V8HI,
  RS6000_BTI_unsigned_V16QI,
  RS6000_BTI_unsigned_V8HI,
  RS6000_BTI_unsigned_V4SI,
  RS6000_BTI_bool_char,          /* __bool char */
  RS6000_BTI_bool_short,         /* __bool short */
  RS6000_BTI_bool_int,           /* __bool int */
  RS6000_BTI_pixel,              /* __pixel */
  RS6000_BTI_bool_V16QI,         /* __vector __bool char */
  RS6000_BTI_bool_V8HI,          /* __vector __bool short */
  RS6000_BTI_bool_V4SI,          /* __vector __bool int */
  RS6000_BTI_pixel_V8HI,         /* __vector __pixel */
  RS6000_BTI_long,	         /* long_integer_type_node */
  RS6000_BTI_unsigned_long,      /* long_unsigned_type_node */
  RS6000_BTI_INTQI,	         /* intQI_type_node */
  RS6000_BTI_UINTQI,		 /* unsigned_intQI_type_node */
  RS6000_BTI_INTHI,	         /* intHI_type_node */
  RS6000_BTI_UINTHI,		 /* unsigned_intHI_type_node */
  RS6000_BTI_INTSI,		 /* intSI_type_node */
  RS6000_BTI_UINTSI,		 /* unsigned_intSI_type_node */
  RS6000_BTI_float,	         /* float_type_node */
  RS6000_BTI_void,	         /* void_type_node */
  RS6000_BTI_MAX
};


#define opaque_V2SI_type_node         (rs6000_builtin_types[RS6000_BTI_opaque_V2SI])
#define opaque_V2SF_type_node         (rs6000_builtin_types[RS6000_BTI_opaque_V2SF])
#define opaque_p_V2SI_type_node       (rs6000_builtin_types[RS6000_BTI_opaque_p_V2SI])
#define opaque_V4SI_type_node         (rs6000_builtin_types[RS6000_BTI_opaque_V4SI])
#define V16QI_type_node               (rs6000_builtin_types[RS6000_BTI_V16QI])
#define V2SI_type_node                (rs6000_builtin_types[RS6000_BTI_V2SI])
#define V2SF_type_node                (rs6000_builtin_types[RS6000_BTI_V2SF])
#define V4HI_type_node                (rs6000_builtin_types[RS6000_BTI_V4HI])
#define V4SI_type_node                (rs6000_builtin_types[RS6000_BTI_V4SI])
#define V4SF_type_node                (rs6000_builtin_types[RS6000_BTI_V4SF])
#define V8HI_type_node                (rs6000_builtin_types[RS6000_BTI_V8HI])
#define unsigned_V16QI_type_node      (rs6000_builtin_types[RS6000_BTI_unsigned_V16QI])
#define unsigned_V8HI_type_node       (rs6000_builtin_types[RS6000_BTI_unsigned_V8HI])
#define unsigned_V4SI_type_node       (rs6000_builtin_types[RS6000_BTI_unsigned_V4SI])
#define bool_char_type_node           (rs6000_builtin_types[RS6000_BTI_bool_char])
#define bool_short_type_node          (rs6000_builtin_types[RS6000_BTI_bool_short])
#define bool_int_type_node            (rs6000_builtin_types[RS6000_BTI_bool_int])
#define pixel_type_node               (rs6000_builtin_types[RS6000_BTI_pixel])
#define bool_V16QI_type_node	      (rs6000_builtin_types[RS6000_BTI_bool_V16QI])
#define bool_V8HI_type_node	      (rs6000_builtin_types[RS6000_BTI_bool_V8HI])
#define bool_V4SI_type_node	      (rs6000_builtin_types[RS6000_BTI_bool_V4SI])
#define pixel_V8HI_type_node	      (rs6000_builtin_types[RS6000_BTI_pixel_V8HI])

#define long_integer_type_internal_node  (rs6000_builtin_types[RS6000_BTI_long])
#define long_unsigned_type_internal_node (rs6000_builtin_types[RS6000_BTI_unsigned_long])
#define intQI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTQI])
#define uintQI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTQI])
#define intHI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTHI])
#define uintHI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTHI])
#define intSI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTSI])
#define uintSI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTSI])
#define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
#define void_type_internal_node		 (rs6000_builtin_types[RS6000_BTI_void])

extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
extern GTY(()) tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT];

