mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Clarify that shifts that are too large are undefined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42588 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9a7288b0c6
commit
6ccc2d579e
@ -2168,18 +2168,28 @@ Instruction</a> </div>
|
||||
<h5>Syntax:</h5>
|
||||
<pre> <result> = shl <ty> <var1>, <var2> <i>; yields {ty}:result</i>
|
||||
</pre>
|
||||
|
||||
<h5>Overview:</h5>
|
||||
|
||||
<p>The '<tt>shl</tt>' instruction returns the first operand shifted to
|
||||
the left a specified number of bits.</p>
|
||||
|
||||
<h5>Arguments:</h5>
|
||||
|
||||
<p>Both arguments to the '<tt>shl</tt>' instruction must be the same <a
|
||||
href="#t_integer">integer</a> type.</p>
|
||||
|
||||
<h5>Semantics:</h5>
|
||||
<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
|
||||
|
||||
<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>. If
|
||||
<tt>var2</tt> is (statically or dynamically) equal to or larger than the number
|
||||
of bits in <tt>var1</tt>, the result is undefined.</p>
|
||||
|
||||
<h5>Example:</h5><pre>
|
||||
<result> = shl i32 4, %var <i>; yields {i32}: 4 << %var</i>
|
||||
<result> = shl i32 4, 2 <i>; yields {i32}: 16</i>
|
||||
<result> = shl i32 1, 10 <i>; yields {i32}: 1024</i>
|
||||
<result> = shl i32 1, 32 <i>; undefined</i>
|
||||
</pre>
|
||||
</div>
|
||||
<!-- _______________________________________________________________________ -->
|
||||
@ -2199,9 +2209,11 @@ operand shifted to the right a specified number of bits with zero fill.</p>
|
||||
<a href="#t_integer">integer</a> type.</p>
|
||||
|
||||
<h5>Semantics:</h5>
|
||||
|
||||
<p>This instruction always performs a logical shift right operation. The most
|
||||
significant bits of the result will be filled with zero bits after the
|
||||
shift.</p>
|
||||
shift. If <tt>var2</tt> is (statically or dynamically) equal to or larger than
|
||||
the number of bits in <tt>var1</tt>, the result is undefined.</p>
|
||||
|
||||
<h5>Example:</h5>
|
||||
<pre>
|
||||
@ -2209,6 +2221,7 @@ shift.</p>
|
||||
<result> = lshr i32 4, 2 <i>; yields {i32}:result = 1</i>
|
||||
<result> = lshr i8 4, 3 <i>; yields {i8}:result = 0</i>
|
||||
<result> = lshr i8 -2, 1 <i>; yields {i8}:result = 0x7FFFFFFF </i>
|
||||
<result> = lshr i32 1, 32 <i>; undefined</i>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
@ -2232,7 +2245,9 @@ operand shifted to the right a specified number of bits with sign extension.</p>
|
||||
<h5>Semantics:</h5>
|
||||
<p>This instruction always performs an arithmetic shift right operation,
|
||||
The most significant bits of the result will be filled with the sign bit
|
||||
of <tt>var1</tt>.</p>
|
||||
of <tt>var1</tt>. If <tt>var2</tt> is (statically or dynamically) equal to or
|
||||
larger than the number of bits in <tt>var1</tt>, the result is undefined.
|
||||
</p>
|
||||
|
||||
<h5>Example:</h5>
|
||||
<pre>
|
||||
@ -2240,6 +2255,7 @@ of <tt>var1</tt>.</p>
|
||||
<result> = ashr i32 4, 2 <i>; yields {i32}:result = 1</i>
|
||||
<result> = ashr i8 4, 3 <i>; yields {i8}:result = 0</i>
|
||||
<result> = ashr i8 -2, 1 <i>; yields {i8}:result = -1</i>
|
||||
<result> = ashr i32 1, 32 <i>; undefined</i>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user