1 /* Definitions of target machine for GNU compiler
, for IBM S
/390
2 Copyright (C
) 2002, 2003, 2004, 2005 Free Software Foundation
, Inc.
3 Contributed by Hartmut
Penner (hpenner@de.ibm.com
) and
4 Ulrich
Weigand (uweigand@de.ibm.com
).
6 This file is part of GCC.
8 GCC is free software
; you can redistribute it and
/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation
; either version
2, or (at your option
) any later
13 GCC is distributed in the hope that it will be useful
, but WITHOUT ANY
14 WARRANTY
; without even the implied warranty of MERCHANTABILITY or
15 FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC
; see the file COPYING. If not
, write to the Free
20 Software Foundation
, 51 Franklin Street
, Fifth Floor
, Boston
, MA
23 /* 256-bit integer mode is needed for STACK_SAVEAREA_MODE.
*/
26 /* Define TFmode to work around reload problem PR
20927.
*/
27 FLOAT_MODE (TF
, 16, ieee_quad_format
);
29 /* Add any extra modes needed to represent the condition code.
*/
42 CCU
: EQ LTU GTU
NE (CLG
/R
, CL
/R
/Y
, CLM
/Y
, CLI
/Y
)
43 CCUR
: EQ GTU LTU
NE (CLGF
/R
)
47 CCS
: EQ LT GT
UNORDERED (LTGFR
, LTGR
, LTR
, ICM
/Y
,
48 LTDBR
, LTDR
, LTEBR
, LTER
,
49 CG
/R
, C
/R
/Y
, CGHI
, CHI
,
50 CDB
/R
, CD
/R
, CEB
/R
, CE
/R
,
51 ADB
/R
, AEB
/R
, SDB
/R
, SEB
/R
,
53 CCSR
: EQ GT LT
UNORDERED (CGF
/R
, CH
/Y
)
55 Condition codes resulting from add with overflow
57 CCA
: EQ LT GT Overflow
58 CCAP
: EQ LT GT
LT (AGHI
, AHI
)
59 CCAN
: EQ LT GT
GT (AGHI
, AHI
)
61 Condition codes of unsigned adds and subs
63 CCL
: EQ NE EQ
NE (ALGF
/R
, ALG
/R
, AL
/R
/Y
,
65 SLGF
/R
, SLG
/R
, SL
/R
/Y
,
67 CCL1
: GEU GEU LTU
LTU (ALG
/R
, AL
/R
/Y
)
68 CCL2
: GTU GTU LEU
LEU (SLG
/R
, SL
/R
/Y
)
69 CCL3
: EQ LTU EQ
GTU (SLG
/R
, SL
/R
/Y
)
71 Test under mask checks
73 CCT
: EQ NE NE
NE (ICM
/Y
, TML
, CG
/R
, CGHI
,
74 C
/R
/Y
, CHI
, NG
/R
, N
/R
/Y
,
75 OG
/R
, O
/R
/Y
, XG
/R
, X
/R
/Y
)
76 CCT1
: NE EQ NE
NE (TMH
, TML
)
77 CCT2
: NE NE EQ
NE (TMH
, TML
)
78 CCT3
: NE NE NE
EQ (TMH
, TML
)
80 CCA and CCT modes are request only modes. These modes are never returned by
81 s390_select_cc_mode. They are only intended to match other modes.
83 Requested mode
-> Destination CC register mode
85 CCS
, CCU
, CCT
, CCSR
, CCUR
-> CCZ
93 The CC obtained from add instruction usually can
't be used for comparisons
94 because its coupling with overflow flag. In case of an overflow the
95 less than/greater than data are lost. Nevertheless a comparison can be done
96 whenever immediate values are involved because they are known at compile time.
97 If you know whether the used constant is positive or negative you can predict
98 the sign of the result even in case of an overflow.
101 CCT, CCT1, CCT2, CCT3
103 If bits of an integer masked with an AND instruction are checked, the test under
104 mask instructions turn out to be very handy for a set of special cases.
105 The simple cases are checks whether all masked bits are zero or ones:
108 if ((a & (16 + 128)) == 0) -> CCT/CCZ
109 if ((a & (16 + 128)) == 16 + 128) -> CCT3
111 Using two extra modes makes it possible to do complete checks on two bits of an
112 integer (This is possible on register operands only. TM does not provide the
113 information necessary for CCT1 and CCT2 modes.):
116 if ((a & (16 + 128)) == 16) -> CCT1
117 if ((a & (16 + 128)) == 128) -> CCT2
122 There are several instructions comparing 32 bit with 64 bit unsigned/signed
123 values. Such instructions can be considered to have a builtin zero/sign_extend.
124 The problem is that in the RTL (to be canonical) the zero/sign extended operand
125 has to be the first one but the machine instructions like it the other way
126 around. The following both modes can be considered as CCS and CCU modes with
132 These modes represent the result of overflow checks.
134 if (a + b < a) -> CCL1 state of the carry bit (CC2 | CC3)
135 if (a - b > a) -> CCL2 state of the borrow bit (CC0 | CC1)
137 They are used when multi word numbers are computed dealing one SImode part after
138 another or whenever manual overflow checks like the examples above are
144 A logical subtract instruction sets the borrow bit in case of an overflow.
145 The resulting condition code of those instructions is represented by the
146 CCL3 mode. Together with the CCU mode this mode is used for jumpless
147 implementations of several if-constructs - see s390_expand_addcc for more
152 The compare and swap instructions sets the condition code to 0/1 if the
153 operands were equal/unequal. The CCZ1 mode ensures the result can be
154 effectively placed into a register.