1/* Definitions of target machine for GNU compiler, for CRIS.
2   Copyright (C) 2002-2021 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 3, or (at your option)
9any later version.
10
11GCC is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3.  If not see
18<http://www.gnu.org/licenses/>.  */
19
20/* Node: Condition Code */
21
22/* The mode used for condition-codes depends on both the way the
23   condition-codes are generated (the CC-setter, typically the compare
24   instruction), and used (the CC-user, typically a branch).  For CRIS, we
25   have ordinary compares and incidental condition-code settings from
26   preceding instructions, setting a subset of N, Z, V and C to usable
27   values, from the perspective of comparing the result against zero
28   (referred to below as "fpcraz").  The two subsets meaningful to gcc are
29   all of N, Z, V, C versus just N, Z; some CC-users care only about N
30   and/or Z and some that care about at least one of those flags together
31   with V and/or C.
32
33   The plain "CC_MODE (CC)" (which is always present in gcc), is used to
34   reflect the "unoptimized" state, where the CC-setter is a compare
35   against zero and the CC-user is any branch or s<condition> instruction,
36   before reload.  After reload, a need for C or V is reflected as
37   CC_NZVCmode in both setters and users, and others remain CCmode, until
38   or if optimization of CC-setter and CC-users, when CCmode setters can
39   be changed or replaced by either CC_NZmode or CC_NZVCmode.  To wit, all
40   users that require CC_NZVCmode must match only that mode at any time.
41   All other users must match all of CCmode, CC_NZmode, and CC_NZVCmode.
42   All setters that set only CC_NZmode must match setting only that mode.
43   All other setters must match setting all of CCmode, CC_NZmode, and
44   CC_NZVCmode.
45
46   There's also other modes (i.e. CC_ZnNmode) with a separate set of
47   setters and users not matched by the others. */
48
49/* Z and N flags only.  For a condition-code setter: only the Z and N
50   flags are set to usable values, fpcraz.  For a condition-code user: the
51   operation using the condition codes only care about the Z and N flags.  */
52CC_MODE (CC_NZ);
53
54/* Z and N *and* V and C flags.  For a condition-code setter: all flags
55   are set to usable values, fpcraz.  For a condition-code user: at least
56   one of V and C are used and possibly N and Z too.  */
57CC_MODE (CC_NZVC);
58
59/* The result of a btst / btstq instruction for extracting a single bit
60   goes negated into the N flag, or in olde cc0-parlance, CC_Z_IN_NOT_N.  */
61CC_MODE (CC_ZnN);
62