1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
<div class="subsection-level-extent" id="S_002f390-and-zSeries-Options"> <div class="nav-panel"> <p> Next: <a href="sh-options" accesskey="n" rel="next">SH Options</a>, Previous: <a href="rx-options" accesskey="p" rel="prev">RX Options</a>, Up: <a href="submodel-options" accesskey="u" rel="up">Machine-Dependent Options</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div> <h1 class="subsection" id="S_002f390-and-zSeries-Options-1"><span>3.19.44 S/390 and zSeries Options<a class="copiable-link" href="#S_002f390-and-zSeries-Options-1"> ¶</a></span></h1> <p>These are the ‘<samp class="samp">-m</samp>’ options defined for the S/390 and zSeries architecture. </p> <dl class="table"> <dt>
<span><code class="code">-mhard-float</code><a class="copiable-link" href="#index-mhard-float-7"> ¶</a></span>
</dt> <dt><code class="code">-msoft-float</code></dt> <dd>
<p>Use (do not use) the hardware floating-point instructions and registers for floating-point operations. When <samp class="option">-msoft-float</samp> is specified, functions in <samp class="file">libgcc.a</samp> are used to perform floating-point operations. When <samp class="option">-mhard-float</samp> is specified, the compiler generates IEEE floating-point instructions. This is the default. </p> </dd> <dt>
<span><code class="code">-mhard-dfp</code><a class="copiable-link" href="#index-mhard-dfp-1"> ¶</a></span>
</dt> <dt><code class="code">-mno-hard-dfp</code></dt> <dd>
<p>Use (do not use) the hardware decimal-floating-point instructions for decimal-floating-point operations. When <samp class="option">-mno-hard-dfp</samp> is specified, functions in <samp class="file">libgcc.a</samp> are used to perform decimal-floating-point operations. When <samp class="option">-mhard-dfp</samp> is specified, the compiler generates decimal-floating-point hardware instructions. This is the default for <samp class="option">-march=z9-ec</samp> or higher. </p> </dd> <dt>
<span><code class="code">-mlong-double-64</code><a class="copiable-link" href="#index-mlong-double-64"> ¶</a></span>
</dt> <dt><code class="code">-mlong-double-128</code></dt> <dd>
<p>These switches control the size of <code class="code">long double</code> type. A size of 64 bits makes the <code class="code">long double</code> type equivalent to the <code class="code">double</code> type. This is the default. </p> </dd> <dt>
<span><code class="code">-mbackchain</code><a class="copiable-link" href="#index-mbackchain"> ¶</a></span>
</dt> <dt><code class="code">-mno-backchain</code></dt> <dd>
<p>Store (do not store) the address of the caller’s frame as backchain pointer into the callee’s stack frame. A backchain may be needed to allow debugging using tools that do not understand DWARF call frame information. When <samp class="option">-mno-packed-stack</samp> is in effect, the backchain pointer is stored at the bottom of the stack frame; when <samp class="option">-mpacked-stack</samp> is in effect, the backchain is placed into the topmost word of the 96/160 byte register save area. </p> <p>In general, code compiled with <samp class="option">-mbackchain</samp> is call-compatible with code compiled with <samp class="option">-mno-backchain</samp>; however, use of the backchain for debugging purposes usually requires that the whole binary is built with <samp class="option">-mbackchain</samp>. Note that the combination of <samp class="option">-mbackchain</samp>, <samp class="option">-mpacked-stack</samp> and <samp class="option">-mhard-float</samp> is not supported. In order to build a linux kernel use <samp class="option">-msoft-float</samp>. </p> <p>The default is to not maintain the backchain. </p> </dd> <dt>
<span><code class="code">-mpacked-stack</code><a class="copiable-link" href="#index-mpacked-stack"> ¶</a></span>
</dt> <dt><code class="code">-mno-packed-stack</code></dt> <dd>
<p>Use (do not use) the packed stack layout. When <samp class="option">-mno-packed-stack</samp> is specified, the compiler uses the all fields of the 96/160 byte register save area only for their default purpose; unused fields still take up stack space. When <samp class="option">-mpacked-stack</samp> is specified, register save slots are densely packed at the top of the register save area; unused space is reused for other purposes, allowing for more efficient use of the available stack space. However, when <samp class="option">-mbackchain</samp> is also in effect, the topmost word of the save area is always used to store the backchain, and the return address register is always saved two words below the backchain. </p> <p>As long as the stack frame backchain is not used, code generated with <samp class="option">-mpacked-stack</samp> is call-compatible with code generated with <samp class="option">-mno-packed-stack</samp>. Note that some non-FSF releases of GCC 2.95 for S/390 or zSeries generated code that uses the stack frame backchain at run time, not just for debugging purposes. Such code is not call-compatible with code compiled with <samp class="option">-mpacked-stack</samp>. Also, note that the combination of <samp class="option">-mbackchain</samp>, <samp class="option">-mpacked-stack</samp> and <samp class="option">-mhard-float</samp> is not supported. In order to build a linux kernel use <samp class="option">-msoft-float</samp>. </p> <p>The default is to not use the packed stack layout. </p> </dd> <dt>
<span><code class="code">-msmall-exec</code><a class="copiable-link" href="#index-msmall-exec"> ¶</a></span>
</dt> <dt><code class="code">-mno-small-exec</code></dt> <dd>
<p>Generate (or do not generate) code using the <code class="code">bras</code> instruction to do subroutine calls. This only works reliably if the total executable size does not exceed 64k. The default is to use the <code class="code">basr</code> instruction instead, which does not have this limitation. </p> </dd> <dt>
<span><code class="code">-m64</code><a class="copiable-link" href="#index-m64-2"> ¶</a></span>
</dt> <dt><code class="code">-m31</code></dt> <dd>
<p>When <samp class="option">-m31</samp> is specified, generate code compliant to the GNU/Linux for S/390 ABI. When <samp class="option">-m64</samp> is specified, generate code compliant to the GNU/Linux for zSeries ABI. This allows GCC in particular to generate 64-bit instructions. For the ‘<samp class="samp">s390</samp>’ targets, the default is <samp class="option">-m31</samp>, while the ‘<samp class="samp">s390x</samp>’ targets default to <samp class="option">-m64</samp>. </p> </dd> <dt>
<span><code class="code">-mzarch</code><a class="copiable-link" href="#index-mzarch"> ¶</a></span>
</dt> <dt><code class="code">-mesa</code></dt> <dd>
<p>When <samp class="option">-mzarch</samp> is specified, generate code using the instructions available on z/Architecture. When <samp class="option">-mesa</samp> is specified, generate code using the instructions available on ESA/390. Note that <samp class="option">-mesa</samp> is not possible with <samp class="option">-m64</samp>. When generating code compliant to the GNU/Linux for S/390 ABI, the default is <samp class="option">-mesa</samp>. When generating code compliant to the GNU/Linux for zSeries ABI, the default is <samp class="option">-mzarch</samp>. </p> </dd> <dt>
<span><code class="code">-mhtm</code><a class="copiable-link" href="#index-mhtm-1"> ¶</a></span>
</dt> <dt><code class="code">-mno-htm</code></dt> <dd>
<p>The <samp class="option">-mhtm</samp> option enables a set of builtins making use of instructions available with the transactional execution facility introduced with the IBM zEnterprise EC12 machine generation <a class="ref" href="s_002f390-system-z-built-in-functions">S/390 System z Built-in Functions</a>. <samp class="option">-mhtm</samp> is enabled by default when using <samp class="option">-march=zEC12</samp>. </p> </dd> <dt>
<span><code class="code">-mvx</code><a class="copiable-link" href="#index-mvx"> ¶</a></span>
</dt> <dt><code class="code">-mno-vx</code></dt> <dd>
<p>When <samp class="option">-mvx</samp> is specified, generate code using the instructions available with the vector extension facility introduced with the IBM z13 machine generation. This option changes the ABI for some vector type values with regard to alignment and calling conventions. In case vector type values are being used in an ABI-relevant context a GAS ‘<samp class="samp">.gnu_attribute</samp>’ command will be added to mark the resulting binary with the ABI used. <samp class="option">-mvx</samp> is enabled by default when using <samp class="option">-march=z13</samp>. </p> </dd> <dt>
<span><code class="code">-mzvector</code><a class="copiable-link" href="#index-mzvector"> ¶</a></span>
</dt> <dt><code class="code">-mno-zvector</code></dt> <dd>
<p>The <samp class="option">-mzvector</samp> option enables vector language extensions and builtins using instructions available with the vector extension facility introduced with the IBM z13 machine generation. This option adds support for ‘<samp class="samp">vector</samp>’ to be used as a keyword to define vector type variables and arguments. ‘<samp class="samp">vector</samp>’ is only available when GNU extensions are enabled. It will not be expanded when requesting strict standard compliance e.g. with <samp class="option">-std=c99</samp>. In addition to the GCC low-level builtins <samp class="option">-mzvector</samp> enables a set of builtins added for compatibility with AltiVec-style implementations like Power and Cell. In order to make use of these builtins the header file <samp class="file">vecintrin.h</samp> needs to be included. <samp class="option">-mzvector</samp> is disabled by default. </p> </dd> <dt>
<span><code class="code">-mmvcle</code><a class="copiable-link" href="#index-mmvcle"> ¶</a></span>
</dt> <dt><code class="code">-mno-mvcle</code></dt> <dd>
<p>Generate (or do not generate) code using the <code class="code">mvcle</code> instruction to perform block moves. When <samp class="option">-mno-mvcle</samp> is specified, use a <code class="code">mvc</code> loop instead. This is the default unless optimizing for size. </p> </dd> <dt>
<span><code class="code">-mdebug</code><a class="copiable-link" href="#index-mdebug-1"> ¶</a></span>
</dt> <dt><code class="code">-mno-debug</code></dt> <dd>
<p>Print (or do not print) additional debug information when compiling. The default is to not print debug information. </p> </dd> <dt>
<span><code class="code">-march=<var class="var">cpu-type</var></code><a class="copiable-link" href="#index-march-15"> ¶</a></span>
</dt> <dd>
<p>Generate code that runs on <var class="var">cpu-type</var>, which is the name of a system representing a certain processor type. Possible values for <var class="var">cpu-type</var> are ‘<samp class="samp">z900</samp>’/‘<samp class="samp">arch5</samp>’, ‘<samp class="samp">z990</samp>’/‘<samp class="samp">arch6</samp>’, ‘<samp class="samp">z9-109</samp>’, ‘<samp class="samp">z9-ec</samp>’/‘<samp class="samp">arch7</samp>’, ‘<samp class="samp">z10</samp>’/‘<samp class="samp">arch8</samp>’, ‘<samp class="samp">z196</samp>’/‘<samp class="samp">arch9</samp>’, ‘<samp class="samp">zEC12</samp>’, ‘<samp class="samp">z13</samp>’/‘<samp class="samp">arch11</samp>’, ‘<samp class="samp">z14</samp>’/‘<samp class="samp">arch12</samp>’, ‘<samp class="samp">z15</samp>’/‘<samp class="samp">arch13</samp>’, ‘<samp class="samp">z16</samp>’/‘<samp class="samp">arch14</samp>’, and ‘<samp class="samp">native</samp>’. </p> <p>The default is <samp class="option">-march=z900</samp>. </p> <p>Specifying ‘<samp class="samp">native</samp>’ as cpu type can be used to select the best architecture option for the host processor. <samp class="option">-march=native</samp> has no effect if GCC does not recognize the processor. </p> </dd> <dt>
<span><code class="code">-mtune=<var class="var">cpu-type</var></code><a class="copiable-link" href="#index-mtune-14"> ¶</a></span>
</dt> <dd>
<p>Tune to <var class="var">cpu-type</var> everything applicable about the generated code, except for the ABI and the set of available instructions. The list of <var class="var">cpu-type</var> values is the same as for <samp class="option">-march</samp>. The default is the value used for <samp class="option">-march</samp>. </p> </dd> <dt>
<span><code class="code">-mtpf-trace</code><a class="copiable-link" href="#index-mtpf-trace"> ¶</a></span>
</dt> <dt><code class="code">-mno-tpf-trace</code></dt> <dd>
<p>Generate code that adds (does not add) in TPF OS specific branches to trace routines in the operating system. This option is off by default, even when compiling for the TPF OS. </p> </dd> <dt>
<span><code class="code">-mtpf-trace-skip</code><a class="copiable-link" href="#index-mtpf-trace-skip"> ¶</a></span>
</dt> <dt><code class="code">-mno-tpf-trace-skip</code></dt> <dd>
<p>Generate code that changes (does not change) the default branch targets enabled by <samp class="option">-mtpf-trace</samp> to point to specialized trace routines providing the ability of selectively skipping function trace entries for the TPF OS. This option is off by default, even when compiling for the TPF OS and specifying <samp class="option">-mtpf-trace</samp>. </p> </dd> <dt>
<span><code class="code">-mfused-madd</code><a class="copiable-link" href="#index-mfused-madd-3"> ¶</a></span>
</dt> <dt><code class="code">-mno-fused-madd</code></dt> <dd>
<p>Generate code that uses (does not use) the floating-point multiply and accumulate instructions. These instructions are generated by default if hardware floating point is used. </p> </dd> <dt>
<span><code class="code">-mwarn-framesize=<var class="var">framesize</var></code><a class="copiable-link" href="#index-mwarn-framesize"> ¶</a></span>
</dt> <dd>
<p>Emit a warning if the current function exceeds the given frame size. Because this is a compile-time check it doesn’t need to be a real problem when the program runs. It is intended to identify functions that most probably cause a stack overflow. It is useful to be used in an environment with limited stack size e.g. the linux kernel. </p> </dd> <dt>
<span><code class="code">-mwarn-dynamicstack</code><a class="copiable-link" href="#index-mwarn-dynamicstack"> ¶</a></span>
</dt> <dd>
<p>Emit a warning if the function calls <code class="code">alloca</code> or uses dynamically-sized arrays. This is generally a bad idea with a limited stack size. </p> </dd> <dt>
<span><code class="code">-mstack-guard=<var class="var">stack-guard</var></code><a class="copiable-link" href="#index-mstack-guard"> ¶</a></span>
</dt> <dt><code class="code">-mstack-size=<var class="var">stack-size</var></code></dt> <dd>
<p>If these options are provided the S/390 back end emits additional instructions in the function prologue that trigger a trap if the stack size is <var class="var">stack-guard</var> bytes above the <var class="var">stack-size</var> (remember that the stack on S/390 grows downward). If the <var class="var">stack-guard</var> option is omitted the smallest power of 2 larger than the frame size of the compiled function is chosen. These options are intended to be used to help debugging stack overflow problems. The additionally emitted code causes only little overhead and hence can also be used in production-like systems without greater performance degradation. The given values have to be exact powers of 2 and <var class="var">stack-size</var> has to be greater than <var class="var">stack-guard</var> without exceeding 64k. In order to be efficient the extra code makes the assumption that the stack starts at an address aligned to the value given by <var class="var">stack-size</var>. The <var class="var">stack-guard</var> option can only be used in conjunction with <var class="var">stack-size</var>. </p> </dd> <dt>
<span><code class="code">-mhotpatch=<var class="var">pre-halfwords</var>,<var class="var">post-halfwords</var></code><a class="copiable-link" href="#index-mhotpatch"> ¶</a></span>
</dt> <dd>
<p>If the hotpatch option is enabled, a “hot-patching” function prologue is generated for all functions in the compilation unit. The funtion label is prepended with the given number of two-byte NOP instructions (<var class="var">pre-halfwords</var>, maximum 1000000). After the label, 2 * <var class="var">post-halfwords</var> bytes are appended, using the largest NOP like instructions the architecture allows (maximum 1000000). </p> <p>If both arguments are zero, hotpatching is disabled. </p> <p>This option can be overridden for individual functions with the <code class="code">hotpatch</code> attribute. </p>
</dd> </dl> </div> <div class="nav-panel"> <p> Next: <a href="sh-options">SH Options</a>, Previous: <a href="rx-options">RX Options</a>, Up: <a href="submodel-options">Machine-Dependent Options</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div><div class="_attribution">
<p class="_attribution-p">
© Free Software Foundation<br>Licensed under the GNU Free Documentation License, Version 1.3.<br>
<a href="https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/S_002f390-and-zSeries-Options.html" class="_attribution-link">https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/S_002f390-and-zSeries-Options.html</a>
</p>
</div>
|