Skip to content
LangRef.html 117 KiB
Newer Older
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.memmove(sbyte* &lt;dest&gt;, sbyte* &lt;src&gt;,
                             uint &lt;len&gt;, uint &lt;align&gt;)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.memmove</tt>' intrinsic moves a block of memory from the source
location to the destination location. It is similar to the '<tt>llvm.memcpy</tt>' 
intrinsic but allows the two memory locations to overlap.
</p>

<p>
Note that, unlike the standard libc function, the <tt>llvm.memmove</tt> intrinsic
does not return a value, and takes an extra alignment argument.
</p>

<h5>Arguments:</h5>

<p>
The first argument is a pointer to the destination, the second is a pointer to
the source.  The third argument is an (arbitrarily sized) integer argument
specifying the number of bytes to copy, and the fourth argument is the alignment
of the source and destination locations.
</p>

<p>
If the call to this intrinisic has an alignment value that is not 0 or 1, then
the caller guarantees that the size of the copy is a multiple of the alignment
and that both the source and destination pointers are aligned to that boundary.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.memmove</tt>' intrinsic copies a block of memory from the source
location to the destination location, which may overlap.  It
copies "len" bytes of memory over.  If the argument is known to be aligned to
some boundary, this can be specified as the fourth argument, otherwise it should
be set to 0 or 1.
</p>
</div>

Chris Lattner's avatar
Chris Lattner committed
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_memset">'<tt>llvm.memset</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare void %llvm.memset(sbyte* &lt;dest&gt;, ubyte &lt;val&gt;,
                            uint &lt;len&gt;, uint &lt;align&gt;)
Chris Lattner's avatar
Chris Lattner committed
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.memset</tt>' intrinsic fills a block of memory with a particular
byte value.
</p>

<p>
Note that, unlike the standard libc function, the <tt>llvm.memset</tt> intrinsic
does not return a value, and takes an extra alignment argument.
</p>

<h5>Arguments:</h5>

<p>
The first argument is a pointer to the destination to fill, the second is the
byte value to fill it with, the third argument is an (arbitrarily sized) integer
argument specifying the number of bytes to fill, and the fourth argument is the
known alignment of destination location.
</p>

<p>
If the call to this intrinisic has an alignment value that is not 0 or 1, then
the caller guarantees that the size of the copy is a multiple of the alignment
and that the destination pointer is aligned to that boundary.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.memset</tt>' intrinsic fills "len" bytes of memory starting at the
destination location.  If the argument is known to be aligned to some boundary,
this can be specified as the fourth argument, otherwise it should be set to 0 or
1.
</p>
</div>


<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="i_isunordered">'<tt>llvm.isunordered</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare bool %llvm.isunordered(&lt;float or double&gt; Val1, &lt;float or double&gt; Val2)
</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.isunordered</tt>' intrinsic returns true if either or both of the
specified floating point values is a NAN.
</p>

<h5>Arguments:</h5>

<p>
The arguments are floating point numbers of the same type.
</p>

<h5>Semantics:</h5>

<p>
If either or both of the arguments is a SNAN or QNAN, it returns true, otherwise
false.
</p>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_count">Bit Counting Intrinsics</a>
</div>

<div class="doc_text">
<p>
LLVM provides intrinsics for a few important bit counting operations.
These allow efficient code generation for some algorithms.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_ctpop">'<tt>llvm.ctpop</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare int %llvm.ctpop(int &lt;src&gt;)

</pre>

<h5>Overview:</h5>

<p>
The '<tt>llvm.ctpop</tt>' intrinsic counts the number of ones in a variable.
</p>

<h5>Arguments:</h5>

<p>
The only argument is the value to be counted.  The argument may be of any
integer type.  The return type must match the argument type.
</p>

<h5>Semantics:</h5>

<p>
The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_ctlz">'<tt>llvm.ctlz</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare int %llvm.ctlz(int &lt;src&gt;)
The '<tt>llvm.ctlz</tt>' intrinsic counts the number of leading zeros in a
variable.
The only argument is the value to be counted.  The argument may be of any
integer type. The return type must match the argument type.
The '<tt>llvm.ctlz</tt>' intrinsic counts the leading (most significant) zeros
in a variable.  If the src == 0 then the result is the size in bits of the type
of src. For example, <tt>llvm.cttz(int 2) = 30</tt>.
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="int_cttz">'<tt>llvm.cttz</tt>' Intrinsic</a>
</div>

<div class="doc_text">

<h5>Syntax:</h5>
<pre>
  declare int %llvm.cttz(int &lt;src&gt;)
The '<tt>llvm.cttz</tt>' intrinsic counts the number of trailing zeros.
The only argument is the value to be counted.  The argument may be of any
integer type.  The return type must match the argument type.
The '<tt>llvm.cttz</tt>' intrinsic counts the trailing (least significant) zeros
in a variable.  If the src == 0 then the result is the size in bits of the type
of src.  For example, <tt>llvm.cttz(2) = 1</tt>.
<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="int_debugger">Debugger Intrinsics</a>
</div>

<div class="doc_text">
<p>
The LLVM debugger intrinsics (which all start with <tt>llvm.dbg.</tt> prefix),
are described in the <a
href="SourceLevelDebugging.html#format_common_intrinsics">LLVM Source Level
Debugging</a> document.
</p>
</div>


Chris Lattner's avatar
Chris Lattner committed
<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>