/* SH extra machine modes. 
   Copyright (C) 2003-2014 Free Software Foundation, Inc.

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 3, 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 COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* The SH uses a partial integer mode to represent the FPSCR register.  */
PARTIAL_INT_MODE (SI, 22, PSI);
/* PDI mode is used to represent a function address in a target register.  */
PARTIAL_INT_MODE (DI, 64, PDI);

/* Vector modes.  */
VECTOR_MODE  (INT, QI, 2);    /*                 V2QI */
VECTOR_MODES (INT, 4);        /*            V4QI V2HI */
VECTOR_MODES (INT, 8);        /*       V8QI V4HI V2SI */
VECTOR_MODES (INT, 16);       /* V16QI V8HI V4SI V2DI */
VECTOR_MODES (FLOAT, 8);      /*            V4HF V2SF */
VECTOR_MODES (FLOAT, 16);     /*       V8HF V4SF V2DF */
VECTOR_MODE (INT, DI, 4);     /*                 V4DI */
VECTOR_MODE (INT, DI, 8);     /*                 V8DI */
VECTOR_MODE (FLOAT, SF, 16);  /*                V16SF */
