/* Generated automatically from machmode.def and config/mips/mips-modes.def
   by genmodes.  */

#ifndef GCC_INSN_MODES_H
#define GCC_INSN_MODES_H

enum machine_mode
{
  VOIDmode,                /* machmode.def:172 */
#define HAVE_VOIDmode
  BLKmode,                 /* machmode.def:176 */
#define HAVE_BLKmode
  CCmode,                  /* machmode.def:214 */
#define HAVE_CCmode
  CCV2mode,                /* config/mips/mips-modes.def:39 */
#define HAVE_CCV2mode
  CCV4mode,                /* config/mips/mips-modes.def:43 */
#define HAVE_CCV4mode
  CCDSPmode,               /* config/mips/mips-modes.def:48 */
#define HAVE_CCDSPmode
  CCFmode,                 /* config/mips/mips-modes.def:51 */
#define HAVE_CCFmode
  BImode,                  /* machmode.def:179 */
#define HAVE_BImode
  QImode,                  /* machmode.def:187 */
#define HAVE_QImode
  HImode,                  /* machmode.def:188 */
#define HAVE_HImode
  SImode,                  /* machmode.def:189 */
#define HAVE_SImode
  DImode,                  /* machmode.def:190 */
#define HAVE_DImode
  TImode,                  /* machmode.def:191 */
#define HAVE_TImode
  QQmode,                  /* machmode.def:217 */
#define HAVE_QQmode
  HQmode,                  /* machmode.def:218 */
#define HAVE_HQmode
  SQmode,                  /* machmode.def:219 */
#define HAVE_SQmode
  DQmode,                  /* machmode.def:220 */
#define HAVE_DQmode
  TQmode,                  /* machmode.def:221 */
#define HAVE_TQmode
  UQQmode,                 /* machmode.def:223 */
#define HAVE_UQQmode
  UHQmode,                 /* machmode.def:224 */
#define HAVE_UHQmode
  USQmode,                 /* machmode.def:225 */
#define HAVE_USQmode
  UDQmode,                 /* machmode.def:226 */
#define HAVE_UDQmode
  UTQmode,                 /* machmode.def:227 */
#define HAVE_UTQmode
  HAmode,                  /* machmode.def:229 */
#define HAVE_HAmode
  SAmode,                  /* machmode.def:230 */
#define HAVE_SAmode
  DAmode,                  /* machmode.def:231 */
#define HAVE_DAmode
  TAmode,                  /* machmode.def:232 */
#define HAVE_TAmode
  UHAmode,                 /* machmode.def:234 */
#define HAVE_UHAmode
  USAmode,                 /* machmode.def:235 */
#define HAVE_USAmode
  UDAmode,                 /* machmode.def:236 */
#define HAVE_UDAmode
  UTAmode,                 /* machmode.def:237 */
#define HAVE_UTAmode
  SFmode,                  /* machmode.def:209 */
#define HAVE_SFmode
  DFmode,                  /* machmode.def:210 */
#define HAVE_DFmode
  TFmode,                  /* config/mips/mips-modes.def:20 */
#define HAVE_TFmode
  SDmode,                  /* machmode.def:249 */
#define HAVE_SDmode
  DDmode,                  /* machmode.def:250 */
#define HAVE_DDmode
  TDmode,                  /* machmode.def:251 */
#define HAVE_TDmode
  CQImode,                 /* machmode.def:245 */
#define HAVE_CQImode
  CHImode,                 /* machmode.def:245 */
#define HAVE_CHImode
  CSImode,                 /* machmode.def:245 */
#define HAVE_CSImode
  CDImode,                 /* machmode.def:245 */
#define HAVE_CDImode
  CTImode,                 /* machmode.def:245 */
#define HAVE_CTImode
  SCmode,                  /* machmode.def:246 */
#define HAVE_SCmode
  DCmode,                  /* machmode.def:246 */
#define HAVE_DCmode
  TCmode,                  /* machmode.def:246 */
#define HAVE_TCmode
  V4QImode,                /* config/mips/mips-modes.def:23 */
#define HAVE_V4QImode
  V2HImode,                /* config/mips/mips-modes.def:23 */
#define HAVE_V2HImode
  V8QImode,                /* config/mips/mips-modes.def:24 */
#define HAVE_V8QImode
  V4HImode,                /* config/mips/mips-modes.def:24 */
#define HAVE_V4HImode
  V2SImode,                /* config/mips/mips-modes.def:24 */
#define HAVE_V2SImode
  V16QImode,               /* config/mips/mips-modes.def:28 */
#define HAVE_V16QImode
  V8HImode,                /* config/mips/mips-modes.def:29 */
#define HAVE_V8HImode
  V4SImode,                /* config/mips/mips-modes.def:30 */
#define HAVE_V4SImode
  V4QQmode,                /* config/mips/mips-modes.def:33 */
#define HAVE_V4QQmode
  V2HQmode,                /* config/mips/mips-modes.def:33 */
#define HAVE_V2HQmode
  V4UQQmode,               /* config/mips/mips-modes.def:34 */
#define HAVE_V4UQQmode
  V2UHQmode,               /* config/mips/mips-modes.def:34 */
#define HAVE_V2UHQmode
  V2HAmode,                /* config/mips/mips-modes.def:35 */
#define HAVE_V2HAmode
  V2UHAmode,               /* config/mips/mips-modes.def:36 */
#define HAVE_V2UHAmode
  V2SFmode,                /* config/mips/mips-modes.def:25 */
#define HAVE_V2SFmode
  V4SFmode,                /* config/mips/mips-modes.def:31 */
#define HAVE_V4SFmode
  MAX_MACHINE_MODE,

  MIN_MODE_RANDOM = VOIDmode,
  MAX_MODE_RANDOM = BLKmode,

  MIN_MODE_CC = CCmode,
  MAX_MODE_CC = CCFmode,

  MIN_MODE_INT = QImode,
  MAX_MODE_INT = TImode,

  MIN_MODE_PARTIAL_INT = VOIDmode,
  MAX_MODE_PARTIAL_INT = VOIDmode,

  MIN_MODE_POINTER_BOUNDS = VOIDmode,
  MAX_MODE_POINTER_BOUNDS = VOIDmode,

  MIN_MODE_FRACT = QQmode,
  MAX_MODE_FRACT = TQmode,

  MIN_MODE_UFRACT = UQQmode,
  MAX_MODE_UFRACT = UTQmode,

  MIN_MODE_ACCUM = HAmode,
  MAX_MODE_ACCUM = TAmode,

  MIN_MODE_UACCUM = UHAmode,
  MAX_MODE_UACCUM = UTAmode,

  MIN_MODE_FLOAT = SFmode,
  MAX_MODE_FLOAT = TFmode,

  MIN_MODE_DECIMAL_FLOAT = SDmode,
  MAX_MODE_DECIMAL_FLOAT = TDmode,

  MIN_MODE_COMPLEX_INT = CQImode,
  MAX_MODE_COMPLEX_INT = CTImode,

  MIN_MODE_COMPLEX_FLOAT = SCmode,
  MAX_MODE_COMPLEX_FLOAT = TCmode,

  MIN_MODE_VECTOR_INT = V4QImode,
  MAX_MODE_VECTOR_INT = V4SImode,

  MIN_MODE_VECTOR_FRACT = V4QQmode,
  MAX_MODE_VECTOR_FRACT = V2HQmode,

  MIN_MODE_VECTOR_UFRACT = V4UQQmode,
  MAX_MODE_VECTOR_UFRACT = V2UHQmode,

  MIN_MODE_VECTOR_ACCUM = V2HAmode,
  MAX_MODE_VECTOR_ACCUM = V2HAmode,

  MIN_MODE_VECTOR_UACCUM = V2UHAmode,
  MAX_MODE_VECTOR_UACCUM = V2UHAmode,

  MIN_MODE_VECTOR_FLOAT = V2SFmode,
  MAX_MODE_VECTOR_FLOAT = V4SFmode,

  NUM_MACHINE_MODES = MAX_MACHINE_MODE
};

#define CONST_MODE_SIZE
#define CONST_MODE_BASE_ALIGN
#define CONST_MODE_IBIT const
#define CONST_MODE_FBIT const

#define BITS_PER_UNIT (8)
#define MAX_BITSIZE_MODE_ANY_INT (16*BITS_PER_UNIT)
#define MAX_BITSIZE_MODE_ANY_MODE (32*BITS_PER_UNIT)
#define NUM_INT_N_ENTS 1

#if !defined (USED_FOR_TARGET) && GCC_VERSION >= 4001

#ifdef __cplusplus
inline __attribute__((__always_inline__))
#else
extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
#endif
unsigned char
mode_size_inline (machine_mode mode)
{
  extern unsigned char mode_size[NUM_MACHINE_MODES];
  switch (mode)
    {
    case VOIDmode: return 0;
    case BLKmode: return 0;
    case CCmode: return 4;
    case CCDSPmode: return 4;
    case CCFmode: return 4;
    case BImode: return 1;
    case QImode: return 1;
    case HImode: return 2;
    case SImode: return 4;
    case DImode: return 8;
    case TImode: return 16;
    case QQmode: return 1;
    case HQmode: return 2;
    case SQmode: return 4;
    case DQmode: return 8;
    case TQmode: return 16;
    case UQQmode: return 1;
    case UHQmode: return 2;
    case USQmode: return 4;
    case UDQmode: return 8;
    case UTQmode: return 16;
    case HAmode: return 2;
    case SAmode: return 4;
    case DAmode: return 8;
    case TAmode: return 16;
    case UHAmode: return 2;
    case USAmode: return 4;
    case UDAmode: return 8;
    case UTAmode: return 16;
    case SFmode: return 4;
    case DFmode: return 8;
    case TFmode: return 16;
    case SDmode: return 4;
    case DDmode: return 8;
    case TDmode: return 16;
    case CQImode: return 2;
    case CHImode: return 4;
    case CSImode: return 8;
    case CDImode: return 16;
    case CTImode: return 32;
    case SCmode: return 8;
    case DCmode: return 16;
    case TCmode: return 32;
    case V4QImode: return 4;
    case V2HImode: return 4;
    case V8QImode: return 8;
    case V4HImode: return 8;
    case V2SImode: return 8;
    case V16QImode: return 16;
    case V8HImode: return 16;
    case V4SImode: return 16;
    case V4QQmode: return 4;
    case V2HQmode: return 4;
    case V4UQQmode: return 4;
    case V2UHQmode: return 4;
    case V2HAmode: return 4;
    case V2UHAmode: return 4;
    case V2SFmode: return 8;
    case V4SFmode: return 16;
    default: return mode_size[mode];
    }
}

#ifdef __cplusplus
inline __attribute__((__always_inline__))
#else
extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
#endif
unsigned char
mode_nunits_inline (machine_mode mode)
{
  extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
  switch (mode)
    {
    case VOIDmode: return 0;
    case BLKmode: return 0;
    case CCmode: return 1;
    case CCV2mode: return 1;
    case CCV4mode: return 1;
    case CCDSPmode: return 1;
    case CCFmode: return 1;
    case BImode: return 1;
    case QImode: return 1;
    case HImode: return 1;
    case SImode: return 1;
    case DImode: return 1;
    case TImode: return 1;
    case QQmode: return 1;
    case HQmode: return 1;
    case SQmode: return 1;
    case DQmode: return 1;
    case TQmode: return 1;
    case UQQmode: return 1;
    case UHQmode: return 1;
    case USQmode: return 1;
    case UDQmode: return 1;
    case UTQmode: return 1;
    case HAmode: return 1;
    case SAmode: return 1;
    case DAmode: return 1;
    case TAmode: return 1;
    case UHAmode: return 1;
    case USAmode: return 1;
    case UDAmode: return 1;
    case UTAmode: return 1;
    case SFmode: return 1;
    case DFmode: return 1;
    case TFmode: return 1;
    case SDmode: return 1;
    case DDmode: return 1;
    case TDmode: return 1;
    case CQImode: return 2;
    case CHImode: return 2;
    case CSImode: return 2;
    case CDImode: return 2;
    case CTImode: return 2;
    case SCmode: return 2;
    case DCmode: return 2;
    case TCmode: return 2;
    case V4QImode: return 4;
    case V2HImode: return 2;
    case V8QImode: return 8;
    case V4HImode: return 4;
    case V2SImode: return 2;
    case V16QImode: return 16;
    case V8HImode: return 8;
    case V4SImode: return 4;
    case V4QQmode: return 4;
    case V2HQmode: return 2;
    case V4UQQmode: return 4;
    case V2UHQmode: return 2;
    case V2HAmode: return 2;
    case V2UHAmode: return 2;
    case V2SFmode: return 2;
    case V4SFmode: return 4;
    default: return mode_nunits[mode];
    }
}

#ifdef __cplusplus
inline __attribute__((__always_inline__))
#else
extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
#endif
unsigned char
mode_inner_inline (machine_mode mode)
{
  extern const unsigned char mode_inner[NUM_MACHINE_MODES];
  switch (mode)
    {
    case VOIDmode: return VOIDmode;
    case BLKmode: return VOIDmode;
    case CCmode: return VOIDmode;
    case CCV2mode: return VOIDmode;
    case CCV4mode: return VOIDmode;
    case CCDSPmode: return VOIDmode;
    case CCFmode: return VOIDmode;
    case BImode: return VOIDmode;
    case QImode: return VOIDmode;
    case HImode: return VOIDmode;
    case SImode: return VOIDmode;
    case DImode: return VOIDmode;
    case TImode: return VOIDmode;
    case QQmode: return VOIDmode;
    case HQmode: return VOIDmode;
    case SQmode: return VOIDmode;
    case DQmode: return VOIDmode;
    case TQmode: return VOIDmode;
    case UQQmode: return VOIDmode;
    case UHQmode: return VOIDmode;
    case USQmode: return VOIDmode;
    case UDQmode: return VOIDmode;
    case UTQmode: return VOIDmode;
    case HAmode: return VOIDmode;
    case SAmode: return VOIDmode;
    case DAmode: return VOIDmode;
    case TAmode: return VOIDmode;
    case UHAmode: return VOIDmode;
    case USAmode: return VOIDmode;
    case UDAmode: return VOIDmode;
    case UTAmode: return VOIDmode;
    case SFmode: return VOIDmode;
    case DFmode: return VOIDmode;
    case TFmode: return VOIDmode;
    case SDmode: return VOIDmode;
    case DDmode: return VOIDmode;
    case TDmode: return VOIDmode;
    case CQImode: return QImode;
    case CHImode: return HImode;
    case CSImode: return SImode;
    case CDImode: return DImode;
    case CTImode: return TImode;
    case SCmode: return SFmode;
    case DCmode: return DFmode;
    case TCmode: return TFmode;
    case V4QImode: return QImode;
    case V2HImode: return HImode;
    case V8QImode: return QImode;
    case V4HImode: return HImode;
    case V2SImode: return SImode;
    case V16QImode: return QImode;
    case V8HImode: return HImode;
    case V4SImode: return SImode;
    case V4QQmode: return QQmode;
    case V2HQmode: return HQmode;
    case V4UQQmode: return UQQmode;
    case V2UHQmode: return UHQmode;
    case V2HAmode: return HAmode;
    case V2UHAmode: return UHAmode;
    case V2SFmode: return SFmode;
    case V4SFmode: return SFmode;
    default: return mode_inner[mode];
    }
}

#endif /* GCC_VERSION >= 4001 */

#endif /* insn-modes.h */
