Portability.html 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>GNU Compiler Collection (GCC) Internals: Portability</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: Portability">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Portability">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="index.html#Top" rel="up" title="Top">
  30. <link href="Interface.html#Interface" rel="next" title="Interface">
  31. <link href="Contributing.html#Contributing" rel="prev" title="Contributing">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style:oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Portability"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="Interface.html#Interface" accesskey="n" rel="next">Interface</a>, Previous: <a href="Contributing.html#Contributing" accesskey="p" rel="prev">Contributing</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="GCC-and-Portability"></a>
  69. <h2 class="chapter">2 GCC and Portability</h2>
  70. <a name="index-portability"></a>
  71. <a name="index-GCC-and-portability"></a>
  72. <p>GCC itself aims to be portable to any machine where <code>int</code> is at least
  73. a 32-bit type. It aims to target machines with a flat (non-segmented) byte
  74. addressed data address space (the code address space can be separate).
  75. Target ABIs may have 8, 16, 32 or 64-bit <code>int</code> type. <code>char</code>
  76. can be wider than 8 bits.
  77. </p>
  78. <p>GCC gets most of the information about the target machine from a machine
  79. description which gives an algebraic formula for each of the machine&rsquo;s
  80. instructions. This is a very clean way to describe the target. But when
  81. the compiler needs information that is difficult to express in this
  82. fashion, ad-hoc parameters have been defined for machine descriptions.
  83. The purpose of portability is to reduce the total work needed on the
  84. compiler; it was not of interest for its own sake.
  85. </p>
  86. <a name="index-endianness"></a>
  87. <a name="index-autoincrement-addressing_002c-availability"></a>
  88. <a name="index-abort"></a>
  89. <p>GCC does not contain machine dependent code, but it does contain code
  90. that depends on machine parameters such as endianness (whether the most
  91. significant byte has the highest or lowest address of the bytes in a word)
  92. and the availability of autoincrement addressing. In the RTL-generation
  93. pass, it is often necessary to have multiple strategies for generating code
  94. for a particular kind of syntax tree, strategies that are usable for different
  95. combinations of parameters. Often, not all possible cases have been
  96. addressed, but only the common ones or only the ones that have been
  97. encountered. As a result, a new target may require additional
  98. strategies. You will know
  99. if this happens because the compiler will call <code>abort</code>. Fortunately,
  100. the new strategies can be added in a machine-independent fashion, and will
  101. affect only the target machines that need them.
  102. </p>
  103. <hr>
  104. <div class="header">
  105. <p>
  106. Next: <a href="Interface.html#Interface" accesskey="n" rel="next">Interface</a>, Previous: <a href="Contributing.html#Contributing" accesskey="p" rel="prev">Contributing</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  107. </div>
  108. </body>
  109. </html>