1/* Definitions of target machine for GNU compiler, for ARM.
2   Copyright (C) 2002-2018 Free Software Foundation, Inc.
3   Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
4   and Martin Simmons (@harleqn.co.uk).
5   More major hacks by Richard Earnshaw (rearnsha@arm.com)
6   Minor hacks by Nick Clifton (nickc@cygnus.com)
7
8   This file is part of GCC.
9
10   GCC is free software; you can redistribute it and/or modify it
11   under the terms of the GNU General Public License as published
12   by the Free Software Foundation; either version 3, or (at your
13   option) any later version.
14
15   GCC is distributed in the hope that it will be useful, but WITHOUT
16   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
18   License for more details.
19
20   You should have received a copy of the GNU General Public License
21   along with GCC; see the file COPYING3.  If not see
22   <http://www.gnu.org/licenses/>.  */
23
24
25/* Half-precision floating point */
26FLOAT_MODE (HF, 2, 0);
27ADJUST_FLOAT_FORMAT (HF, ((arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
28			  ? &arm_half_format : &ieee_half_format));
29
30/* CCFPEmode should be used with floating inequalities,
31   CCFPmode should be used with floating equalities.
32   CC_NOOVmode should be used with SImode integer equalities.
33   CC_Zmode should be used if only the Z flag is set correctly
34   CC_Cmode should be used if only the C flag is set correctly, after an
35     addition.
36   CC_Nmode should be used if only the N (sign) flag is set correctly
37   CC_CZmode should be used if only the C and Z flags are correct
38   (used for DImode unsigned comparisons).
39   CC_NCVmode should be used if only the N, C, and V flags are correct
40   (used for DImode signed comparisons).
41   CCmode should be used otherwise.  */
42
43CC_MODE (CC_NOOV);
44CC_MODE (CC_Z);
45CC_MODE (CC_CZ);
46CC_MODE (CC_NCV);
47CC_MODE (CC_SWP);
48CC_MODE (CCFP);
49CC_MODE (CCFPE);
50CC_MODE (CC_DNE);
51CC_MODE (CC_DEQ);
52CC_MODE (CC_DLE);
53CC_MODE (CC_DLT);
54CC_MODE (CC_DGE);
55CC_MODE (CC_DGT);
56CC_MODE (CC_DLEU);
57CC_MODE (CC_DLTU);
58CC_MODE (CC_DGEU);
59CC_MODE (CC_DGTU);
60CC_MODE (CC_C);
61CC_MODE (CC_N);
62CC_MODE (CC_V);
63
64/* Vector modes.  */
65VECTOR_MODES (INT, 4);        /*            V4QI V2HI */
66VECTOR_MODES (INT, 8);        /*       V8QI V4HI V2SI */
67VECTOR_MODES (INT, 16);       /* V16QI V8HI V4SI V2DI */
68VECTOR_MODES (FLOAT, 8);      /*            V4HF V2SF */
69VECTOR_MODES (FLOAT, 16);     /*       V8HF V4SF V2DF */
70VECTOR_MODE (FLOAT, HF, 2);   /*                 V2HF */
71
72/* Fraction and accumulator vector modes.  */
73VECTOR_MODES (FRACT, 4);      /* V4QQ  V2HQ */
74VECTOR_MODES (UFRACT, 4);     /* V4UQQ V2UHQ */
75VECTOR_MODES (ACCUM, 4);      /*       V2HA */
76VECTOR_MODES (UACCUM, 4);     /*       V2UHA */
77
78/* Opaque integer modes for 3, 4, 6 or 8 Neon double registers (2 is
79   TImode).  */
80INT_MODE (EI, 24);
81INT_MODE (OI, 32);
82INT_MODE (CI, 48);
83INT_MODE (XI, 64);
84