0
|
1 /* Definitions of target machine for GCC for IA-32.
|
|
2 Copyright (C) 2002, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
|
3
|
|
4 This file is part of GCC.
|
|
5
|
|
6 GCC is free software; you can redistribute it and/or modify
|
|
7 it under the terms of the GNU General Public License as published by
|
|
8 the Free Software Foundation; either version 3, or (at your option)
|
|
9 any later version.
|
|
10
|
|
11 GCC is distributed in the hope that it will be useful,
|
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14 GNU General Public License for more details.
|
|
15
|
|
16 You should have received a copy of the GNU General Public License
|
|
17 along with GCC; see the file COPYING3. If not see
|
|
18 <http://www.gnu.org/licenses/>. */
|
|
19
|
|
20 /* The x86_64 ABI specifies both XF and TF modes.
|
|
21 XFmode is __float80 is IEEE extended; TFmode is __float128
|
|
22 is IEEE quad. */
|
|
23
|
|
24 FRACTIONAL_FLOAT_MODE (XF, 80, 12, ieee_extended_intel_96_format);
|
|
25 FLOAT_MODE (TF, 16, ieee_quad_format);
|
|
26
|
|
27 /* In ILP32 mode, XFmode has size 12 and alignment 4.
|
|
28 In LP64 mode, XFmode has size and alignment 16. */
|
|
29 ADJUST_FLOAT_FORMAT (XF, (TARGET_128BIT_LONG_DOUBLE
|
|
30 ? &ieee_extended_intel_128_format
|
|
31 : TARGET_96_ROUND_53_LONG_DOUBLE
|
|
32 ? &ieee_extended_intel_96_round_53_format
|
|
33 : &ieee_extended_intel_96_format));
|
|
34 ADJUST_BYTESIZE (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 12);
|
|
35 ADJUST_ALIGNMENT (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 4);
|
|
36
|
|
37 /* Add any extra modes needed to represent the condition code.
|
|
38
|
|
39 For the i386, we need separate modes when floating-point
|
|
40 equality comparisons are being done.
|
|
41
|
|
42 Add CCNO to indicate comparisons against zero that requires
|
|
43 Overflow flag to be unset. Sign bit test is used instead and
|
|
44 thus can be used to form "a&b>0" type of tests.
|
|
45
|
|
46 Add CCGC to indicate comparisons against zero that allows
|
|
47 unspecified garbage in the Carry flag. This mode is used
|
|
48 by inc/dec instructions.
|
|
49
|
|
50 Add CCGOC to indicate comparisons against zero that allows
|
|
51 unspecified garbage in the Carry and Overflow flag. This
|
|
52 mode is used to simulate comparisons of (a-b) and (a+b)
|
|
53 against zero using sub/cmp/add operations.
|
|
54
|
|
55 Add CCA to indicate that only the Above flag is valid.
|
|
56 Add CCC to indicate that only the Carry flag is valid.
|
|
57 Add CCO to indicate that only the Overflow flag is valid.
|
|
58 Add CCS to indicate that only the Sign flag is valid.
|
|
59 Add CCZ to indicate that only the Zero flag is valid. */
|
|
60
|
|
61 CC_MODE (CCGC);
|
|
62 CC_MODE (CCGOC);
|
|
63 CC_MODE (CCNO);
|
|
64 CC_MODE (CCA);
|
|
65 CC_MODE (CCC);
|
|
66 CC_MODE (CCO);
|
|
67 CC_MODE (CCS);
|
|
68 CC_MODE (CCZ);
|
|
69 CC_MODE (CCFP);
|
|
70 CC_MODE (CCFPU);
|
|
71
|
|
72 /* Vector modes. */
|
|
73 VECTOR_MODES (INT, 4); /* V4QI V2HI */
|
|
74 VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
|
|
75 VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
|
|
76 VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI */
|
|
77 VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
|
|
78 VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
|
|
79 VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
|
|
80 VECTOR_MODE (INT, DI, 1); /* V1DI */
|
|
81 VECTOR_MODE (INT, SI, 1); /* V1SI */
|
|
82 VECTOR_MODE (INT, QI, 2); /* V2QI */
|
|
83 VECTOR_MODE (INT, DI, 8); /* V8DI */
|
|
84 VECTOR_MODE (INT, HI, 32); /* V32HI */
|
|
85 VECTOR_MODE (INT, QI, 64); /* V64QI */
|
|
86 VECTOR_MODE (FLOAT, DF, 8); /* V8DF */
|
|
87 VECTOR_MODE (FLOAT, SF, 16); /* V16SF */
|
|
88
|
|
89 INT_MODE (OI, 32);
|
|
90
|
|
91 /* The symbol Pmode stands for one of the above machine modes (usually SImode).
|
|
92 The tm.h file specifies which one. It is not a distinct mode. */
|