[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The main goal of GCC was to make a good, fast compiler for machines in the class that the GNU system aims to run on: 32-bit machines that address 8-bit bytes and have several general registers. Elegance, theoretical power and simplicity are only secondary.
GCC gets most of the information about the target machine from a machine description which gives an algebraic formula for each of the machine's instructions. This is a very clean way to describe the target. But when the compiler needs information that is difficult to express in this fashion, I have not hesitated to define an ad-hoc parameter to the machine description. The purpose of portability is to reduce the total work needed on the compiler; it was not of interest for its own sake.
GCC does not contain
machine dependent code, but it does contain code that depends on machine
parameters such as endianness (whether the most significant byte has the highest
or lowest address of the bytes in a word) and the availability of autoincrement
addressing. In the RTL-generation pass, it is often necessary to have multiple
strategies for generating code for a particular kind of syntax tree, strategies
that are usable for different combinations of parameters. Often I have not tried
to address all possible cases, but only the common ones or only the ones that I
have encountered. As a result, a new target may require additional strategies.
You will know if this happens because the compiler will call abort
.
Fortunately, the new strategies can be added in a machine-independent fashion,
and will affect only the target machines that need them.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |