]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/portability.texi
Update copyright years.
[thirdparty/gcc.git] / gcc / doc / portability.texi
CommitLineData
99dee823 1@c Copyright (C) 1988-2021 Free Software Foundation, Inc.
73a8ed7e
JM
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
5@node Portability
6@chapter GCC and Portability
7@cindex portability
8@cindex GCC and portability
9
0c685f12
NS
10GCC itself aims to be portable to any machine where @code{int} is at least
11a 32-bit type. It aims to target machines with a flat (non-segmented) byte
12addressed data address space (the code address space can be separate).
8a36672b 13Target ABIs may have 8, 16, 32 or 64-bit @code{int} type. @code{char}
0c685f12 14can be wider than 8 bits.
73a8ed7e
JM
15
16GCC gets most of the information about the target machine from a machine
17description which gives an algebraic formula for each of the machine's
18instructions. This is a very clean way to describe the target. But when
19the compiler needs information that is difficult to express in this
962e6e00
JM
20fashion, ad-hoc parameters have been defined for machine descriptions.
21The purpose of portability is to reduce the total work needed on the
22compiler; it was not of interest for its own sake.
73a8ed7e
JM
23
24@cindex endianness
25@cindex autoincrement addressing, availability
26@findex abort
27GCC does not contain machine dependent code, but it does contain code
28that depends on machine parameters such as endianness (whether the most
29significant byte has the highest or lowest address of the bytes in a word)
30and the availability of autoincrement addressing. In the RTL-generation
31pass, it is often necessary to have multiple strategies for generating code
32for a particular kind of syntax tree, strategies that are usable for different
962e6e00
JM
33combinations of parameters. Often, not all possible cases have been
34addressed, but only the common ones or only the ones that have been
35encountered. As a result, a new target may require additional
36strategies. You will know
73a8ed7e
JM
37if this happens because the compiler will call @code{abort}. Fortunately,
38the new strategies can be added in a machine-independent fashion, and will
39affect only the target machines that need them.