Contents

GNU Compiler Collection (GCC) Internals

This file documents the internals of the GNU compilers.

Copyright © 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being “GNU General Public License” and “Funding Free Software”, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled “GNU Free Documentation License”.

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.

Short Contents

Table of Contents

4.2 Routines for floating point emulation

4.3 Language-independent routines for exception handling

4.4 Miscellaneous runtime library routines

5 Language Front Ends in GCC

6 Source Tree Structure and Build System

6.3.3 Build System in the gcc Directory

6.3.4 Makefile Targets

6.3.5 Library Source Files and Headers under the gcc Directory

6.3.6 Headers Installed by GCC

6.3.7 Building Documentation

6.3.8 Anatomy of a Language Front End

6.3.9 Anatomy of a Target Back End

6.4 Testsuites

7 Passes and Files of the Compiler

8 Trees: The intermediate representation used by the C and C++ front ends

8.3 Types

8.4 Scopes

8.5 Declarations

8.6 Functions

8.7 Attributes in trees

8.8 Expressions

9 Analysis and Optimization of GIMPLE Trees

9.2.4 Statements

9.2.5 GIMPLE Example

9.2.6 Rough GIMPLE Grammar

9.3 Annotations

9.4 Statement Operands

9.5 Static Single Assignment

9.6 Alias analysis

10 RTL Representation

11 Control Flow Graph

12 Machine Descriptions

12.8 Operand Constraints

12.9 Standard Pattern Names For Generation

12.10 When the Order of Patterns Matters

12.11 Interdependence of Patterns

12.12 Defining Jump Instruction Patterns

12.13 Defining Looping Instruction Patterns

12.14 Canonicalization of Instructions

12.15 Defining RTL Sequences for Code Generation

12.16 Defining How to Split Instructions

12.17 Including Patterns in Machine Descriptions.

12.18 Machine-Specific Peephole Optimizers

12.19 Instruction Attributes

12.20 Conditional Execution

12.21 Constant Definitions

12.22 Macros

12.22.2 Code Macros

13 Target Description Macros and Functions

13.8 Register Classes

13.9 Stack Layout and Calling Conventions

13.10 Implementing the Varargs Macros

13.11 Trampolines for Nested Functions

13.12 Implicit Calls to Library Routines

13.13 Addressing Modes

13.14 Condition Code Status

13.15 Describing Relative Costs of Operations

13.16 Adjusting the Instruction Scheduler

13.17 Dividing the Output into Sections (Texts, Data, ...)

13.18 Position Independent Code

13.19 Defining the Output Assembler Language

13.20 Controlling Debugging Information Format

13.21 Cross Compilation and Floating Point

13.22 Mode Switching Instructions

13.23 Defining target-specific uses of attribute

13.24 Defining coprocessor specifics for MIPS targets.

13.25 Parameters for Precompiled Header Validity Checking

13.26 C++ ABI parameters

13.27 Miscellaneous Parameters

14 Host Configuration

15 Makefile Fragments

16 collect2

17 Standard Header File Directories

18 Memory Management and Type Information

Funding Free Software

The GNU Project and GNU/Linux

GNU GENERAL PUBLIC LICENSE

GNU Free Documentation License

Contributors to GCC

Option Index

Concept Index

Next: Contributing, Up: (DIR)

Introduction

This manual documents the internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages. It corresponds to GCC version 4.0.1. The use of the GNU compilers is documented in a separate manual. See Introduction.

This manual is mainly a reference manual rather than a tutorial. It discusses how to contribute to GCC (see Contributing), the characteristics of the machines supported by GCC as hosts and targets (see Portability), how GCC relates to the ABIs on such systems (see Interface), and the characteristics of the languages for which GCC front ends are written (see Languages). It then describes the GCC source tree structure and build system, some of the interfaces to GCC front ends, and how support for a target system is implemented in GCC.

Additional tutorial information is linked to from http://gcc.gnu.org/readings.html.