/*
 * Copyright (C) 2006, 2007. PathScale Inc. All Rights Reserved.
 */

/*

   Path64 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 version 3

   Path64 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 Path64; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   02110-1301, USA.

*/

#ifndef __GSPIN_TREE_H__
#define __GSPIN_TREE_H__

#include <string.h>

#include "gspin-base-types.h"
#include "gspin-assert.h"
#include "gspin-alloc.h"

typedef enum gs_code {

 // Generic core stuff:

 DOT,

 // list
 EMPTY,
 CONS,

 // Inbuilt Constructors:

 IB_INT,
 IB_UNSIGNED,
 IB_LONG_LONG,
 IB_LONG,
 IB_LONG_DOUBLE,
 IB_UNSIGNED_LONG,
 IB_UNSIGNED_LONG_LONG,
 IB_CHAR,
 IB_STRING,
 IB_FLOAT,
 IB_DOUBLE,
 IB_BOOL,
 IB_BIT_VECTOR,

 GS_TCC,
 GSBI,
 GSBI_CLASS,

 // GCC Specific tree codes:

 GS_ABS_EXPR,
 GS_ADDR_EXPR,
 GS_ALIGNOF_EXPR,
 GS_ALIGN_INDIRECT_REF,
 GS_ARRAY_RANGE_REF,
 GS_ARRAY_REF,
 GS_ARRAY_TYPE,
 GS_ARROW_EXPR,
 GS_ASM_EXPR,
 GS_ASSIGN_STMT,
 GS_BIND_EXPR,
 GS_BIT_AND_EXPR,
 GS_BIT_FIELD_REF,
 GS_BIT_IOR_EXPR,
 GS_BIT_NOT_EXPR,
 GS_BIT_XOR_EXPR,
 GS_BLOCK,
 GS_BOOLEAN_TYPE,
 GS_BREAK_STMT,
 GS_CALL_EXPR,
 GS_CASE_LABEL_EXPR,
 GS_CATCH_EXPR,
 GS_CEIL_DIV_EXPR,
 GS_CEIL_MOD_EXPR,
 GS_CHAR_TYPE,
 GS_CLEANUP, // TODO: Same as GS_CLEANUP_POINT_EXPR?
 GS_CLEANUP_POINT_EXPR,
 GS_COMPLEX_CST,
 GS_COMPLEX_EXPR,
 GS_COMPLEX_TYPE,
 GS_COMPONENT_REF,
 GS_COMPOUND_EXPR,
 GS_COMPOUND_LITERAL_EXPR,
 GS_COND_EXPR,
 GS_CONJ_EXPR,
 GS_CONSTRUCTOR,
 GS_CONST_DECL,
 GS_CONTINUE_STMT,
 GS_CONVERT_EXPR,
 GS_DECL_EXPR,
 GS_DO_STMT,
 GS_EH_FILTER_EXPR,
 GS_ENUMERAL_TYPE,
 GS_EQ_EXPR,
 GS_ERROR_MARK,
 GS_EXACT_DIV_EXPR,
 GS_EXC_PTR_EXPR,
 GS_EXIT_EXPR,
 GS_EXPR_STMT,
 GS_FDESC_EXPR,
 GS_FIELD_DECL,
 GS_FILE_TYPE,
 GS_FILTER_EXPR,
 GS_FIX_CEIL_EXPR,
 GS_FIX_FLOOR_EXPR,
 GS_FIX_ROUND_EXPR,
 GS_FIX_TRUNC_EXPR,
 GS_FLOAT_EXPR,
 GS_FLOOR_DIV_EXPR,
 GS_FLOOR_MOD_EXPR,
 GS_FOR_STMT,
 GS_FUNCTION_DECL,
 GS_FUNCTION_TYPE,
 GS_GE_EXPR,
 GS_GOTO_EXPR,
 GS_GT_EXPR,
 GS_IDENTIFIER_NODE,
 GS_IMAGPART_EXPR,
 GS_INDIRECT_REF,
 GS_INIT_EXPR,
 GS_INTEGER_CST,
 GS_INTEGER_TYPE,
 GS_LABEL_DECL,
 GS_LABEL_EXPR,
 GS_LANG_TYPE,
 GS_LE_EXPR,
 GS_LOOP_EXPR,
 GS_LROTATE_EXPR,
 GS_LSHIFT_EXPR,
 GS_LTGT_EXPR,
 GS_LT_EXPR,
 GS_MAX_EXPR,
 GS_METHOD_TYPE,
 GS_MINUS_EXPR,
 GS_MIN_EXPR,
 GS_MISALIGNED_INDIRECT_REF,
 GS_MODIFY_EXPR,
 GS_MULT_EXPR,
 GS_NAMESPACE_DECL,
 GS_NEGATE_EXPR,
 GS_NE_EXPR,
 GS_NON_LVALUE_EXPR,
 GS_NOP_EXPR,
 GS_OBJ_TYPE_REF,
 GS_OFFSET_TYPE,
#ifdef FE_GNU_4_2_0
 GS_OMP_ATOMIC,
 GS_OMP_CLAUSE,
 GS_OMP_CRITICAL,
 GS_OMP_FOR,
 GS_OMP_MASTER,
 GS_OMP_ORDERED,
 GS_OMP_PARALLEL,
 GS_OMP_SECTION,
 GS_OMP_SECTIONS,
 GS_OMP_SINGLE,
#endif
 GS_ORDERED_EXPR,
 GS_PARM_DECL,
 GS_PHI_NODE,
 GS_PLACEHOLDER_EXPR,
 GS_PLUS_EXPR,
 GS_POINTER_TYPE,
 GS_POLYNOMIAL_CHREC,
 GS_POSTDECREMENT_EXPR,
 GS_POSTINCREMENT_EXPR,
 GS_PREDECREMENT_EXPR,
 GS_PREINCREMENT_EXPR,
 GS_PROGRAM, // Not in GCC.
 GS_QUAL_UNION_TYPE,
 GS_RANGE_EXPR,
 GS_RDIV_EXPR,
 GS_REALIGN_LOAD_EXPR,
 GS_REALPART_EXPR,
 GS_REAL_CST,
 GS_REAL_TYPE,
 GS_RECORD_TYPE,
 GS_REFERENCE_TYPE,
 GS_RESULT_DECL,
 GS_RESX_EXPR,
 GS_RETURN_EXPR,
 GS_ROUND_DIV_EXPR,
 GS_ROUND_MOD_EXPR,
 GS_RROTATE_EXPR,
 GS_RSHIFT_EXPR,
 GS_SAVE_EXPR,
 GS_SCEV_KNOWN,
 GS_SCEV_NOT_KNOWN,
 GS_SCOPE,
 GS_SCOPE_STMT,		// Can delete because GCC 4 does not have SCOPE_STMT.  
 GS_SIZEOF_EXPR,
 GS_SSA_NAME,
 GS_STATEMENT_LIST,
 GS_STMT_EXPR,
 GS_STRING_CST,
 GS_SWITCH_EXPR,
 GS_SWITCH_STMT,
 GS_TARGET_EXPR,
 GS_TRANSLATION_UNIT_DECL,
 GS_TREE_BINFO,
 GS_TREE_LIST,
 GS_TREE_VEC,
 GS_TRUNC_DIV_EXPR,
 GS_TRUNC_MOD_EXPR,
 GS_TRUTH_ANDIF_EXPR,
 GS_TRUTH_AND_EXPR,
 GS_TRUTH_NOT_EXPR,
 GS_TRUTH_ORIF_EXPR,
 GS_TRUTH_OR_EXPR,
 GS_TRUTH_XOR_EXPR,
 GS_TRY_BLOCK,
 GS_TRY_CATCH_EXPR,
 GS_TRY_FINALLY_EXPR,
 GS_TYPE_DECL,
 GS_UNEQ_EXPR,
 GS_UNGE_EXPR,
 GS_UNGT_EXPR,
 GS_UNION_TYPE,
 GS_UNLE_EXPR,
 GS_UNLT_EXPR,
 GS_UNORDERED_EXPR,
 GS_VALUE_HANDLE,
 GS_VAR_DECL,
 GS_VA_ARG_EXPR,
 GS_VECTOR_CST,
 GS_VECTOR_TYPE,
 GS_VEC_COND_EXPR,
 GS_VIEW_CONVERT_EXPR,
 GS_VOID_TYPE,
 GS_WHILE_STMT,
 GS_WITH_CLEANUP_EXPR,
 GS_WITH_SIZE_EXPR,

 GS_AGGR_INIT_EXPR,
 GS_BASELINK,
 GS_BOUND_TEMPLATE_TEMPLATE_PARM,
 GS_CAST_EXPR,
 GS_CONST_CAST_EXPR,
 GS_CLEANUP_STMT,
 GS_CTOR_INITIALIZER,
 GS_DELETE_EXPR,
 GS_DEFAULT_ARG,
 GS_DYNAMIC_CAST_EXPR,
 GS_DOTSTAR_EXPR,
 GS_EMPTY_CLASS_EXPR,
 GS_EH_SPEC_BLOCK,
 GS_HANDLER,
 GS_IF_STMT,
 GS_MEMBER_REF,
 GS_MODOP_EXPR,
 GS_MUST_NOT_THROW_EXPR,
 GS_NEW_EXPR,
 GS_NON_DEPENDENT_EXPR,
 GS_OFFSET_REF,
 GS_OFFSETOF_EXPR,
 GS_OVERLOAD,
 GS_PTRMEM_CST,
 GS_PSEUDO_DTOR_EXPR,
 GS_REINTERPRET_CAST_EXPR,
 GS_SCOPE_REF,
 GS_STATIC_CAST_EXPR,
 GS_TAG_DEFN,
 GS_TEMPLATE_DECL,
 GS_TEMPLATE_ID_EXPR,
 GS_TEMPLATE_PARM_INDEX,
 GS_TEMPLATE_TYPE_PARM,
 GS_THROW_EXPR,
 GS_TINST_LEVEL,
 GS_TYPEOF_TYPE,
 GS_TYPENAME_TYPE,
 GS_TYPE_EXPR,
 GS_TYPEID_EXPR,
 GS_USING_DECL,
 GS_USING_STMT,
 GS_UNBOUND_CLASS_TEMPLATE,
 GS_VEC_DELETE_EXPR,
 GS_VEC_NEW_EXPR,
 GS_TEMPLATE_TEMPLATE_PARM, // this is 233; should not be higher than 255

} gs_code_t;

typedef enum gs_tree_code_class {

 GS_TCC_EXCEPTIONAL,
 GS_TCC_CONSTANT,
 GS_TCC_TYPE,
 GS_TCC_DECLARATION,
 GS_TCC_REFERENCE,
 GS_TCC_COMPARISON,
 GS_TCC_UNARY,
 GS_TCC_BINARY,
 GS_TCC_STATEMENT,
 GS_TCC_EXPRESSION,

} gs_tree_code_class_t;

extern gs_string_t gs_tree_code_class_name (gs_tree_code_class_t code);

extern gs_string_t gs_code_name (gs_code_t code);

extern int gs_code_arity(gs_code_t code);

extern int gspin_node_size(gs_code_t code);

typedef struct gspin *gs_t;
typedef gs_t *gs_vec_t;


// Bug 13134: gspin_t should have alignment 4 to conserve memory.
// Data types with alignment 8 and higher are stored in u1.data[] and
// realigned in the inline procedures below using gs_realign_t.
typedef struct gspin
{
  union { // byte 0
    struct {
      gs_code_t	code:8;
      unsigned int	emitted:1;
      unsigned int	slen:23;	// length part of IB_STRING
    } u0s0;
    struct { // byte 0
      char		unused1;	// space for code
      char		unused2;	// space for emitted flag
      union { // byte 2
	unsigned char	byte;	// IB_BOOL, IB_CHAR, GS_TCC, GSBI_CLASS
	unsigned short	hword;	// GSBI
      } u0s1u;
    } u0s1;
  } u0;
  union { // byte 4
    unsigned int	u;	// IB_UNSIGNED, IB_UNSIGNED_LONG
    int			n;	// IB_INT, IB_LONG
    float		f;	// IB_FLOAT
    gs_t		arg[1];	// for pointing to kids of non-leaf nodes
    char *		s;	// pointer part of IB_STRING
    int			data[4]; // All types larger than 4 bytes (see
  } u1;				 //   gs_realign_t below)
} gspin_t;


typedef union gs_realign
{
  int data[4];
  long long		ll;	// IB_LONG_LONG
  unsigned long long	ull;	// IB_UNSIGNED_LONG_LONG, IB_BIT_VECTOR
  double		d;	// IB_DOUBLE
  long double		ld;	// IB_LONG_DOUBLE
} gs_realign_t;


static inline gs_void_t _gs_code (gs_t node, gs_code_t c)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u0.u0s0.code = c;
  return;
}

static inline void gs_set_operand(gs_t node, int i, gs_t arg)
{
  node->u1.arg[i] = arg;
  return;
}

static inline gs_void_t _gs_em (gs_t node, bool em)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u0.u0s0.emitted = em;
  return;
}

static inline bool gs_em (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u0.u0s0.emitted;
}

static inline gs_void_t _gs_b (gs_t node, unsigned char b)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u0.u0s1.u0s1u.byte = b;
  return;
}

static inline unsigned char gs_b (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u0.u0s1.u0s1u.byte;
}

static inline void _gs_hword(gs_t node, unsigned int h)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u0.u0s1.u0s1u.hword = h;
  return;
}

static inline unsigned int gs_hword(gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u0.u0s1.u0s1u.hword;
}

static inline gs_void_t _gs_bv (gs_t node, gs_count_t position, bool bit)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  GS_ASSERT (bit == true || bit == false, "Bad bit value");
  // Per Bug 10335, return right away if the value of parameter bit is 0.
  if (bit == false)
    return;
  realign.ull = 1LL << position;
  node->u1.data[0] |= realign.data[0];
  node->u1.data[1] |= realign.data[1];
  return;
}

static inline bool gs_bv (gs_t node, unsigned int position)
{
  gs_realign_t realign;
  if (node == NULL)
    return false;
  realign.data[0] = node->u1.data[0];
  realign.data[1] = node->u1.data[1];
  unsigned long long k = 1LL << position;
  return (k & realign.ull) != 0;
}

static inline gs_void_t _gs_bv_reset (gs_t node, unsigned int position)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.ull = ~(1LL << position);
  node->u1.data[0] &= realign.data[0];
  node->u1.data[1] &= realign.data[1];
  return;
}
static inline gs_void_t _gs_n (gs_t node, int n)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u1.n = n;
  return;
}

static inline int gs_n (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u1.n;
}

static inline gs_void_t _gs_u (gs_t node, gs_unsigned_t u)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u1.u = u;
  return;
}

static inline gs_unsigned_t gs_u (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u1.u;
}

static inline gs_void_t _gs_ull (gs_t node, gs_unsigned_long_long_t ull)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.ull = ull;
  node->u1.data[0] = realign.data[0];
  node->u1.data[1] = realign.data[1];
  return;
}

static inline gs_unsigned_long_long_t gs_ull (gs_t node)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.data[0] = node->u1.data[0];
  realign.data[1] = node->u1.data[1];
  return realign.ull;
}

static inline gs_void_t _gs_ll (gs_t node, gs_long_long_t ll)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.ll = ll;
  node->u1.data[0] = realign.data[0];
  node->u1.data[1] = realign.data[1];
  return;
}

static inline gs_long_long_t gs_ll (gs_t node)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.data[0] = node->u1.data[0];
  realign.data[1] = node->u1.data[1];
  return realign.ll;
}

static inline gs_void_t _gs_ld (gs_t node, gs_long_double_t ld)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.ld = ld;
  node->u1.data[0] = realign.data[0];
  node->u1.data[1] = realign.data[1];
  node->u1.data[2] = realign.data[2];
#ifdef ARCH_MIPS
  node->u1.data[3] = realign.data[3];
#endif
  return;
}

static inline gs_long_double_t gs_ld (gs_t node)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.data[0] = node->u1.data[0];
  realign.data[1] = node->u1.data[1];
  realign.data[2] = node->u1.data[2];
#ifdef ARCH_MIPS
  realign.data[3] = node->u1.data[3];
#endif
  return realign.ld;
}

static inline gs_void_t _gs_c (gs_t node, gs_char_t c)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u0.u0s1.u0s1u.byte = c;
  return;
}

static inline gs_char_t gs_c (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u0.u0s1.u0s1u.byte;
}

static inline gs_void_t _gs_f (gs_t node, gs_float_t f)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u1.f = f;
  return;
}

static inline gs_float_t gs_f (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u1.f;
}

static inline gs_void_t _gs_d (gs_t node, gs_double_t d)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.d = d;
  node->u1.data[0] = realign.data[0];
  node->u1.data[1] = realign.data[1];
  return;
}

static inline gs_double_t gs_d (gs_t node)
{
  gs_realign_t realign;
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  realign.data[0] = node->u1.data[0];
  realign.data[1] = node->u1.data[1];
  return realign.d;
}

extern gs_void_t _gs_s (gs_t node, const gs_string_t s,
			gs_unsigned_long_t length);

static inline gs_void_t _gs_s_no_alloc (gs_t node, const gs_string_t s)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  node->u1.s = s;
  return;
}

static inline gs_string_t gs_s (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u1.s;
}

static inline gs_void_t _gs_slen(gs_t op, unsigned int aux_num)
{
  GS_ASSERT (op != (gs_t) NULL, "Got null operator");
  op->u0.u0s0.slen = aux_num;
  return;
}

static inline unsigned int gs_slen(gs_t op)
{
  GS_ASSERT (op != (gs_t) NULL, "Got null operator");
  return op->u0.u0s0.slen;
}

static inline gs_code_t gs_code (gs_t node)
{
  GS_ASSERT (node != (gs_t) NULL, "Got null node");
  return node->u0.u0s0.code;
}

static inline gs_code_t gs_tree_code(gs_t node) { return gs_code(node); }

static inline gs_t gs_operand(gs_t node, int i)
{
  return node->u1.arg[i];
}

// gs_t field accessors/modifiers-

extern gs_t __gs (gs_code_t code);


// Auxiliary
extern gs_void_t gs_dump (gs_t t);

// This is GCC specific and ideally ought to be abstracted out into gspin-tel.h maybe.
typedef enum gsbi {

  GSBI_BUILT_IN_ACOS,
  GSBI_BUILT_IN_ACOSF,
  GSBI_BUILT_IN_ACOSH,
  GSBI_BUILT_IN_ACOSHF,
  GSBI_BUILT_IN_ACOSHL,
  GSBI_BUILT_IN_ACOSL,
  GSBI_BUILT_IN_ASIN,
  GSBI_BUILT_IN_ASINF,
  GSBI_BUILT_IN_ASINH,
  GSBI_BUILT_IN_ASINHF,
  GSBI_BUILT_IN_ASINHL,
  GSBI_BUILT_IN_ASINL,
  GSBI_BUILT_IN_ATAN,
  GSBI_BUILT_IN_ATAN2,
  GSBI_BUILT_IN_ATAN2F,
  GSBI_BUILT_IN_ATAN2L,
  GSBI_BUILT_IN_ATANF,
  GSBI_BUILT_IN_ATANH,
  GSBI_BUILT_IN_ATANHF,
  GSBI_BUILT_IN_ATANHL,
  GSBI_BUILT_IN_ATANL,
  GSBI_BUILT_IN_CBRT,
  GSBI_BUILT_IN_CBRTF,
  GSBI_BUILT_IN_CBRTL,
  GSBI_BUILT_IN_CEIL,
  GSBI_BUILT_IN_CEILF,
  GSBI_BUILT_IN_CEILL,
  GSBI_BUILT_IN_COPYSIGN,
  GSBI_BUILT_IN_COPYSIGNF,
  GSBI_BUILT_IN_COPYSIGNL,
  GSBI_BUILT_IN_COS,
  GSBI_BUILT_IN_COSF,
  GSBI_BUILT_IN_COSH,
  GSBI_BUILT_IN_COSHF,
  GSBI_BUILT_IN_COSHL,
  GSBI_BUILT_IN_COSL,
  GSBI_BUILT_IN_DREM,
  GSBI_BUILT_IN_DREMF,
  GSBI_BUILT_IN_DREML,
  GSBI_BUILT_IN_ERF,
  GSBI_BUILT_IN_ERFC,
  GSBI_BUILT_IN_ERFCF,
  GSBI_BUILT_IN_ERFCL,
  GSBI_BUILT_IN_ERFF,
  GSBI_BUILT_IN_ERFL,
  GSBI_BUILT_IN_EXP,
  GSBI_BUILT_IN_EXP10,
  GSBI_BUILT_IN_EXP10F,
  GSBI_BUILT_IN_EXP10L,
  GSBI_BUILT_IN_EXP2,
  GSBI_BUILT_IN_EXP2F,
  GSBI_BUILT_IN_EXP2L,
  GSBI_BUILT_IN_EXPF,
  GSBI_BUILT_IN_EXPL,
  GSBI_BUILT_IN_EXPM1,
  GSBI_BUILT_IN_EXPM1F,
  GSBI_BUILT_IN_EXPM1L,
  GSBI_BUILT_IN_FABS,
  GSBI_BUILT_IN_FABSF,
  GSBI_BUILT_IN_FABSL,
  GSBI_BUILT_IN_FDIM,
  GSBI_BUILT_IN_FDIMF,
  GSBI_BUILT_IN_FDIML,
  GSBI_BUILT_IN_FLOOR,
  GSBI_BUILT_IN_FLOORF,
  GSBI_BUILT_IN_FLOORL,
  GSBI_BUILT_IN_FMA,
  GSBI_BUILT_IN_FMAF,
  GSBI_BUILT_IN_FMAL,
  GSBI_BUILT_IN_FMAX,
  GSBI_BUILT_IN_FMAXF,
  GSBI_BUILT_IN_FMAXL,
  GSBI_BUILT_IN_FMIN,
  GSBI_BUILT_IN_FMINF,
  GSBI_BUILT_IN_FMINL,
  GSBI_BUILT_IN_FMOD,
  GSBI_BUILT_IN_FMODF,
  GSBI_BUILT_IN_FMODL,
  GSBI_BUILT_IN_FREXP,
  GSBI_BUILT_IN_FREXPF,
  GSBI_BUILT_IN_FREXPL,
  GSBI_BUILT_IN_GAMMA,
  GSBI_BUILT_IN_GAMMAF,
  GSBI_BUILT_IN_GAMMAL,
  GSBI_BUILT_IN_HUGE_VAL,
  GSBI_BUILT_IN_HUGE_VALF,
  GSBI_BUILT_IN_HUGE_VALL,
  GSBI_BUILT_IN_HYPOT,
  GSBI_BUILT_IN_HYPOTF,
  GSBI_BUILT_IN_HYPOTL,
  GSBI_BUILT_IN_ILOGB,
  GSBI_BUILT_IN_ILOGBF,
  GSBI_BUILT_IN_ILOGBL,
  GSBI_BUILT_IN_INF,
  GSBI_BUILT_IN_INFF,
  GSBI_BUILT_IN_INFL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_INFD32,
  GSBI_BUILT_IN_INFD64,
  GSBI_BUILT_IN_INFD128,
#endif
  GSBI_BUILT_IN_J0,
  GSBI_BUILT_IN_J0F,
  GSBI_BUILT_IN_J0L,
  GSBI_BUILT_IN_J1,
  GSBI_BUILT_IN_J1F,
  GSBI_BUILT_IN_J1L,
  GSBI_BUILT_IN_JN,
  GSBI_BUILT_IN_JNF,
  GSBI_BUILT_IN_JNL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_LCEIL,
  GSBI_BUILT_IN_LCEILF,
  GSBI_BUILT_IN_LCEILL,
#endif
  GSBI_BUILT_IN_LDEXP,
  GSBI_BUILT_IN_LDEXPF,
  GSBI_BUILT_IN_LDEXPL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_LFLOOR,
  GSBI_BUILT_IN_LFLOORF,
  GSBI_BUILT_IN_LFLOORL,
#endif
  GSBI_BUILT_IN_LGAMMA,
  GSBI_BUILT_IN_LGAMMAF,
  GSBI_BUILT_IN_LGAMMAL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_LLCEIL,
  GSBI_BUILT_IN_LLCEILF,
  GSBI_BUILT_IN_LLCEILL,
  GSBI_BUILT_IN_LLFLOOR,
  GSBI_BUILT_IN_LLFLOORF,
  GSBI_BUILT_IN_LLFLOORL,
#endif
  GSBI_BUILT_IN_LLRINT,
  GSBI_BUILT_IN_LLRINTF,
  GSBI_BUILT_IN_LLRINTL,
  GSBI_BUILT_IN_LLROUND,
  GSBI_BUILT_IN_LLROUNDF,
  GSBI_BUILT_IN_LLROUNDL,
  GSBI_BUILT_IN_LOG,
  GSBI_BUILT_IN_LOG10,
  GSBI_BUILT_IN_LOG10F,
  GSBI_BUILT_IN_LOG10L,
  GSBI_BUILT_IN_LOG1P,
  GSBI_BUILT_IN_LOG1PF,
  GSBI_BUILT_IN_LOG1PL,
  GSBI_BUILT_IN_LOG2,
  GSBI_BUILT_IN_LOG2F,
  GSBI_BUILT_IN_LOG2L,
  GSBI_BUILT_IN_LOGB,
  GSBI_BUILT_IN_LOGBF,
  GSBI_BUILT_IN_LOGBL,
  GSBI_BUILT_IN_LOGF,
  GSBI_BUILT_IN_LOGL,
  GSBI_BUILT_IN_LRINT,
  GSBI_BUILT_IN_LRINTF,
  GSBI_BUILT_IN_LRINTL,
  GSBI_BUILT_IN_LROUND,
  GSBI_BUILT_IN_LROUNDF,
  GSBI_BUILT_IN_LROUNDL,
  GSBI_BUILT_IN_MODF,
  GSBI_BUILT_IN_MODFF,
  GSBI_BUILT_IN_MODFL,
  GSBI_BUILT_IN_NAN,
  GSBI_BUILT_IN_NANF,
  GSBI_BUILT_IN_NANL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_NAND32,
  GSBI_BUILT_IN_NAND64,
  GSBI_BUILT_IN_NAND128,
#endif
  GSBI_BUILT_IN_NANS,
  GSBI_BUILT_IN_NANSF,
  GSBI_BUILT_IN_NANSL,
  GSBI_BUILT_IN_NEARBYINT,
  GSBI_BUILT_IN_NEARBYINTF,
  GSBI_BUILT_IN_NEARBYINTL,
  GSBI_BUILT_IN_NEXTAFTER,
  GSBI_BUILT_IN_NEXTAFTERF,
  GSBI_BUILT_IN_NEXTAFTERL,
  GSBI_BUILT_IN_NEXTTOWARD,
  GSBI_BUILT_IN_NEXTTOWARDF,
  GSBI_BUILT_IN_NEXTTOWARDL,
  GSBI_BUILT_IN_POW,
  GSBI_BUILT_IN_POW10,
  GSBI_BUILT_IN_POW10F,
  GSBI_BUILT_IN_POW10L,
  GSBI_BUILT_IN_POWF,
  GSBI_BUILT_IN_POWI,
  GSBI_BUILT_IN_POWIF,
  GSBI_BUILT_IN_POWIL,
  GSBI_BUILT_IN_POWL,
  GSBI_BUILT_IN_REMAINDER,
  GSBI_BUILT_IN_REMAINDERF,
  GSBI_BUILT_IN_REMAINDERL,
  GSBI_BUILT_IN_REMQUO,
  GSBI_BUILT_IN_REMQUOF,
  GSBI_BUILT_IN_REMQUOL,
  GSBI_BUILT_IN_RINT,
  GSBI_BUILT_IN_RINTF,
  GSBI_BUILT_IN_RINTL,
  GSBI_BUILT_IN_ROUND,
  GSBI_BUILT_IN_ROUNDF,
  GSBI_BUILT_IN_ROUNDL,
  GSBI_BUILT_IN_SCALB,
  GSBI_BUILT_IN_SCALBF,
  GSBI_BUILT_IN_SCALBL,
  GSBI_BUILT_IN_SCALBLN,
  GSBI_BUILT_IN_SCALBLNF,
  GSBI_BUILT_IN_SCALBLNL,
  GSBI_BUILT_IN_SCALBN,
  GSBI_BUILT_IN_SCALBNF,
  GSBI_BUILT_IN_SCALBNL,
  GSBI_BUILT_IN_SIGNBIT,
  GSBI_BUILT_IN_SIGNBITF,
  GSBI_BUILT_IN_SIGNBITL,
  GSBI_BUILT_IN_SIGNIFICAND,
  GSBI_BUILT_IN_SIGNIFICANDF,
  GSBI_BUILT_IN_SIGNIFICANDL,
  GSBI_BUILT_IN_SIN,
  GSBI_BUILT_IN_SINCOS,
  GSBI_BUILT_IN_SINCOSF,
  GSBI_BUILT_IN_SINCOSL,
  GSBI_BUILT_IN_SINF,
  GSBI_BUILT_IN_SINH,
  GSBI_BUILT_IN_SINHF,
  GSBI_BUILT_IN_SINHL,
  GSBI_BUILT_IN_SINL,
  GSBI_BUILT_IN_SQRT,
  GSBI_BUILT_IN_SQRTF,
  GSBI_BUILT_IN_SQRTL,
  GSBI_BUILT_IN_TAN,
  GSBI_BUILT_IN_TANF,
  GSBI_BUILT_IN_TANH,
  GSBI_BUILT_IN_TANHF,
  GSBI_BUILT_IN_TANHL,
  GSBI_BUILT_IN_TANL,
  GSBI_BUILT_IN_TGAMMA,
  GSBI_BUILT_IN_TGAMMAF,
  GSBI_BUILT_IN_TGAMMAL,
  GSBI_BUILT_IN_TRUNC,
  GSBI_BUILT_IN_TRUNCF,
  GSBI_BUILT_IN_TRUNCL,
  GSBI_BUILT_IN_Y0,
  GSBI_BUILT_IN_Y0F,
  GSBI_BUILT_IN_Y0L,
  GSBI_BUILT_IN_Y1,
  GSBI_BUILT_IN_Y1F,
  GSBI_BUILT_IN_Y1L,
  GSBI_BUILT_IN_YN,
  GSBI_BUILT_IN_YNF,
  GSBI_BUILT_IN_YNL,
  GSBI_BUILT_IN_CABS,
  GSBI_BUILT_IN_CABSF,
  GSBI_BUILT_IN_CABSL,
  GSBI_BUILT_IN_CACOS,
  GSBI_BUILT_IN_CACOSF,
  GSBI_BUILT_IN_CACOSH,
  GSBI_BUILT_IN_CACOSHF,
  GSBI_BUILT_IN_CACOSHL,
  GSBI_BUILT_IN_CACOSL,
  GSBI_BUILT_IN_CARG,
  GSBI_BUILT_IN_CARGF,
  GSBI_BUILT_IN_CARGL,
  GSBI_BUILT_IN_CASIN,
  GSBI_BUILT_IN_CASINF,
  GSBI_BUILT_IN_CASINH,
  GSBI_BUILT_IN_CASINHF,
  GSBI_BUILT_IN_CASINHL,
  GSBI_BUILT_IN_CASINL,
  GSBI_BUILT_IN_CATAN,
  GSBI_BUILT_IN_CATANF,
  GSBI_BUILT_IN_CATANH,
  GSBI_BUILT_IN_CATANHF,
  GSBI_BUILT_IN_CATANHL,
  GSBI_BUILT_IN_CATANL,
  GSBI_BUILT_IN_CCOS,
  GSBI_BUILT_IN_CCOSF,
  GSBI_BUILT_IN_CCOSH,
  GSBI_BUILT_IN_CCOSHF,
  GSBI_BUILT_IN_CCOSHL,
  GSBI_BUILT_IN_CCOSL,
  GSBI_BUILT_IN_CEXP,
  GSBI_BUILT_IN_CEXPF,
  GSBI_BUILT_IN_CEXPL,
  GSBI_BUILT_IN_CIMAG,
  GSBI_BUILT_IN_CIMAGF,
  GSBI_BUILT_IN_CIMAGL,
  GSBI_BUILT_IN_CLOG,
  GSBI_BUILT_IN_CLOGF,
  GSBI_BUILT_IN_CLOGL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_CLOG10,
  GSBI_BUILT_IN_CLOG10F,
  GSBI_BUILT_IN_CLOG10L,
#endif
  GSBI_BUILT_IN_CONJ,
  GSBI_BUILT_IN_CONJF,
  GSBI_BUILT_IN_CONJL,
  GSBI_BUILT_IN_CPOW,
  GSBI_BUILT_IN_CPOWF,
  GSBI_BUILT_IN_CPOWL,
  GSBI_BUILT_IN_CPROJ,
  GSBI_BUILT_IN_CPROJF,
  GSBI_BUILT_IN_CPROJL,
  GSBI_BUILT_IN_CREAL,
  GSBI_BUILT_IN_CREALF,
  GSBI_BUILT_IN_CREALL,
  GSBI_BUILT_IN_CSIN,
  GSBI_BUILT_IN_CSINF,
  GSBI_BUILT_IN_CSINH,
  GSBI_BUILT_IN_CSINHF,
  GSBI_BUILT_IN_CSINHL,
  GSBI_BUILT_IN_CSINL,
  GSBI_BUILT_IN_CSQRT,
  GSBI_BUILT_IN_CSQRTF,
  GSBI_BUILT_IN_CSQRTL,
  GSBI_BUILT_IN_CTAN,
  GSBI_BUILT_IN_CTANF,
  GSBI_BUILT_IN_CTANH,
  GSBI_BUILT_IN_CTANHF,
  GSBI_BUILT_IN_CTANHL,
  GSBI_BUILT_IN_CTANL,
  GSBI_BUILT_IN_BCMP,
  GSBI_BUILT_IN_BCOPY,
  GSBI_BUILT_IN_BZERO,
  GSBI_BUILT_IN_INDEX,
  GSBI_BUILT_IN_MEMCMP,
  GSBI_BUILT_IN_MEMCPY,
  GSBI_BUILT_IN_MEMMOVE,
  GSBI_BUILT_IN_MEMPCPY,
  GSBI_BUILT_IN_MEMSET,
  GSBI_BUILT_IN_RINDEX,
  GSBI_BUILT_IN_STPCPY,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_STPNCPY,
  GSBI_BUILT_IN_STRCASECMP,
#endif
  GSBI_BUILT_IN_STRCAT,
  GSBI_BUILT_IN_STRCHR,
  GSBI_BUILT_IN_STRCMP,
  GSBI_BUILT_IN_STRCPY,
  GSBI_BUILT_IN_STRCSPN,
  GSBI_BUILT_IN_STRDUP,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_STRNDUP,
#endif
  GSBI_BUILT_IN_STRLEN,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_STRNCASECMP,
#endif
  GSBI_BUILT_IN_STRNCAT,
  GSBI_BUILT_IN_STRNCMP,
  GSBI_BUILT_IN_STRNCPY,
  GSBI_BUILT_IN_STRPBRK,
  GSBI_BUILT_IN_STRRCHR,
  GSBI_BUILT_IN_STRSPN,
  GSBI_BUILT_IN_STRSTR,
  GSBI_BUILT_IN_FPRINTF,
  GSBI_BUILT_IN_FPRINTF_UNLOCKED,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_PUTC,
  GSBI_BUILT_IN_PUTC_UNLOCKED,
#endif
  GSBI_BUILT_IN_FPUTC,
  GSBI_BUILT_IN_FPUTC_UNLOCKED,
  GSBI_BUILT_IN_FPUTS,
  GSBI_BUILT_IN_FPUTS_UNLOCKED,
  GSBI_BUILT_IN_FSCANF,
  GSBI_BUILT_IN_FWRITE,
  GSBI_BUILT_IN_FWRITE_UNLOCKED,
  GSBI_BUILT_IN_PRINTF,
  GSBI_BUILT_IN_PRINTF_UNLOCKED,
  GSBI_BUILT_IN_PUTCHAR,
  GSBI_BUILT_IN_PUTCHAR_UNLOCKED,
  GSBI_BUILT_IN_PUTS,
  GSBI_BUILT_IN_PUTS_UNLOCKED,
  GSBI_BUILT_IN_SCANF,
  GSBI_BUILT_IN_SNPRINTF,
  GSBI_BUILT_IN_SPRINTF,
  GSBI_BUILT_IN_SSCANF,
  GSBI_BUILT_IN_VFPRINTF,
  GSBI_BUILT_IN_VFSCANF,
  GSBI_BUILT_IN_VPRINTF,
  GSBI_BUILT_IN_VSCANF,
  GSBI_BUILT_IN_VSNPRINTF,
  GSBI_BUILT_IN_VSPRINTF,
  GSBI_BUILT_IN_VSSCANF,
  GSBI_BUILT_IN_ISALNUM,
  GSBI_BUILT_IN_ISALPHA,
  GSBI_BUILT_IN_ISASCII,
  GSBI_BUILT_IN_ISBLANK,
  GSBI_BUILT_IN_ISCNTRL,
  GSBI_BUILT_IN_ISDIGIT,
  GSBI_BUILT_IN_ISGRAPH,
  GSBI_BUILT_IN_ISLOWER,
  GSBI_BUILT_IN_ISPRINT,
  GSBI_BUILT_IN_ISPUNCT,
  GSBI_BUILT_IN_ISSPACE,
  GSBI_BUILT_IN_ISUPPER,
  GSBI_BUILT_IN_ISXDIGIT,
  GSBI_BUILT_IN_TOASCII,
  GSBI_BUILT_IN_TOLOWER,
  GSBI_BUILT_IN_TOUPPER,
  GSBI_BUILT_IN_ISWALNUM,
  GSBI_BUILT_IN_ISWALPHA,
  GSBI_BUILT_IN_ISWBLANK,
  GSBI_BUILT_IN_ISWCNTRL,
  GSBI_BUILT_IN_ISWDIGIT,
  GSBI_BUILT_IN_ISWGRAPH,
  GSBI_BUILT_IN_ISWLOWER,
  GSBI_BUILT_IN_ISWPRINT,
  GSBI_BUILT_IN_ISWPUNCT,
  GSBI_BUILT_IN_ISWSPACE,
  GSBI_BUILT_IN_ISWUPPER,
  GSBI_BUILT_IN_ISWXDIGIT,
  GSBI_BUILT_IN_TOWLOWER,
  GSBI_BUILT_IN_TOWUPPER,
  GSBI_BUILT_IN_ABORT,
  GSBI_BUILT_IN_ABS,
  GSBI_BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
  GSBI_BUILT_IN_ALLOCA,
  GSBI_BUILT_IN_APPLY,
  GSBI_BUILT_IN_APPLY_ARGS,
  GSBI_BUILT_IN_ARGS_INFO,
  GSBI_BUILT_IN_CALLOC,
  GSBI_BUILT_IN_CLASSIFY_TYPE,
  GSBI_BUILT_IN_CLZ,
  GSBI_BUILT_IN_CLZIMAX,
  GSBI_BUILT_IN_CLZL,
  GSBI_BUILT_IN_CLZLL,
  GSBI_BUILT_IN_CONSTANT_P,
  GSBI_BUILT_IN_CTZ,
  GSBI_BUILT_IN_CTZIMAX,
  GSBI_BUILT_IN_CTZL,
  GSBI_BUILT_IN_CTZLL,
  GSBI_BUILT_IN_DCGETTEXT,
  GSBI_BUILT_IN_DGETTEXT,
  GSBI_BUILT_IN_DWARF_CFA,
  GSBI_BUILT_IN_DWARF_SP_COLUMN,
  GSBI_BUILT_IN_EH_RETURN,
  GSBI_BUILT_IN_EH_RETURN_DATA_REGNO,
  GSBI_BUILT_IN_EXECL,
  GSBI_BUILT_IN_EXECLP,
  GSBI_BUILT_IN_EXECLE,
  GSBI_BUILT_IN_EXECV,
  GSBI_BUILT_IN_EXECVP,
  GSBI_BUILT_IN_EXECVE,
  GSBI_BUILT_IN_EXIT,
  GSBI_BUILT_IN_EXPECT,
  GSBI_BUILT_IN_EXTEND_POINTER,
  GSBI_BUILT_IN_EXTRACT_RETURN_ADDR,
  GSBI_BUILT_IN_FFS,
  GSBI_BUILT_IN_FFSIMAX,
  GSBI_BUILT_IN_FFSL,
  GSBI_BUILT_IN_FFSLL,
  GSBI_BUILT_IN_FORK,
  GSBI_BUILT_IN_FRAME_ADDRESS,
  GSBI_BUILT_IN_FROB_RETURN_ADDR,
  GSBI_BUILT_IN_GETTEXT,
  GSBI_BUILT_IN_IMAXABS,
  GSBI_BUILT_IN_INIT_DWARF_REG_SIZES,
  GSBI_BUILT_IN_FINITE,
  GSBI_BUILT_IN_FINITEF,
  GSBI_BUILT_IN_FINITEL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_FINITED32,
  GSBI_BUILT_IN_FINITED64,
  GSBI_BUILT_IN_FINITED128,
#endif
  GSBI_BUILT_IN_ISINF,
  GSBI_BUILT_IN_ISINFF,
  GSBI_BUILT_IN_ISINFL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_ISINFD32,
  GSBI_BUILT_IN_ISINFD64,
  GSBI_BUILT_IN_ISINFD128,
#endif
  GSBI_BUILT_IN_ISNAN,
  GSBI_BUILT_IN_ISNANF,
  GSBI_BUILT_IN_ISNANL,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_ISNAND32,
  GSBI_BUILT_IN_ISNAND64,
  GSBI_BUILT_IN_ISNAND128,
#endif
  GSBI_BUILT_IN_ISGREATER,
  GSBI_BUILT_IN_ISGREATEREQUAL,
  GSBI_BUILT_IN_ISLESS,
  GSBI_BUILT_IN_ISLESSEQUAL,
  GSBI_BUILT_IN_ISLESSGREATER,
  GSBI_BUILT_IN_ISUNORDERED,
  GSBI_BUILT_IN_LABS,
  GSBI_BUILT_IN_LLABS,
  GSBI_BUILT_IN_LONGJMP,
  GSBI_BUILT_IN_MALLOC,
  GSBI_BUILT_IN_NEXT_ARG,
  GSBI_BUILT_IN_PARITY,
  GSBI_BUILT_IN_PARITYIMAX,
  GSBI_BUILT_IN_PARITYL,
  GSBI_BUILT_IN_PARITYLL,
  GSBI_BUILT_IN_POPCOUNT,
  GSBI_BUILT_IN_POPCOUNTIMAX,
  GSBI_BUILT_IN_POPCOUNTL,
  GSBI_BUILT_IN_POPCOUNTLL,
  GSBI_BUILT_IN_PREFETCH,
  GSBI_BUILT_IN_RETURN,
  GSBI_BUILT_IN_RETURN_ADDRESS,
  GSBI_BUILT_IN_SAVEREGS,
  GSBI_BUILT_IN_SETJMP,
  GSBI_BUILT_IN_STDARG_START,
  GSBI_BUILT_IN_STRFMON,
  GSBI_BUILT_IN_STRFTIME,
  GSBI_BUILT_IN_TRAP,
  GSBI_BUILT_IN_UNWIND_INIT,
  GSBI_BUILT_IN_UPDATE_SETJMP_BUF,
  GSBI_BUILT_IN_VA_COPY,
  GSBI_BUILT_IN_VA_END,
  GSBI_BUILT_IN_VA_START,
  GSBI_BUILT_IN__EXIT,
  GSBI_BUILT_IN__EXIT2,
  GSBI_BUILT_IN_INIT_TRAMPOLINE,
  GSBI_BUILT_IN_ADJUST_TRAMPOLINE,
  GSBI_BUILT_IN_NONLOCAL_GOTO,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_SETJMP_SETUP,
  GSBI_BUILT_IN_SETJMP_DISPATCHER,
  GSBI_BUILT_IN_SETJMP_RECEIVER,
#endif
  GSBI_BUILT_IN_STACK_SAVE,
  GSBI_BUILT_IN_STACK_RESTORE,
#ifdef FE_GNU_4_2_0
  GSBI_BUILT_IN_OBJECT_SIZE,
  GSBI_BUILT_IN_MEMCPY_CHK,
  GSBI_BUILT_IN_MEMMOVE_CHK,
  GSBI_BUILT_IN_MEMPCPY_CHK,
  GSBI_BUILT_IN_MEMSET_CHK,
  GSBI_BUILT_IN_STPCPY_CHK,
  GSBI_BUILT_IN_STRCAT_CHK,
  GSBI_BUILT_IN_STRCPY_CHK,
  GSBI_BUILT_IN_STRNCAT_CHK,
  GSBI_BUILT_IN_STRNCPY_CHK,
  GSBI_BUILT_IN_SNPRINTF_CHK,
  GSBI_BUILT_IN_SPRINTF_CHK,
  GSBI_BUILT_IN_VSNPRINTF_CHK,
  GSBI_BUILT_IN_VSPRINTF_CHK,
  GSBI_BUILT_IN_FPRINTF_CHK,
  GSBI_BUILT_IN_PRINTF_CHK,
  GSBI_BUILT_IN_VFPRINTF_CHK,
  GSBI_BUILT_IN_VPRINTF_CHK,
#endif
  GSBI_BUILT_IN_PROFILE_FUNC_ENTER,
  GSBI_BUILT_IN_PROFILE_FUNC_EXIT,
#ifdef FE_GNU_4_2_0
  /* sync-builtins.def builtins begin */
  GSBI_BUILT_IN_FETCH_AND_ADD_N,
  GSBI_BUILT_IN_FETCH_AND_ADD_1,
  GSBI_BUILT_IN_FETCH_AND_ADD_2,
  GSBI_BUILT_IN_FETCH_AND_ADD_4,
  GSBI_BUILT_IN_FETCH_AND_ADD_8,
  GSBI_BUILT_IN_FETCH_AND_ADD_16,
  GSBI_BUILT_IN_FETCH_AND_SUB_N,
  GSBI_BUILT_IN_FETCH_AND_SUB_1,
  GSBI_BUILT_IN_FETCH_AND_SUB_2,
  GSBI_BUILT_IN_FETCH_AND_SUB_4,
  GSBI_BUILT_IN_FETCH_AND_SUB_8,
  GSBI_BUILT_IN_FETCH_AND_SUB_16,
  GSBI_BUILT_IN_FETCH_AND_OR_N,
  GSBI_BUILT_IN_FETCH_AND_OR_1,
  GSBI_BUILT_IN_FETCH_AND_OR_2,
  GSBI_BUILT_IN_FETCH_AND_OR_4,
  GSBI_BUILT_IN_FETCH_AND_OR_8,
  GSBI_BUILT_IN_FETCH_AND_OR_16,
  GSBI_BUILT_IN_FETCH_AND_AND_N,
  GSBI_BUILT_IN_FETCH_AND_AND_1,
  GSBI_BUILT_IN_FETCH_AND_AND_2,
  GSBI_BUILT_IN_FETCH_AND_AND_4,
  GSBI_BUILT_IN_FETCH_AND_AND_8,
  GSBI_BUILT_IN_FETCH_AND_AND_16,
  GSBI_BUILT_IN_FETCH_AND_XOR_N,
  GSBI_BUILT_IN_FETCH_AND_XOR_1,
  GSBI_BUILT_IN_FETCH_AND_XOR_2,
  GSBI_BUILT_IN_FETCH_AND_XOR_4,
  GSBI_BUILT_IN_FETCH_AND_XOR_8,
  GSBI_BUILT_IN_FETCH_AND_XOR_16,
  GSBI_BUILT_IN_FETCH_AND_NAND_N,
  GSBI_BUILT_IN_FETCH_AND_NAND_1,
  GSBI_BUILT_IN_FETCH_AND_NAND_2,
  GSBI_BUILT_IN_FETCH_AND_NAND_4,
  GSBI_BUILT_IN_FETCH_AND_NAND_8,
  GSBI_BUILT_IN_FETCH_AND_NAND_16,
  GSBI_BUILT_IN_ADD_AND_FETCH_N,
  GSBI_BUILT_IN_ADD_AND_FETCH_1,
  GSBI_BUILT_IN_ADD_AND_FETCH_2,
  GSBI_BUILT_IN_ADD_AND_FETCH_4,
  GSBI_BUILT_IN_ADD_AND_FETCH_8,
  GSBI_BUILT_IN_ADD_AND_FETCH_16,
  GSBI_BUILT_IN_SUB_AND_FETCH_N,
  GSBI_BUILT_IN_SUB_AND_FETCH_1,
  GSBI_BUILT_IN_SUB_AND_FETCH_2,
  GSBI_BUILT_IN_SUB_AND_FETCH_4,
  GSBI_BUILT_IN_SUB_AND_FETCH_8,
  GSBI_BUILT_IN_SUB_AND_FETCH_16,
  GSBI_BUILT_IN_OR_AND_FETCH_N,
  GSBI_BUILT_IN_OR_AND_FETCH_1,
  GSBI_BUILT_IN_OR_AND_FETCH_2,
  GSBI_BUILT_IN_OR_AND_FETCH_4,
  GSBI_BUILT_IN_OR_AND_FETCH_8,
  GSBI_BUILT_IN_OR_AND_FETCH_16,
  GSBI_BUILT_IN_AND_AND_FETCH_N,
  GSBI_BUILT_IN_AND_AND_FETCH_1,
  GSBI_BUILT_IN_AND_AND_FETCH_2,
  GSBI_BUILT_IN_AND_AND_FETCH_4,
  GSBI_BUILT_IN_AND_AND_FETCH_8,
  GSBI_BUILT_IN_AND_AND_FETCH_16,
  GSBI_BUILT_IN_XOR_AND_FETCH_N,
  GSBI_BUILT_IN_XOR_AND_FETCH_1,
  GSBI_BUILT_IN_XOR_AND_FETCH_2,
  GSBI_BUILT_IN_XOR_AND_FETCH_4,
  GSBI_BUILT_IN_XOR_AND_FETCH_8,
  GSBI_BUILT_IN_XOR_AND_FETCH_16,
  GSBI_BUILT_IN_NAND_AND_FETCH_N,
  GSBI_BUILT_IN_NAND_AND_FETCH_1,
  GSBI_BUILT_IN_NAND_AND_FETCH_2,
  GSBI_BUILT_IN_NAND_AND_FETCH_4,
  GSBI_BUILT_IN_NAND_AND_FETCH_8,
  GSBI_BUILT_IN_NAND_AND_FETCH_16,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_N,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_1,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_2,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_4,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_8,
  GSBI_BUILT_IN_BOOL_COMPARE_AND_SWAP_16,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_N,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_1,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_2,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_4,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_8,
  GSBI_BUILT_IN_VAL_COMPARE_AND_SWAP_16,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_N,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_1,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_2,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_4,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_8,
  GSBI_BUILT_IN_LOCK_TEST_AND_SET_16,
  GSBI_BUILT_IN_LOCK_RELEASE_N,
  GSBI_BUILT_IN_LOCK_RELEASE_1,
  GSBI_BUILT_IN_LOCK_RELEASE_2,
  GSBI_BUILT_IN_LOCK_RELEASE_4,
  GSBI_BUILT_IN_LOCK_RELEASE_8,
  GSBI_BUILT_IN_LOCK_RELEASE_16,
  GSBI_BUILT_IN_SYNCHRONIZE,
  /* sync-builtins.def builtins end */

  /* omp-builtins.def builtins begin */
  GSBI_BUILT_IN_OMP_GET_THREAD_NUM,
  GSBI_BUILT_IN_OMP_GET_NUM_THREADS,
  GSBI_BUILT_IN_GOMP_ATOMIC_START,
  GSBI_BUILT_IN_GOMP_ATOMIC_END,
  GSBI_BUILT_IN_GOMP_BARRIER,
  GSBI_BUILT_IN_GOMP_CRITICAL_START,
  GSBI_BUILT_IN_GOMP_CRITICAL_END,
  GSBI_BUILT_IN_GOMP_CRITICAL_NAME_START,
  GSBI_BUILT_IN_GOMP_CRITICAL_NAME_END,
  GSBI_BUILT_IN_GOMP_LOOP_STATIC_START,
  GSBI_BUILT_IN_GOMP_LOOP_DYNAMIC_START,
  GSBI_BUILT_IN_GOMP_LOOP_GUIDED_START,
  GSBI_BUILT_IN_GOMP_LOOP_RUNTIME_START,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
  GSBI_BUILT_IN_GOMP_LOOP_STATIC_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_GUIDED_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_RUNTIME_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
  GSBI_BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
  GSBI_BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
  GSBI_BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
  GSBI_BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
  GSBI_BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
  GSBI_BUILT_IN_GOMP_LOOP_END,
  GSBI_BUILT_IN_GOMP_LOOP_END_NOWAIT,
  GSBI_BUILT_IN_GOMP_ORDERED_START,
  GSBI_BUILT_IN_GOMP_ORDERED_END,
  GSBI_BUILT_IN_GOMP_PARALLEL_START,
  GSBI_BUILT_IN_GOMP_PARALLEL_END,
  GSBI_BUILT_IN_GOMP_SECTIONS_START,
  GSBI_BUILT_IN_GOMP_SECTIONS_NEXT,
  GSBI_BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
  GSBI_BUILT_IN_GOMP_SECTIONS_END,
  GSBI_BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
  GSBI_BUILT_IN_GOMP_SINGLE_START,
  GSBI_BUILT_IN_GOMP_SINGLE_COPY_START,
  GSBI_BUILT_IN_GOMP_SINGLE_COPY_END,
  /* omp-builtins.def builtins end */
#endif
  GSBI_BUILT_IN_COMPLEX_MUL_MIN,
  GSBI_BUILT_IN_COMPLEX_MUL_MAX,
  GSBI_BUILT_IN_COMPLEX_DIV_MIN,
  GSBI_BUILT_IN_COMPLEX_DIV_MAX,

  GSBI_END_BUILTINS,

} gsbi_t;

extern gs_string_t gsbi_name (gsbi_t code);

typedef enum gsbi_class {

 GSBI_CLASS_NOT_BUILT_IN,
 GSBI_CLASS_BUILT_IN_FRONTEND,
 GSBI_CLASS_BUILT_IN_MD,
 GSBI_CLASS_BUILT_IN_NORMAL,

} gsbi_class_t;

extern gs_string_t gsbi_class_name (gsbi_class_t class_code);

typedef enum gsbi_ts {
  GSBI_IX86_BUILTIN_ADDPS = GSBI_END_BUILTINS + 1000,
  GSBI_IX86_BUILTIN_ADDSS,
  GSBI_IX86_BUILTIN_DIVPS,
  GSBI_IX86_BUILTIN_DIVSS,
  GSBI_IX86_BUILTIN_MULPS,
  GSBI_IX86_BUILTIN_MULSS,
  GSBI_IX86_BUILTIN_SUBPS,
  GSBI_IX86_BUILTIN_SUBSS,
  GSBI_IX86_BUILTIN_CMPEQPS,
  GSBI_IX86_BUILTIN_CMPLTPS,
  GSBI_IX86_BUILTIN_CMPLEPS,
  GSBI_IX86_BUILTIN_CMPGTPS,
  GSBI_IX86_BUILTIN_CMPGEPS,
  GSBI_IX86_BUILTIN_CMPNEQPS,
  GSBI_IX86_BUILTIN_CMPNLTPS,
  GSBI_IX86_BUILTIN_CMPNLEPS,
  GSBI_IX86_BUILTIN_CMPNGTPS,
  GSBI_IX86_BUILTIN_CMPNGEPS,
  GSBI_IX86_BUILTIN_CMPORDPS,
  GSBI_IX86_BUILTIN_CMPUNORDPS,
  GSBI_IX86_BUILTIN_CMPNEPS,
  GSBI_IX86_BUILTIN_CMPEQSS,
  GSBI_IX86_BUILTIN_CMPLTSS,
  GSBI_IX86_BUILTIN_CMPLESS,
  GSBI_IX86_BUILTIN_CMPNEQSS,
  GSBI_IX86_BUILTIN_CMPNLTSS,
  GSBI_IX86_BUILTIN_CMPNLESS,
  GSBI_IX86_BUILTIN_CMPNGTSS,
  GSBI_IX86_BUILTIN_CMPNGESS,
  GSBI_IX86_BUILTIN_CMPORDSS,
  GSBI_IX86_BUILTIN_CMPUNORDSS,
  GSBI_IX86_BUILTIN_CMPNESS,
  GSBI_IX86_BUILTIN_COMIEQSS,
  GSBI_IX86_BUILTIN_COMILTSS,
  GSBI_IX86_BUILTIN_COMILESS,
  GSBI_IX86_BUILTIN_COMIGTSS,
  GSBI_IX86_BUILTIN_COMIGESS,
  GSBI_IX86_BUILTIN_COMINEQSS,
  GSBI_IX86_BUILTIN_UCOMIEQSS,
  GSBI_IX86_BUILTIN_UCOMILTSS,
  GSBI_IX86_BUILTIN_UCOMILESS,
  GSBI_IX86_BUILTIN_UCOMIGTSS,
  GSBI_IX86_BUILTIN_UCOMIGESS,
  GSBI_IX86_BUILTIN_UCOMINEQSS,
  GSBI_IX86_BUILTIN_CVTPI2PS,
  GSBI_IX86_BUILTIN_CVTPS2PI,
  GSBI_IX86_BUILTIN_CVTSI2SS,
  GSBI_IX86_BUILTIN_CVTSI642SS,
  GSBI_IX86_BUILTIN_CVTSS2SI,
  GSBI_IX86_BUILTIN_CVTSS2SI64,
  GSBI_IX86_BUILTIN_CVTTPS2PI,
  GSBI_IX86_BUILTIN_CVTTSS2SI,
  GSBI_IX86_BUILTIN_CVTTSS2SI64,
  GSBI_IX86_BUILTIN_MAXPS,
  GSBI_IX86_BUILTIN_MAXSS,
  GSBI_IX86_BUILTIN_MINPS,
  GSBI_IX86_BUILTIN_MINSS,
  GSBI_IX86_BUILTIN_LOADUPS,
  GSBI_IX86_BUILTIN_STOREUPS,
  GSBI_IX86_BUILTIN_MOVSS,
  GSBI_IX86_BUILTIN_MOVHLPS,
  GSBI_IX86_BUILTIN_MOVLHPS,
  GSBI_IX86_BUILTIN_LOADHPS,
  GSBI_IX86_BUILTIN_LOADLPS,
  GSBI_IX86_BUILTIN_STOREHPS,
  GSBI_IX86_BUILTIN_STORELPS,
  GSBI_IX86_BUILTIN_MASKMOVQ,
  GSBI_IX86_BUILTIN_MOVMSKPS,
  GSBI_IX86_BUILTIN_PMOVMSKB,
  GSBI_IX86_BUILTIN_MOVNTPS,
  GSBI_IX86_BUILTIN_MOVNTQ,
  GSBI_IX86_BUILTIN_LOADDQU,
  GSBI_IX86_BUILTIN_STOREDQU,
  GSBI_IX86_BUILTIN_PACKSSWB,
  GSBI_IX86_BUILTIN_PACKSSDW,
  GSBI_IX86_BUILTIN_PACKUSWB,
  GSBI_IX86_BUILTIN_PADDB,
  GSBI_IX86_BUILTIN_PADDW,
  GSBI_IX86_BUILTIN_PADDD,
  GSBI_IX86_BUILTIN_PADDQ,
  GSBI_IX86_BUILTIN_PADDSB,
  GSBI_IX86_BUILTIN_PADDSW,
  GSBI_IX86_BUILTIN_PADDUSB,
  GSBI_IX86_BUILTIN_PADDUSW,
  GSBI_IX86_BUILTIN_PSUBB,
  GSBI_IX86_BUILTIN_PSUBW,
  GSBI_IX86_BUILTIN_PSUBD,
  GSBI_IX86_BUILTIN_PSUBQ,
  GSBI_IX86_BUILTIN_PSUBSB,
  GSBI_IX86_BUILTIN_PSUBSW,
  GSBI_IX86_BUILTIN_PSUBUSB,
  GSBI_IX86_BUILTIN_PSUBUSW,
  GSBI_IX86_BUILTIN_PAND,
  GSBI_IX86_BUILTIN_PANDN,
  GSBI_IX86_BUILTIN_POR,
  GSBI_IX86_BUILTIN_PXOR,
  GSBI_IX86_BUILTIN_PAVGB,
  GSBI_IX86_BUILTIN_PAVGW,
  GSBI_IX86_BUILTIN_PCMPEQB,
  GSBI_IX86_BUILTIN_PCMPEQW,
  GSBI_IX86_BUILTIN_PCMPEQD,
  GSBI_IX86_BUILTIN_PCMPGTB,
  GSBI_IX86_BUILTIN_PCMPGTW,
  GSBI_IX86_BUILTIN_PCMPGTD,
  GSBI_IX86_BUILTIN_PMADDWD,
  GSBI_IX86_BUILTIN_PMAXSW,
  GSBI_IX86_BUILTIN_PMAXUB,
  GSBI_IX86_BUILTIN_PMINSW,
  GSBI_IX86_BUILTIN_PMINUB,
  GSBI_IX86_BUILTIN_PMULHUW,
  GSBI_IX86_BUILTIN_PMULHW,
  GSBI_IX86_BUILTIN_PMULLW,
  GSBI_IX86_BUILTIN_PSADBW,
  GSBI_IX86_BUILTIN_PSHUFW,
  GSBI_IX86_BUILTIN_PSLLW,
  GSBI_IX86_BUILTIN_PSLLD,
  GSBI_IX86_BUILTIN_PSLLQ,
  GSBI_IX86_BUILTIN_PSRAW,
  GSBI_IX86_BUILTIN_PSRAD,
  GSBI_IX86_BUILTIN_PSRLW,
  GSBI_IX86_BUILTIN_PSRLD,
  GSBI_IX86_BUILTIN_PSRLQ,
  GSBI_IX86_BUILTIN_PSLLWI,
  GSBI_IX86_BUILTIN_PSLLDI,
  GSBI_IX86_BUILTIN_PSLLQI,
  GSBI_IX86_BUILTIN_PSRAWI,
  GSBI_IX86_BUILTIN_PSRADI,
  GSBI_IX86_BUILTIN_PSRLWI,
  GSBI_IX86_BUILTIN_PSRLDI,
  GSBI_IX86_BUILTIN_PSRLQI,
  GSBI_IX86_BUILTIN_PUNPCKHBW,
  GSBI_IX86_BUILTIN_PUNPCKHWD,
  GSBI_IX86_BUILTIN_PUNPCKHDQ,
  GSBI_IX86_BUILTIN_PUNPCKLBW,
  GSBI_IX86_BUILTIN_PUNPCKLWD,
  GSBI_IX86_BUILTIN_PUNPCKLDQ,
  GSBI_IX86_BUILTIN_SHUFPS,
  GSBI_IX86_BUILTIN_RCPPS,
  GSBI_IX86_BUILTIN_RCPSS,
  GSBI_IX86_BUILTIN_RSQRTPS,
  GSBI_IX86_BUILTIN_RSQRTSS,
  GSBI_IX86_BUILTIN_SQRTPS,
  GSBI_IX86_BUILTIN_SQRTSS,
  GSBI_IX86_BUILTIN_UNPCKHPS,
  GSBI_IX86_BUILTIN_UNPCKLPS,
  GSBI_IX86_BUILTIN_ANDPS,
  GSBI_IX86_BUILTIN_ANDNPS,
  GSBI_IX86_BUILTIN_ORPS,
  GSBI_IX86_BUILTIN_XORPS,
  GSBI_IX86_BUILTIN_EMMS,
  GSBI_IX86_BUILTIN_LDMXCSR,
  GSBI_IX86_BUILTIN_STMXCSR,
  GSBI_IX86_BUILTIN_SFENCE,
  GSBI_IX86_BUILTIN_FEMMS,
  GSBI_IX86_BUILTIN_PAVGUSB,
  GSBI_IX86_BUILTIN_PF2ID,
  GSBI_IX86_BUILTIN_PFACC,
  GSBI_IX86_BUILTIN_PFADD,
  GSBI_IX86_BUILTIN_PFCMPEQ,
  GSBI_IX86_BUILTIN_PFCMPGE,
  GSBI_IX86_BUILTIN_PFCMPGT,
  GSBI_IX86_BUILTIN_PFMAX,
  GSBI_IX86_BUILTIN_PFMIN,
  GSBI_IX86_BUILTIN_PFMUL,
  GSBI_IX86_BUILTIN_PFRCP,
  GSBI_IX86_BUILTIN_PFRCPIT1,
  GSBI_IX86_BUILTIN_PFRCPIT2,
  GSBI_IX86_BUILTIN_PFRSQIT1,
  GSBI_IX86_BUILTIN_PFRSQRT,
  GSBI_IX86_BUILTIN_PFSUB,
  GSBI_IX86_BUILTIN_PFSUBR,
  GSBI_IX86_BUILTIN_PI2FD,
  GSBI_IX86_BUILTIN_PMULHRW,
  GSBI_IX86_BUILTIN_PF2IW,
  GSBI_IX86_BUILTIN_PFNACC,
  GSBI_IX86_BUILTIN_PFPNACC,
  GSBI_IX86_BUILTIN_PI2FW,
  GSBI_IX86_BUILTIN_PSWAPDSI,
  GSBI_IX86_BUILTIN_PSWAPDSF,
  GSBI_IX86_BUILTIN_ADDPD,
  GSBI_IX86_BUILTIN_ADDSD,
  GSBI_IX86_BUILTIN_DIVPD,
  GSBI_IX86_BUILTIN_DIVSD,
  GSBI_IX86_BUILTIN_MULPD,
  GSBI_IX86_BUILTIN_MULSD,
  GSBI_IX86_BUILTIN_SUBPD,
  GSBI_IX86_BUILTIN_SUBSD,
  GSBI_IX86_BUILTIN_CMPEQPD,
  GSBI_IX86_BUILTIN_CMPLTPD,
  GSBI_IX86_BUILTIN_CMPLEPD,
  GSBI_IX86_BUILTIN_CMPGTPD,
  GSBI_IX86_BUILTIN_CMPGEPD,
  GSBI_IX86_BUILTIN_CMPNEQPD,
  GSBI_IX86_BUILTIN_CMPNLTPD,
  GSBI_IX86_BUILTIN_CMPNLEPD,
  GSBI_IX86_BUILTIN_CMPNGTPD,
  GSBI_IX86_BUILTIN_CMPNGEPD,
  GSBI_IX86_BUILTIN_CMPORDPD,
  GSBI_IX86_BUILTIN_CMPUNORDPD,
  GSBI_IX86_BUILTIN_CMPNEPD,
  GSBI_IX86_BUILTIN_CMPEQSD,
  GSBI_IX86_BUILTIN_CMPLTSD,
  GSBI_IX86_BUILTIN_CMPLESD,
  GSBI_IX86_BUILTIN_CMPNEQSD,
  GSBI_IX86_BUILTIN_CMPNLTSD,
  GSBI_IX86_BUILTIN_CMPNLESD,
  GSBI_IX86_BUILTIN_CMPORDSD,
  GSBI_IX86_BUILTIN_CMPUNORDSD,
  GSBI_IX86_BUILTIN_CMPNESD,
  GSBI_IX86_BUILTIN_COMIEQSD,
  GSBI_IX86_BUILTIN_COMILTSD,
  GSBI_IX86_BUILTIN_COMILESD,
  GSBI_IX86_BUILTIN_COMIGTSD,
  GSBI_IX86_BUILTIN_COMIGESD,
  GSBI_IX86_BUILTIN_COMINEQSD,
  GSBI_IX86_BUILTIN_UCOMIEQSD,
  GSBI_IX86_BUILTIN_UCOMILTSD,
  GSBI_IX86_BUILTIN_UCOMILESD,
  GSBI_IX86_BUILTIN_UCOMIGTSD,
  GSBI_IX86_BUILTIN_UCOMIGESD,
  GSBI_IX86_BUILTIN_UCOMINEQSD,
  GSBI_IX86_BUILTIN_MAXPD,
  GSBI_IX86_BUILTIN_MAXSD,
  GSBI_IX86_BUILTIN_MINPD,
  GSBI_IX86_BUILTIN_MINSD,
  GSBI_IX86_BUILTIN_ANDPD,
  GSBI_IX86_BUILTIN_ANDNPD,
  GSBI_IX86_BUILTIN_ORPD,
  GSBI_IX86_BUILTIN_XORPD,
  GSBI_IX86_BUILTIN_SQRTPD,
  GSBI_IX86_BUILTIN_SQRTSD,
  GSBI_IX86_BUILTIN_UNPCKHPD,
  GSBI_IX86_BUILTIN_UNPCKLPD,
  GSBI_IX86_BUILTIN_SHUFPD,
  GSBI_IX86_BUILTIN_LOADUPD,
  GSBI_IX86_BUILTIN_STOREUPD,
  GSBI_IX86_BUILTIN_MOVSD,
  GSBI_IX86_BUILTIN_LOADHPD,
  GSBI_IX86_BUILTIN_LOADLPD,
  GSBI_IX86_BUILTIN_CVTDQ2PD,
  GSBI_IX86_BUILTIN_CVTDQ2PS,
  GSBI_IX86_BUILTIN_CVTPD2DQ,
  GSBI_IX86_BUILTIN_CVTPD2PI,
  GSBI_IX86_BUILTIN_CVTPD2PS,
  GSBI_IX86_BUILTIN_CVTTPD2DQ,
  GSBI_IX86_BUILTIN_CVTTPD2PI,
  GSBI_IX86_BUILTIN_CVTPI2PD,
  GSBI_IX86_BUILTIN_CVTSI2SD,
  GSBI_IX86_BUILTIN_CVTSI642SD,
  GSBI_IX86_BUILTIN_CVTSD2SI,
  GSBI_IX86_BUILTIN_CVTSD2SI64,
  GSBI_IX86_BUILTIN_CVTSD2SS,
  GSBI_IX86_BUILTIN_CVTSS2SD,
  GSBI_IX86_BUILTIN_CVTTSD2SI,
  GSBI_IX86_BUILTIN_CVTTSD2SI64,
  GSBI_IX86_BUILTIN_CVTPS2DQ,
  GSBI_IX86_BUILTIN_CVTPS2PD,
  GSBI_IX86_BUILTIN_CVTTPS2DQ,
  GSBI_IX86_BUILTIN_MOVNTI,
  GSBI_IX86_BUILTIN_MOVNTPD,
  GSBI_IX86_BUILTIN_MOVNTDQ,
  GSBI_IX86_BUILTIN_MASKMOVDQU,
  GSBI_IX86_BUILTIN_MOVMSKPD,
  GSBI_IX86_BUILTIN_PMOVMSKB128,
  GSBI_IX86_BUILTIN_PACKSSWB128,
  GSBI_IX86_BUILTIN_PACKSSDW128,
  GSBI_IX86_BUILTIN_PACKUSWB128,
  GSBI_IX86_BUILTIN_PADDB128,
  GSBI_IX86_BUILTIN_PADDW128,
  GSBI_IX86_BUILTIN_PADDD128,
  GSBI_IX86_BUILTIN_PADDQ128,
  GSBI_IX86_BUILTIN_PADDSB128,
  GSBI_IX86_BUILTIN_PADDSW128,
  GSBI_IX86_BUILTIN_PADDUSB128,
  GSBI_IX86_BUILTIN_PADDUSW128,
  GSBI_IX86_BUILTIN_PSUBB128,
  GSBI_IX86_BUILTIN_PSUBW128,
  GSBI_IX86_BUILTIN_PSUBD128,
  GSBI_IX86_BUILTIN_PSUBQ128,
  GSBI_IX86_BUILTIN_PSUBSB128,
  GSBI_IX86_BUILTIN_PSUBSW128,
  GSBI_IX86_BUILTIN_PSUBUSB128,
  GSBI_IX86_BUILTIN_PSUBUSW128,
  GSBI_IX86_BUILTIN_PAND128,
  GSBI_IX86_BUILTIN_PANDN128,
  GSBI_IX86_BUILTIN_POR128,
  GSBI_IX86_BUILTIN_PXOR128,
  GSBI_IX86_BUILTIN_PAVGB128,
  GSBI_IX86_BUILTIN_PAVGW128,
  GSBI_IX86_BUILTIN_PCMPEQB128,
  GSBI_IX86_BUILTIN_PCMPEQW128,
  GSBI_IX86_BUILTIN_PCMPEQD128,
  GSBI_IX86_BUILTIN_PCMPGTB128,
  GSBI_IX86_BUILTIN_PCMPGTW128,
  GSBI_IX86_BUILTIN_PCMPGTD128,
  GSBI_IX86_BUILTIN_PMADDWD128,
  GSBI_IX86_BUILTIN_PMAXSW128,
  GSBI_IX86_BUILTIN_PMAXUB128,
  GSBI_IX86_BUILTIN_PMINSW128,
  GSBI_IX86_BUILTIN_PMINUB128,
  GSBI_IX86_BUILTIN_PMULUDQ,
  GSBI_IX86_BUILTIN_PMULUDQ128,
  GSBI_IX86_BUILTIN_PMULHUW128,
  GSBI_IX86_BUILTIN_PMULHW128,
  GSBI_IX86_BUILTIN_PMULLW128,
  GSBI_IX86_BUILTIN_PSADBW128,
  GSBI_IX86_BUILTIN_PSHUFHW,
  GSBI_IX86_BUILTIN_PSHUFLW,
  GSBI_IX86_BUILTIN_PSHUFD,
  GSBI_IX86_BUILTIN_PSLLW128,
  GSBI_IX86_BUILTIN_PSLLD128,
  GSBI_IX86_BUILTIN_PSLLQ128,
  GSBI_IX86_BUILTIN_PSRAW128,
  GSBI_IX86_BUILTIN_PSRAD128,
  GSBI_IX86_BUILTIN_PSRLW128,
  GSBI_IX86_BUILTIN_PSRLD128,
  GSBI_IX86_BUILTIN_PSRLQ128,
  GSBI_IX86_BUILTIN_PSLLDQI128,
  GSBI_IX86_BUILTIN_PSLLWI128,
  GSBI_IX86_BUILTIN_PSLLDI128,
  GSBI_IX86_BUILTIN_PSLLQI128,
  GSBI_IX86_BUILTIN_PSRAWI128,
  GSBI_IX86_BUILTIN_PSRADI128,
  GSBI_IX86_BUILTIN_PSRLDQI128,
  GSBI_IX86_BUILTIN_PSRLWI128,
  GSBI_IX86_BUILTIN_PSRLDI128,
  GSBI_IX86_BUILTIN_PSRLQI128,
  GSBI_IX86_BUILTIN_PUNPCKHBW128,
  GSBI_IX86_BUILTIN_PUNPCKHWD128,
  GSBI_IX86_BUILTIN_PUNPCKHDQ128,
  GSBI_IX86_BUILTIN_PUNPCKHQDQ128,
  GSBI_IX86_BUILTIN_PUNPCKLBW128,
  GSBI_IX86_BUILTIN_PUNPCKLWD128,
  GSBI_IX86_BUILTIN_PUNPCKLDQ128,
  GSBI_IX86_BUILTIN_PUNPCKLQDQ128,
  GSBI_IX86_BUILTIN_CLFLUSH,
  GSBI_IX86_BUILTIN_MFENCE,
  GSBI_IX86_BUILTIN_LFENCE,
  GSBI_IX86_BUILTIN_ADDSUBPS,
  GSBI_IX86_BUILTIN_HADDPS,
  GSBI_IX86_BUILTIN_HSUBPS,
  GSBI_IX86_BUILTIN_MOVSHDUP,
  GSBI_IX86_BUILTIN_MOVSLDUP,
  GSBI_IX86_BUILTIN_ADDSUBPD,
  GSBI_IX86_BUILTIN_HADDPD,
  GSBI_IX86_BUILTIN_HSUBPD,
  GSBI_IX86_BUILTIN_LDDQU,
  GSBI_IX86_BUILTIN_MONITOR,
  GSBI_IX86_BUILTIN_MWAIT,
  GSBI_IX86_BUILTIN_VEC_INIT_V2SI,
  GSBI_IX86_BUILTIN_VEC_INIT_V4HI,
  GSBI_IX86_BUILTIN_VEC_INIT_V8QI,
  GSBI_IX86_BUILTIN_VEC_EXT_V2DF,
  GSBI_IX86_BUILTIN_VEC_EXT_V2DI,
  GSBI_IX86_BUILTIN_VEC_EXT_V4SF,
  GSBI_IX86_BUILTIN_VEC_EXT_V4SI,
  GSBI_IX86_BUILTIN_VEC_EXT_V8HI,
  GSBI_IX86_BUILTIN_VEC_EXT_V2SI,
  GSBI_IX86_BUILTIN_VEC_EXT_V4HI,
  GSBI_IX86_BUILTIN_VEC_SET_V8HI,
  GSBI_IX86_BUILTIN_VEC_SET_V4HI,
  GSBI_IX86_BUILTIN_MOVNTSS,
  GSBI_IX86_BUILTIN_MOVNTSD,
  GSBI_IX86_BUILTIN_EXTRQI,
  GSBI_IX86_BUILTIN_EXTRQ,
  GSBI_IX86_BUILTIN_INSERTQI,
  GSBI_IX86_BUILTIN_INSERTQ,
	GSBI_IX86_BUILTIN_PBLENDW128,
	GSBI_IX86_BUILTIN_BLENDPD,
	GSBI_IX86_BUILTIN_BLENDPS,
	GSBI_IX86_BUILTIN_PBLENDVB128,
	GSBI_IX86_BUILTIN_BLENDVPD,
	GSBI_IX86_BUILTIN_BLENDVPS,
	GSBI_IX86_BUILTIN_ROUNDPD,
	GSBI_IX86_BUILTIN_ROUNDSD,
	GSBI_IX86_BUILTIN_ROUNDPS,
	GSBI_IX86_BUILTIN_ROUNDSS,
	GSBI_IX86_BUILTIN_PCMPEQQ,
	GSBI_IX86_BUILTIN_PMOVSXBW128,
	GSBI_IX86_BUILTIN_PMOVSXBD128,
	GSBI_IX86_BUILTIN_PMOVSXBQ128,
	GSBI_IX86_BUILTIN_PMOVSXWD128,
	GSBI_IX86_BUILTIN_PMOVSXWQ128,
	GSBI_IX86_BUILTIN_PMOVSXDQ128,
	GSBI_IX86_BUILTIN_PMOVZXBW128,
	GSBI_IX86_BUILTIN_PMOVZXBD128,
	GSBI_IX86_BUILTIN_PMOVZXBQ128,
	GSBI_IX86_BUILTIN_PMOVZXWD128,
	GSBI_IX86_BUILTIN_PMOVZXWQ128,
	GSBI_IX86_BUILTIN_PMOVZXDQ128,
	GSBI_IX86_BUILTIN_PACKUSDW128,
	GSBI_IX86_BUILTIN_DPPD,
	GSBI_IX86_BUILTIN_DPPS,
	GSBI_IX86_BUILTIN_MPSADBW128,
	GSBI_IX86_BUILTIN_PMULDQ128,
	GSBI_IX86_BUILTIN_PMULLD128,
	GSBI_IX86_BUILTIN_PEXTRB,
	GSBI_IX86_BUILTIN_PEXTRD,
	GSBI_IX86_BUILTIN_PEXTRQ,
	GSBI_IX86_BUILTIN_EXTRACTPS,
	GSBI_IX86_BUILTIN_PINSRB,
	GSBI_IX86_BUILTIN_PINSRD,
	GSBI_IX86_BUILTIN_PINSRQ,
	GSBI_IX86_BUILTIN_INSERTPS,
	GSBI_IX86_BUILTIN_PMAXSB128,
	GSBI_IX86_BUILTIN_PMAXSD128,
	GSBI_IX86_BUILTIN_PMAXUW128,
	GSBI_IX86_BUILTIN_PMAXUD128,
	GSBI_IX86_BUILTIN_PMINSB128,
	GSBI_IX86_BUILTIN_PMINSD128,
	GSBI_IX86_BUILTIN_PMINUW128,
	GSBI_IX86_BUILTIN_PMINUD128,
	GSBI_IX86_BUILTIN_PHMINPOSUW128,
	GSBI_IX86_BUILTIN_MOVNTDQA,
	GSBI_IX86_BUILTIN_PTESTC128,
	GSBI_IX86_BUILTIN_PTESTNZC128,
	GSBI_IX86_BUILTIN_PTESTZ128,


	GSBI_IX86_BUILTIN_PCMPESTRIA128,
	GSBI_IX86_BUILTIN_PCMPESTRIC128,
	GSBI_IX86_BUILTIN_PCMPESTRI128,
	GSBI_IX86_BUILTIN_PCMPESTRM128,
	GSBI_IX86_BUILTIN_PCMPESTRIO128,
	GSBI_IX86_BUILTIN_PCMPESTRIS128,
	GSBI_IX86_BUILTIN_PCMPESTRIZ128,
	GSBI_IX86_BUILTIN_PCMPGTQ128,
	GSBI_IX86_BUILTIN_PCMPISTRIA128,
	GSBI_IX86_BUILTIN_PCMPISTRIC128,
	GSBI_IX86_BUILTIN_PCMPISTRI128,
	GSBI_IX86_BUILTIN_PCMPISTRM128,
	GSBI_IX86_BUILTIN_PCMPISTRIO128,
	GSBI_IX86_BUILTIN_PCMPISTRIS128,
	GSBI_IX86_BUILTIN_PCMPISTRIZ128,
	GSBI_IX86_BUILTIN_CRC32B,
	GSBI_IX86_BUILTIN_CRC32W,
	GSBI_IX86_BUILTIN_CRC32L,
	GSBI_IX86_BUILTIN_CRC32Q,
  GSBI_IX86_BUILTIN_PHADDW128,
  GSBI_IX86_BUILTIN_PHADDD128,
  GSBI_IX86_BUILTIN_PHADDSW128,
  GSBI_IX86_BUILTIN_PHADDW,
  GSBI_IX86_BUILTIN_PHADDD,
  GSBI_IX86_BUILTIN_PHADDSW,
  GSBI_IX86_BUILTIN_PHSUBW128,
  GSBI_IX86_BUILTIN_PHSUBD128,
  GSBI_IX86_BUILTIN_PHSUBSW128,
  GSBI_IX86_BUILTIN_PHSUBW,
  GSBI_IX86_BUILTIN_PHSUBD,
  GSBI_IX86_BUILTIN_PHSUBSW,
	GSBI_IX86_BUILTIN_PABSB128,
	GSBI_IX86_BUILTIN_PABSW128,
	GSBI_IX86_BUILTIN_PABSD128,
	GSBI_IX86_BUILTIN_PABSB,
	GSBI_IX86_BUILTIN_PABSW,
	GSBI_IX86_BUILTIN_PABSD,
	GSBI_IX86_BUILTIN_PMADDUBSW128,
	GSBI_IX86_BUILTIN_PMADDUBSW,
	GSBI_IX86_BUILTIN_PMULHRSW128,
	GSBI_IX86_BUILTIN_PMULHRSW,
	GSBI_IX86_BUILTIN_PALIGNR128,
	GSBI_IX86_BUILTIN_PALIGNR,
	GSBI_IX86_BUILTIN_PSHUFB128,
	GSBI_IX86_BUILTIN_PSHUFB,
  /*AVX ISA*/
  //GSBI_IX86_BUILTIN_ADDPD256,
#include "gspin-tree_avx.h";
  GSBI_IX86_BUILTIN_MAX

} gsbi_ts_t;

extern gs_string_t gsbi_ts_name (gsbi_ts_t code);

// These are indexes into GS_GLOBAL_TREES_LIST.
// They have to be in 1-1 correspondence with the corresponding enumeration in GCC.
typedef enum gs_tree_index
{
  GS_TI_ERROR_MARK,
  GS_TI_INTQI_TYPE,
  GS_TI_INTHI_TYPE,
  GS_TI_INTSI_TYPE,
  GS_TI_INTDI_TYPE,
  GS_TI_INTTI_TYPE,

  GS_TI_UINTQI_TYPE,
  GS_TI_UINTHI_TYPE,
  GS_TI_UINTSI_TYPE,
  GS_TI_UINTDI_TYPE,
  GS_TI_UINTTI_TYPE,

  GS_TI_INTEGER_ZERO,
  GS_TI_INTEGER_ONE,
  GS_TI_INTEGER_MINUS_ONE,
  GS_TI_NULL_POINTER,

  GS_TI_SIZE_ZERO,
  GS_TI_SIZE_ONE,

  GS_TI_BITSIZE_ZERO,
  GS_TI_BITSIZE_ONE,
  GS_TI_BITSIZE_UNIT,

  GS_TI_PUBLIC,
  GS_TI_PROTECTED,
  GS_TI_PRIVATE,

  GS_TI_BOOLEAN_FALSE,
  GS_TI_BOOLEAN_TRUE,

  GS_TI_COMPLEX_INTEGER_TYPE,
  GS_TI_COMPLEX_FLOAT_TYPE,
  GS_TI_COMPLEX_DOUBLE_TYPE,
  GS_TI_COMPLEX_LONG_DOUBLE_TYPE,

  GS_TI_FLOAT_TYPE,
  GS_TI_DOUBLE_TYPE,
  GS_TI_LONG_DOUBLE_TYPE,

  GS_TI_FLOAT_PTR_TYPE,
  GS_TI_DOUBLE_PTR_TYPE,
  GS_TI_LONG_DOUBLE_PTR_TYPE,
  GS_TI_INTEGER_PTR_TYPE,

  GS_TI_VOID_TYPE,
  GS_TI_PTR_TYPE,
  GS_TI_CONST_PTR_TYPE,
  GS_TI_SIZE_TYPE,
  GS_TI_PID_TYPE,
  GS_TI_PTRDIFF_TYPE,
  GS_TI_VA_LIST_TYPE,
#ifdef FE_GNU_4_2_0
  GS_TI_VA_LIST_GPR_COUNTER_FIELD,
  GS_TI_VA_LIST_FPR_COUNTER_FIELD,
#endif
  GS_TI_BOOLEAN_TYPE,
  GS_TI_FILEPTR_TYPE,

#ifdef FE_GNU_4_2_0
  GS_TI_DFLOAT32_TYPE,
  GS_TI_DFLOAT64_TYPE,
  GS_TI_DFLOAT128_TYPE,
  GS_TI_DFLOAT32_PTR_TYPE,
  GS_TI_DFLOAT64_PTR_TYPE,
  GS_TI_DFLOAT128_PTR_TYPE,
#endif

  GS_TI_VOID_LIST_NODE,

  GS_TI_MAIN_IDENTIFIER,

  GS_TI_MAX
} gs_tree_index_t;

// The values below have to be in 1-1 correspondence with the corresponding enumeration in GCC.
typedef enum gs_integer_type_kind {
  GS_ITK_CHAR,
  GS_ITK_SIGNED_CHAR,
  GS_ITK_UNSIGNED_CHAR,
  GS_ITK_SHORT,
  GS_ITK_UNSIGNED_SHORT,
  GS_ITK_INT,
  GS_ITK_UNSIGNED_INT,
  GS_ITK_LONG,
  GS_ITK_UNSIGNED_LONG,
  GS_ITK_LONG_LONG,
  GS_ITK_UNSIGNED_LONG_LONG,
  GS_ITK_NONE
} gs_integer_type_kind_t;

#ifdef FE_GNU_4_2_0
typedef enum gs_omp_clause_code {
  GS_OMP_CLAUSE_ERROR,
  GS_OMP_CLAUSE_PRIVATE,
  GS_OMP_CLAUSE_SHARED,
  GS_OMP_CLAUSE_FIRSTPRIVATE,
  GS_OMP_CLAUSE_LASTPRIVATE,
  GS_OMP_CLAUSE_REDUCTION,
  GS_OMP_CLAUSE_COPYIN,
  GS_OMP_CLAUSE_COPYPRIVATE,
  GS_OMP_CLAUSE_IF,
  GS_OMP_CLAUSE_NUM_THREADS,
  GS_OMP_CLAUSE_SCHEDULE,
  GS_OMP_CLAUSE_NOWAIT,
  GS_OMP_CLAUSE_ORDERED,
  GS_OMP_CLAUSE_DEFAULT
} gs_omp_clause_code_t;

typedef enum gs_omp_clause_schedule_kind {
  GS_OMP_CLAUSE_SCHEDULE_STATIC,
  GS_OMP_CLAUSE_SCHEDULE_DYNAMIC,
  GS_OMP_CLAUSE_SCHEDULE_GUIDED,
  GS_OMP_CLAUSE_SCHEDULE_RUNTIME
} gs_omp_clause_schedule_kind_t;

typedef enum gs_omp_clause_default_kind {
  GS_OMP_CLAUSE_DEFAULT_UNSPECIFIED,
  GS_OMP_CLAUSE_DEFAULT_SHARED,
  GS_OMP_CLAUSE_DEFAULT_NONE,
  GS_OMP_CLAUSE_DEFAULT_PRIVATE
} gs_omp_clause_default_kind_t;
#endif

#endif // __GSPIN_TREE_H__
