Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rs6000/rs6000-modes.def @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* Definitions of target machine for GNU compiler, for IBM RS/6000. | 1 /* Definitions of target machine for GNU compiler, for IBM RS/6000. |
2 Copyright (C) 2002-2017 Free Software Foundation, Inc. | 2 Copyright (C) 2002-2018 Free Software Foundation, Inc. |
3 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) | 3 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) |
4 | 4 |
5 This file is part of GCC. | 5 This file is part of GCC. |
6 | 6 |
7 GCC is free software; you can redistribute it and/or modify it | 7 GCC is free software; you can redistribute it and/or modify it |
16 | 16 |
17 You should have received a copy of the GNU General Public License | 17 You should have received a copy of the GNU General Public License |
18 along with GCC; see the file COPYING3. If not see | 18 along with GCC; see the file COPYING3. If not see |
19 <http://www.gnu.org/licenses/>. */ | 19 <http://www.gnu.org/licenses/>. */ |
20 | 20 |
21 /* IBM 128-bit floating point. IFmode and KFmode use the fractional float | 21 /* We order the 3 128-bit floating point types so that IFmode (IBM 128-bit |
22 support in order to declare 3 128-bit floating point types. */ | 22 floating point) is the 128-bit floating point type with the highest |
23 FRACTIONAL_FLOAT_MODE (IF, 106, 16, ibm_extended_format); | 23 precision (128 bits). This so that machine independent parts of the |
24 compiler do not try to widen IFmode to TFmode on ISA 3.0 (power9) that has | |
25 hardware support for IEEE 128-bit. We set TFmode (long double mode) in | |
26 between, and KFmode (explicit __float128) below it. | |
27 | |
28 Previously, IFmode and KFmode were defined to be fractional modes and TFmode | |
29 was the standard mode. Since IFmode does not define the normal arithmetic | |
30 insns (other than neg/abs), on a ISA 3.0 system, the machine independent | |
31 parts of the compiler would see that TFmode has the necessary hardware | |
32 support, and widen the operation from IFmode to TFmode. However, IEEE | |
33 128-bit is not strictly a super-set of IBM extended double and the | |
34 conversion to/from IEEE 128-bit was a function call. | |
35 | |
36 We now make IFmode the highest fractional mode, which means its values are | |
37 not considered for widening. Since we don't define insns for IFmode, the | |
38 IEEE 128-bit modes would not widen to IFmode. */ | |
39 | |
40 #ifndef RS6000_MODES_H | |
41 #include "config/rs6000/rs6000-modes.h" | |
42 #endif | |
43 | |
44 /* IBM 128-bit floating point. */ | |
45 FRACTIONAL_FLOAT_MODE (IF, FLOAT_PRECISION_IFmode, 16, ibm_extended_format); | |
24 | 46 |
25 /* Explicit IEEE 128-bit floating point. */ | 47 /* Explicit IEEE 128-bit floating point. */ |
26 FRACTIONAL_FLOAT_MODE (KF, 113, 16, ieee_quad_format); | 48 FRACTIONAL_FLOAT_MODE (KF, FLOAT_PRECISION_KFmode, 16, ieee_quad_format); |
27 | 49 |
28 /* 128-bit floating point. ABI_V4 uses IEEE quad, AIX/Darwin | 50 /* 128-bit floating point, either IBM 128-bit or IEEE 128-bit. This is |
29 adjust this in rs6000_option_override_internal. */ | 51 adjusted in rs6000_option_override_internal to be the appropriate floating |
30 FLOAT_MODE (TF, 16, ieee_quad_format); | 52 point type. */ |
53 FRACTIONAL_FLOAT_MODE (TF, FLOAT_PRECISION_TFmode, 16, ieee_quad_format); | |
31 | 54 |
32 /* Add any extra modes needed to represent the condition code. | 55 /* Add any extra modes needed to represent the condition code. |
33 | 56 |
34 For the RS/6000, we need separate modes when unsigned (logical) comparisons | 57 For the RS/6000, we need separate modes when unsigned (logical) comparisons |
35 are being done and we need a separate mode for floating-point. We also | 58 are being done and we need a separate mode for floating-point. We also |
49 | 72 |
50 /* Two VMX/VSX vectors (for permute, select, concat, etc.) */ | 73 /* Two VMX/VSX vectors (for permute, select, concat, etc.) */ |
51 VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */ | 74 VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */ |
52 VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */ | 75 VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */ |
53 | 76 |
54 /* Paired single. */ | |
55 VECTOR_MODE (FLOAT, SF, 2); /* The only valid paired-single mode. */ | |
56 VECTOR_MODE (INT, SI, 2); /* For paired-single permutes. */ | |
57 | |
58 /* Replacement for TImode that only is allowed in GPRs. We also use PTImode | 77 /* Replacement for TImode that only is allowed in GPRs. We also use PTImode |
59 for quad memory atomic operations to force getting an even/odd register | 78 for quad memory atomic operations to force getting an even/odd register |
60 combination. */ | 79 combination. */ |
61 PARTIAL_INT_MODE (TI, 128, PTI); | 80 PARTIAL_INT_MODE (TI, 128, PTI); |