]> gcc.gnu.org Git - gcc.git/blame - gcc/machmode.h
formatting tweaks
[gcc.git] / gcc / machmode.h
CommitLineData
fc152a4b 1/* Machine mode definitions for GNU C-Compiler; included by rtl.h and tree.h.
70c75d9f 2 Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc.
fc152a4b
RK
3
4This file is part of GNU CC.
5
6GNU CC 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 2, or (at your option)
9any later version.
10
11GNU CC 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 GNU CC; see the file COPYING. If not, write to
a35311b0
RK
18the Free Software Foundation, 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA. */
fc152a4b 20
fc152a4b 21#ifndef HAVE_MACHINE_MODES
70c75d9f
DE
22#define HAVE_MACHINE_MODES
23
24#include "gansidecl.h"
fc152a4b
RK
25
26/* Strictly speaking, this isn't the proper place to include these definitions,
27 but this file is included by every GCC file.
28
29 Some systems define these in, e.g., param.h. We undefine these names
30 here to avoid the warnings. We prefer to use our definitions since we
31 know they are correct. */
32
33#undef MIN
34#undef MAX
35
36#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
37#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
38
5f4f0e22
CH
39/* Find the largest host integer type and set its size and type. */
40
41#ifndef HOST_BITS_PER_WIDE_INT
42
43#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
44#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
45#define HOST_WIDE_INT long
46#else
47#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
48#define HOST_WIDE_INT int
49#endif
50
51#endif
52
5f4f0e22
CH
53/* Provide a default way to print an address in hex via printf. */
54
55#ifndef HOST_PTR_PRINTF
56#define HOST_PTR_PRINTF sizeof (int) == sizeof (char *) ? "%x" : "%lx"
57#endif
58
fc152a4b
RK
59/* Make an enum class that gives all the machine modes. */
60
61#define DEF_MACHMODE(SYM, NAME, TYPE, SIZE, UNIT, WIDER) SYM,
62
63enum machine_mode {
64#include "machmode.def"
65
66#ifdef EXTRA_CC_MODES
67 EXTRA_CC_MODES,
68#endif
69MAX_MACHINE_MODE };
70
71#undef DEF_MACHMODE
72
fc152a4b
RK
73#ifndef NUM_MACHINE_MODES
74#define NUM_MACHINE_MODES (int) MAX_MACHINE_MODE
75#endif
76
77/* Get the name of mode MODE as a string. */
78
79extern char *mode_name[];
0f41302f 80#define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)])
fc152a4b
RK
81
82enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
4a39a918 83 MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MAX_MODE_CLASS};
fc152a4b
RK
84
85/* Get the general kind of object that mode MODE represents
86 (integer, floating, complex, etc.) */
87
88extern enum mode_class mode_class[];
0f41302f 89#define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)])
fc152a4b 90
ae1ae48c
RK
91/* Nonzero if MODE is an integral mode. */
92#define INTEGRAL_MODE_P(MODE) \
93 (GET_MODE_CLASS (MODE) == MODE_INT \
94 || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
95 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT)
96
97/* Nonzero if MODE is a floating-point mode. */
98#define FLOAT_MODE_P(MODE) \
99 (GET_MODE_CLASS (MODE) == MODE_FLOAT \
100 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
101
fc152a4b
RK
102/* Get the size in bytes of an object of mode MODE. */
103
104extern int mode_size[];
0f41302f 105#define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)])
fc152a4b
RK
106
107/* Get the size in bytes of the basic parts of an object of mode MODE. */
108
109extern int mode_unit_size[];
0f41302f 110#define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)])
fc152a4b
RK
111
112/* Get the number of units in the object. */
113
114#define GET_MODE_NUNITS(MODE) \
fa45b1eb
RS
115 ((GET_MODE_UNIT_SIZE ((MODE)) == 0) ? 0 \
116 : (GET_MODE_SIZE ((MODE)) / GET_MODE_UNIT_SIZE ((MODE))))
fc152a4b
RK
117
118/* Get the size in bits of an object of mode MODE. */
119
0f41302f 120#define GET_MODE_BITSIZE(MODE) (BITS_PER_UNIT * mode_size[(int) (MODE)])
fc152a4b
RK
121
122/* Get a bitmask containing 1 for all bits in a word
123 that fit within mode MODE. */
124
125#define GET_MODE_MASK(MODE) \
5f4f0e22
CH
126 ((GET_MODE_BITSIZE (MODE) >= HOST_BITS_PER_WIDE_INT) \
127 ?(HOST_WIDE_INT) ~0 : (((HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (MODE)) - 1))
fc152a4b
RK
128
129/* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */
130
131extern enum machine_mode mode_wider_mode[];
0f41302f 132#define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int) (MODE)])
fc152a4b 133
c92c981a
RK
134/* Return the mode for data of a given size SIZE and mode class CLASS.
135 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
136 The value is BLKmode if no other mode is found. */
137
521f2d6f 138extern enum machine_mode mode_for_size PROTO((unsigned int, enum mode_class, int));
c92c981a 139
fc152a4b
RK
140/* Find the best mode to use to access a bit field. */
141
521f2d6f 142extern enum machine_mode get_best_mode PROTO((int, int, int, enum machine_mode, int));
fc152a4b
RK
143
144/* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT. */
145
146#define GET_MODE_ALIGNMENT(MODE) \
147 MIN (BIGGEST_ALIGNMENT, \
148 MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)))
149
4a39a918
RK
150/* For each class, get the narrowest mode in that class. */
151
152extern enum machine_mode class_narrowest_mode[];
0f41302f 153#define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)]
4a39a918 154
6c164c81
RK
155/* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD
156 and the mode whose class is Pmode and whose size is POINTER_SIZE. */
4a39a918
RK
157
158extern enum machine_mode byte_mode;
159extern enum machine_mode word_mode;
6c164c81 160extern enum machine_mode ptr_mode;
4a39a918 161
fc152a4b 162#endif /* not HAVE_MACHINE_MODES */
This page took 0.345609 seconds and 5 git commands to generate.