summaryrefslogtreecommitdiff
path: root/devdocs/gcc~13/arc-built-in-functions.html
blob: 71b5e00ef6e7a707650e8f2c8fa391409d9fb5c8 (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<div class="subsection-level-extent" id="ARC-Built-in-Functions"> <div class="nav-panel"> <p> Next: <a href="arc-simd-built-in-functions" accesskey="n" rel="next">ARC SIMD Built-in Functions</a>, Previous: <a href="altera-nios-ii-built-in-functions" accesskey="p" rel="prev">Altera Nios II Built-in Functions</a>, Up: <a href="target-builtins" accesskey="u" rel="up">Built-in Functions Specific to Particular Target Machines</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="ARC-Built-in-Functions-1"><span>6.60.4 ARC Built-in Functions<a class="copiable-link" href="#ARC-Built-in-Functions-1"> ¶</a></span></h1> <p>The following built-in functions are provided for ARC targets. The built-ins generate the corresponding assembly instructions. In the examples given below, the generated code often requires an operand or result to be in a register. Where necessary further code will be generated to ensure this is true, but for brevity this is not described in each case. </p> <p><em class="emph">Note:</em> Using a built-in to generate an instruction not supported by a target may cause problems. At present the compiler is not guaranteed to detect such misuse, and as a result an internal compiler error may be generated. </p> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005faligned">
<span class="category-def">Built-in Function: </span><span><code class="def-type">int</code> <strong class="def-name">__builtin_arc_aligned</strong> <code class="def-code-arguments">(void *<var class="var">val</var>, int <var class="var">alignval</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005faligned"> ¶</a></span>
</dt> <dd>
<p>Return 1 if <var class="var">val</var> is known to have the byte alignment given by <var class="var">alignval</var>, otherwise return 0. Note that this is different from </p>
<div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">__alignof__(*(char *)<var class="var">val</var>) &gt;= alignval</pre>
</div> <p>because __alignof__ sees only the type of the dereference, whereas __builtin_arc_align uses alignment information from the pointer as well as from the pointed-to type. The information available will depend on optimization level. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fbrk">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_brk</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fbrk"> ¶</a></span>
</dt> <dd>
<p>Generates </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">brk</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fcore_005fread">
<span class="category-def">Built-in Function: </span><span><code class="def-type">unsigned int</code> <strong class="def-name">__builtin_arc_core_read</strong> <code class="def-code-arguments">(unsigned int <var class="var">regno</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fcore_005fread"> ¶</a></span>
</dt> <dd>
<p>The operand is the number of a register to be read. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">mov  <var class="var">dest</var>, r<var class="var">regno</var></pre>
</div> <p>where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fcore_005fwrite">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_core_write</strong> <code class="def-code-arguments">(unsigned int <var class="var">regno</var>, unsigned int <var class="var">val</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fcore_005fwrite"> ¶</a></span>
</dt> <dd>
<p>The first operand is the number of a register to be written, the second operand is a compile time constant to write into that register. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">mov  r<var class="var">regno</var>, <var class="var">val</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fdivaw">
<span class="category-def">Built-in Function: </span><span><code class="def-type">int</code> <strong class="def-name">__builtin_arc_divaw</strong> <code class="def-code-arguments">(int <var class="var">a</var>, int <var class="var">b</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fdivaw"> ¶</a></span>
</dt> <dd>
<p>Only available if either <samp class="option">-mcpu=ARC700</samp> or <samp class="option">-meA</samp> is set. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">divaw  <var class="var">dest</var>, <var class="var">a</var>, <var class="var">b</var></pre>
</div> <p>where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fflag">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_flag</strong> <code class="def-code-arguments">(unsigned int <var class="var">a</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fflag"> ¶</a></span>
</dt> <dd>
<p>Generates </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">flag  <var class="var">a</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005flr">
<span class="category-def">Built-in Function: </span><span><code class="def-type">unsigned int</code> <strong class="def-name">__builtin_arc_lr</strong> <code class="def-code-arguments">(unsigned int <var class="var">auxr</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005flr"> ¶</a></span>
</dt> <dd>
<p>The operand, <var class="var">auxv</var>, is the address of an auxiliary register and must be a compile time constant. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">lr  <var class="var">dest</var>, [<var class="var">auxr</var>]</pre>
</div> <p>Where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fmul64">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_mul64</strong> <code class="def-code-arguments">(int <var class="var">a</var>, int <var class="var">b</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fmul64"> ¶</a></span>
</dt> <dd>
<p>Only available with <samp class="option">-mmul64</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">mul64  <var class="var">a</var>, <var class="var">b</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fmulu64">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_mulu64</strong> <code class="def-code-arguments">(unsigned int <var class="var">a</var>, unsigned int <var class="var">b</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fmulu64"> ¶</a></span>
</dt> <dd>
<p>Only available with <samp class="option">-mmul64</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">mulu64  <var class="var">a</var>, <var class="var">b</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fnop">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_nop</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fnop"> ¶</a></span>
</dt> <dd>
<p>Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">nop</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fnorm">
<span class="category-def">Built-in Function: </span><span><code class="def-type">int</code> <strong class="def-name">__builtin_arc_norm</strong> <code class="def-code-arguments">(int <var class="var">src</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fnorm"> ¶</a></span>
</dt> <dd>
<p>Only valid if the ‘<samp class="samp">norm</samp>’ instruction is available through the <samp class="option">-mnorm</samp> option or by default with <samp class="option">-mcpu=ARC700</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">norm  <var class="var">dest</var>, <var class="var">src</var></pre>
</div> <p>Where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fnormw">
<span class="category-def">Built-in Function: </span><span><code class="def-type">short int</code> <strong class="def-name">__builtin_arc_normw</strong> <code class="def-code-arguments">(short int <var class="var">src</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fnormw"> ¶</a></span>
</dt> <dd>
<p>Only valid if the ‘<samp class="samp">normw</samp>’ instruction is available through the <samp class="option">-mnorm</samp> option or by default with <samp class="option">-mcpu=ARC700</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">normw  <var class="var">dest</var>, <var class="var">src</var></pre>
</div> <p>Where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005frtie">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_rtie</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005frtie"> ¶</a></span>
</dt> <dd>
<p>Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">rtie</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fsleep">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_sleep</strong> <code class="def-code-arguments">(int <var class="var">a</var></code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fsleep"> ¶</a></span>
</dt> <dd>
<p>Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">sleep  <var class="var">a</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fsr">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_sr</strong> <code class="def-code-arguments">(unsigned int <var class="var">val</var>, unsigned int <var class="var">auxr</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fsr"> ¶</a></span>
</dt> <dd>
<p>The first argument, <var class="var">val</var>, is a compile time constant to be written to the register, the second argument, <var class="var">auxr</var>, is the address of an auxiliary register. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">sr  <var class="var">val</var>, [<var class="var">auxr</var>]</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fswap">
<span class="category-def">Built-in Function: </span><span><code class="def-type">int</code> <strong class="def-name">__builtin_arc_swap</strong> <code class="def-code-arguments">(int <var class="var">src</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fswap"> ¶</a></span>
</dt> <dd>
<p>Only valid with <samp class="option">-mswap</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">swap  <var class="var">dest</var>, <var class="var">src</var></pre>
</div> <p>Where the value in <var class="var">dest</var> will be the result returned from the built-in. </p>
</dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fswi">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_swi</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fswi"> ¶</a></span>
</dt> <dd>
<p>Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">swi</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005fsync">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_sync</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005fsync"> ¶</a></span>
</dt> <dd>
<p>Only available with <samp class="option">-mcpu=ARC700</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">sync</pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005ftrap_005fs">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_trap_s</strong> <code class="def-code-arguments">(unsigned int <var class="var">c</var>)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005ftrap_005fs"> ¶</a></span>
</dt> <dd>
<p>Only available with <samp class="option">-mcpu=ARC700</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">trap_s  <var class="var">c</var></pre>
</div> </dd>
</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fbuiltin_005farc_005funimp_005fs">
<span class="category-def">Built-in Function: </span><span><code class="def-type">void</code> <strong class="def-name">__builtin_arc_unimp_s</strong> <code class="def-code-arguments">(void)</code><a class="copiable-link" href="#index-_005f_005fbuiltin_005farc_005funimp_005fs"> ¶</a></span>
</dt> <dd>
<p>Only available with <samp class="option">-mcpu=ARC700</samp>. Generates: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">unimp_s</pre>
</div> </dd>
</dl> <p>The instructions generated by the following builtins are not considered as candidates for scheduling. They are not moved around by the compiler during scheduling, and thus can be expected to appear where they are put in the C code: </p>
<div class="example"> <pre class="example-preformatted" data-language="cpp">__builtin_arc_brk()
__builtin_arc_core_read()
__builtin_arc_core_write()
__builtin_arc_flag()
__builtin_arc_lr()
__builtin_arc_sleep()
__builtin_arc_sr()
__builtin_arc_swi()</pre>
</div> </div>  <div class="nav-panel"> <p> Next: <a href="arc-simd-built-in-functions">ARC SIMD Built-in Functions</a>, Previous: <a href="altera-nios-ii-built-in-functions">Altera Nios II Built-in Functions</a>, Up: <a href="target-builtins">Built-in Functions Specific to Particular Target Machines</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">
    &copy; 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/ARC-Built-in-Functions.html" class="_attribution-link">https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/ARC-Built-in-Functions.html</a>
  </p>
</div>