/* Definitions of target machine for GNU compiler for FRV.
   Copyright (C) 2002, 2004 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 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.  */

/* On the FRV, the CC modes used are:

   CCmode	set ICCs from comparing signed integers
   CC_UNSmode	set ICCs from comparing unsigned integers
   CC_NZmode	set ICCs for comparisons that just need the Z and N flags
   CC_FPmode	set FCCs from comparing floating point
   CC_CCRmode	set CCRs to do conditional execution */

CC_MODE (CC_UNS);
CC_MODE (CC_NZ);
CC_MODE (CC_FP);
CC_MODE (CC_CCR);

VECTOR_MODE (INT, QI, 4);     /*                 V4QI */
VECTOR_MODE (INT, SI, 4);     /*                 V4SI */
