diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-04-11 23:23:49 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-04-11 23:23:49 +0000 |
commit | f86037f17d42110323ee80f69f0e3f130affc96d (patch) | |
tree | 38a440634141c7e9a738146ab500137fe2e3f546 | |
parent | 560b7f3df040e355f294a5829f69572e1bec7d90 (diff) |
Document the part_set intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35929 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/LangRef.html | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index 56f6b86411..d487cbee16 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -184,7 +184,8 @@ <li><a href="#int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic </a></li> <li><a href="#int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic </a></li> <li><a href="#int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic </a></li> - <li><a href="#int_part_select">'<tt>llvm.part_select.*</tt>' Intrinsic </a></li> + <li><a href="#int_part_select">'<tt>llvm.part.select.*</tt>' Intrinsic </a></li> + <li><a href="#int_part_set">'<tt>llvm.part.set.*</tt>' Intrinsic </a></li> </ol> </li> <li><a href="#int_debugger">Debugger intrinsics</a></li> @@ -4641,6 +4642,56 @@ only the <tt>%hiBit - %loBit</tt> bits set, as follows:</p> </ol> </div> +<div class="doc_subsubsection"> + <a name="int_part_set">'<tt>llvm.part.set.*</tt>' Intrinsic</a> +</div> + +<div class="doc_text"> + +<h5>Syntax:</h5> +<p>This is an overloaded intrinsic. You can use <tt>llvm.part.set</tt> +on any integer bit width. +<pre> + declare i17 @llvm.part.set.i17.i17.i9 (i17 %val, i9 %repl, i32 %lo, i32 %hi) + declare i29 @llvm.part.set.i29.i29.i9 (i29 %val, i9 %repl, i32 %lo, i32 %hi) +</pre> + +<h5>Overview:</h5> +<p>The '<tt>llvm.part.set</tt>' family of intrinsic functions replaces a range +of bits in an integer value with another integer value. It returns the integer +with the replaced bits.</p> + +<h5>Arguments:</h5> +<p>The first argument, <tt>%val</tt> and the result may be integer types of +any bit width but they must have the same bit width. <tt>%val</tt> is the value +whose bits will be replaced. The second argument, <tt>%repl</tt> may be an +integer of any bit width. The third and fourth arguments must be <tt>i32</tt> +type since they specify only a bit index.</p> + +<h5>Semantics:</h5> +<p>The operation of the '<tt>llvm.part.set</tt>' intrinsic has two modes +of operation: forwards and reverse. If <tt>%lo</tt> is greater than +<tt>%hi</tt> then the intrinsic operates in reverse mode. Otherwise it +operates in forward mode.</p> +<p>For both modes, the <tt>%repl</tt> value is prepared for use by either +truncating it down to the size of the replacement area or zero extending it +up to that size.</p> +<p>In forward mode, the bits between <tt>%lo</tt> and <tt>%hi</tt> (inclusive) +are replaced with corresponding bits from <tt>%repl</tt>. That is the 0th bit +in <tt>%repl</tt> replaces the <tt>%lo</tt>th bit in <tt>%val</tt> and etc. up +to the <tt>%hi</tt>th bit. +<p>In reverse mode, a similar computation is made except that the bits replaced +wrap around to include both the highest and lowest bits. For example, if a +16 bit value is being replaced then <tt>%lo=8</tt> and <tt>%hi=4</tt> would +cause these bits to be set: <tt>0xFF1F</p>. +<h5>Examples:</h5> +<pre> + llvm.part.set(0xFFFF, 0, Y, 4, 7) -> 0xFF0F + llvm.part.set(0xFFFF, 0, Y, 7, 4) -> 0x0060 + llvm.part.set(0xFFFF, 0, Y, 8, 3) -> 0x00F0 + llvm.part.set(0xFFFF, 0, Y, 3, 8) -> 0xFE07 +</div> + <!-- ======================================================================= --> <div class="doc_subsection"> <a name="int_debugger">Debugger Intrinsics</a> |