]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/cris/cris-modes.def
Update copyright years.
[thirdparty/gcc.git] / gcc / config / cris / cris-modes.def
CommitLineData
b3e01c3d 1/* Definitions of target machine for GNU compiler, for CRIS.
99dee823 2 Copyright (C) 2002-2021 Free Software Foundation, Inc.
b3e01c3d
HPN
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
9596eccb
HPN
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.
b3e01c3d
HPN
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.
9596eccb
HPN
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. */
b3e01c3d
HPN
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);
b73bf8a1
HPN
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);