# Instructions

Instruction encoding is described in [Instruction encoding](https://docs.qualcomm.com/doc/80-N2040-60/topic/instruction-encoding.html).
For detailed descriptions of the Hexagon processor instructions,
see [Instruction set](https://docs.qualcomm.com/doc/80-N2040-60/topic/instruction-set.html).

## Hexagon processor instruction syntax

Note

The notation described here does not appear in actual
assembly language instructions. It is used only to specify the
instruction syntax and behavior.

Most Hexagon processor instructions have the following syntax:

dest = instr_name(source1,source2,...)[:option1][:option2]...
    Copy to clipboard

The item specified on the left-hand side (LHS) of the equation is
assigned the value specified by the right-hand side (RHS). For
example:

R2 = add(R3,R1) // Add R3 and R1, assign result to R2
    Copy to clipboard

- Courier New font is used for instructions
- Square brackets enclose optional items, for example, [:sat] means
that saturation is optional
- Braces indicate a choice of items. For example, {Rs,#s16}, means that
the instruction uses either Rs or a signed 16-bit immediate value.

Instruction symbols

| **Symbol** | **Example** | **Meaning** |
| --- | --- | --- |
| = | R2 = R3 | Assignment of RHS to LHS. |
| # | R1 = #1 | Immediate constant value. |
| ## | ##2147483647 | 32-bit immediate constant value. |
| 0x | 0xBABE | Hexadecimal number prefix. |
| mem**x** | R2 = mem**w**(R3) | Access memory. **x** specifies the size and type of access. |
| ; | R2 = R3; R4 = R5; | Instruction delimiter, or end of the instruction. |
| { … } | {R2 = R3; R5 = R6} | Instruction packet delimiter; indicates a group of parallel<br>instructions. |
| ( … ) | R2 = memw(R0 + #100) | Source list delimiter. |
| :endloop*X* | :endloop0 | Loop end. X specifies a loop instruction (0 or 1). |
| :t | if (P0.new) jump:t target | Direction hint (jump taken). |
| :nt | if (!P1.new) jump:nt target | Direction hint (jump not taken). |
| :sat | R2 = add(R1,R2):sat | Saturate the result. |
| :rnd | R2 = mpy(R1.H,R2.H):rnd | Round theresult. |
| :carry | R5:4=add(R1:0,R3:2,P1):carry | Predicate used as carry input and output. |
| :&lt;&lt;16 | R2 = add(R1.L,R2.L):&lt;&lt;16 | Shift the result left by a halfword. |
| :mem\_noshuf | {memw(R5) = R2;<br><br><br>R3 = memh(R6)}:mem\_noshuf | Inhibit load/store reordering ([Section 5.5](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#slot-1-store-with-slot-0-load)). |

### Numeric operands

[Instruction operands](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-tbl-instruction-operands) lists the notation that describes
numeric operands in the syntax and behavior of instructions.

Instruction operands

| **Symbol** | **Meaning** | **Min** | **Max** | **Example** |
| --- | --- | --- | --- | --- |
| #uN | Unsigned N-bit immediate value | 0 | 2^N-1^ | R2 = #u16 |
| #sN | Signed N-bit immediate value | -2^N-1^ | 2^N-1^-1 | R2 = add(R3,#s16) |
| #mN | Signed N-bit immediate value | -(2^N-1^-1) | 2^N-1^-1 | Rd = mpyi(Rs,#m9) |
| #uN:S | Unsigned N-bit immediate value representing integral multiples of 2S in specified range | 0 | (2^N-1^) x 2^S^ | R2 = memh(#u16:1) |
| #sN:S | Signed N-bit immediate value representing integral multiples of 2S in specified range | (-2^N-1^) x 2^S^ | (2^N-1^-1) x 2^S^ | Rd = memw(Rs++#s4:2) |
| #rN:S | Same as #sN:S, but value is offset from PC of current packet | (-2^N-1^) x 2^S^ | (2^N-1^-1) x 2^S^ | call #r22:2 |
| usat<sub>N</sub> | Saturate value to unsigned N-bit number | 0 | 2^N-1^ | usat<sub>16</sub>(Rs) |
| sat<sub>N</sub> | Saturate value to signed N-bit number | -2^N-1^ | 2^N-1^-1 | sat16(Rs) |
| sxt x-&gt;y | Sign-extend value from x to y bits | <ul class="simple"><br><li></li><br></ul> | <ul class="simple"><br><li></li><br></ul> | sxt32-&gt;64(Rs) |
| zxt x-&gt;y | Zero-extend value from x to y bits | <ul class="simple"><br><li></li><br></ul> | <ul class="simple"><br><li></li><br></ul> | zxt32-&gt;64(Rs) |
| >>><br>    Copy to clipboard | Logical right shift | <ul class="simple"><br><li></li><br></ul> | <ul class="simple"><br><li></li><br></ul> | Rss &gt;&gt;&gt; offset |

The #uN, #sN, and #mN symbols specify immediate operands in
instructions. The # symbol appears in the actual instruction to
indicate the immediate operand.

The #rN symbol specifies loop and branch destinations in
instructions. The # symbol does not appear in the program;
instead, the entire #rN symbol (including its :S suffix) represents
a loop or branch symbol whose numeric value is determined by the
assembler and linker.

For example:

call my_proc // programmed Instruction
    Copy to clipboard

is described in the instruction definitions as

call #r22:2 // #r22:2 -> scaled 22-bit PC-rel addr value
    Copy to clipboard

The :S suffix indicates that the S least-significant bits in a value
are implied zero bits and therefore not encoded in the instruction.
The implied zero bits are called scale bits. For example, #s4:2
denotes a signed immediate operand represented by four bits encoded
in the instruction, and two scale bits. The possible values for this
operand are -32, -28, -24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24, and 28.

The ## symbol specifies a 32-bit immediate operand in an instruction
(including a loop or branch destination). The ## symbol indicates the
operand in the actual instruction.

Examples of operand symbols:

Rd = add(Rs,#s16)      // #s16 -> signed 16-bit imm value
    Rd = memw(Rs++#s4:2)   // #s4:2 -> scaled signed 4-bit imm value
    call #r22:2            // #r22:2 -> scaled 22-bit PC-rel addr value
    Rd = ##u32             // ##u32 -> unsigned 32-bit imm value
    Copy to clipboard

Note

When an instruction contains more than one immediate
operand, the operand symbols are specified in upper and lowercase
(for example, #uN and #UN) to indicate where they appear in the
instruction encodings

### Terminology

[Data symbols](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-tbl-data-symbols) lists the symbols Hexagon processor
instruction names use to specify the supported data types.

Data symbols

| **Size** | **Symbol** | **Type** |
| --- | --- | --- |
| 8-bit | B | Byte |
| 8-bit | UB | Unsigned byte |
| 16-bit | H | Half word |
| 16-bit | UH | Unsigned half word |
| 32-bit | W | Word |
| 32-bit | UW | Unsigned word |
| 64-bit | D | Double word |

### Register operands

The following notation describes register operands in the syntax and
behavior of instructions:

Rds[.elst]
    Copy to clipboard

The ds field indicates the register operand type andbit size (as defined in
[Register symbols](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-tbl-register-symbols)).

| **Symbol** | **Operand type** | **Size (in bits)** |
| --- | --- | --- |
| d | Destination | 32 |
| dd | Destination | 64 |
| s | First source | 32 |
| ss | First source | 64 |
| t | Second source | 32 |
| tt | Second source | 64 |
| u | Third source | 32 |
| uu | Third source | 64 |
| x | Source *and* destination | 32 |
| xx | Source *and* destination | 64 |
|  |  |  |

Examples of the ds field that describe instruction syntax:

Rd = neg(Rs)         // Rd -> 32-bit dest, Rs 32-bit source
    Rd = xor(Rs,Rt)      // Rt -> 32-bit second source
    Rx = insert(Rs,Rtt)  // Rx -> both source and dest
    Copy to clipboard

Examples of the ds field that describe instruction behavior:

Rdd = Rss + Rtt // Rdd, Rss, Rtt -> 64-bit registers
    Copy to clipboard

The optional elst (element size and type) field specifies parts of a
register when the register is used as a vector. It can specify the
following values:

- A signed or unsigned byte, halfword, or word within the register
(as  defined in [register field symbols](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-fig-register-field-symbols))
- A bit field within the register (as defined in
[register bit field symbols](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-tbl-register-bit-field-symbols))

Examples of the elst field:

EA = Rt.h[1]              // .h[1] -> bit field 31:16 in Rt
    Pd = (Rss.u64 > Rtt.u64)  // .u64 -> unsigned 64-bit value
    Rd = mpyu(Rs.L,Rt.H)      // .L/.H -> low/high 16-bit fields
    Copy to clipboard

Note

The control and predicate registers use the same notation
as general registers, but are written as Cx and Px (respectively)
instead of Rx.

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by Microsoft Visio, SVG Export fig_reg_field_symbols.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="6.55in" height="4.31969in" viewbox="0 0 471.6 311.017" xml:space="preserve" color-interpolation-filters="sRGB" class="st7"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvConvertTheme"></v:ud>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: none; stroke: #2a2aea; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st2 { stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st3 { fill: #2a2aea; font-family: Roboto; font-size: 0.833336em; font-weight: bold }
.svg-1 .st4 { font-size: 1em }
.svg-1 .st5 { marker-start: url("#mrkr13-216"); stroke: #2a2aea; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st6 { fill: #2a2aea; fill-opacity: 1; stroke: #2a2aea; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st7 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend13">		<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"></path>	</g>	<marker id="mrkr13-216" class="st6" v:arrowtype="13" v:arrowsize="2" v:setback="10.2" refx="10.2" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend13" transform="scale(3.52) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="SchemeName" v:val="VT4(Default)"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape1-1" v:mid="1" v:groupcontext="shape" transform="translate(271.845,-116.176)">		<title>Rectangle.132</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape2-3" v:mid="2" v:groupcontext="shape" transform="translate(289.845,-119.199)">		<title>Sheet.2</title>		<desc>.h[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="7.72" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.h[0]</text>		</g>	<g id="shape3-7" v:mid="3" v:groupcontext="shape" transform="translate(199.845,-116.176)">		<title>Rectangle.23</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape4-9" v:mid="4" v:groupcontext="shape" transform="translate(55.845,-116.176)">		<title>Rectangle.133</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape5-11" v:mid="5" v:groupcontext="shape" transform="translate(127.845,-116.176)">		<title>Rectangle.134</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape6-13" v:mid="6" v:groupcontext="shape" transform="translate(66.9797,-271.417)">		<title>Sheet.6</title>		<desc>Rds.elst</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="44.6203" cy="300.217" width="89.25" height="21.6"></v:textrect>		<path d="M89.24 289.42 L0 289.42 L0 311.02 L89.24 311.02 L89.24 289.42" class="st2"></path>		<text x="26.3" y="303.22" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Rds.elst</text>		</g>	<g id="shape7-17" v:mid="7" v:groupcontext="shape" transform="translate(118.8,-203.79)">		<title>Sheet.7</title>		<desc>s, t, u = 32-bit source register d = 32-bit register destinat...</desc>		<v:textblock v:margins="rect(0,0,0,0)" v:verticalalign="0"></v:textblock>		<v:textrect cx="103.843" cy="279.39" width="207.69" height="63.2549"></v:textrect>		<path d="M207.69 247.76 L0 247.76 L0 311.02 L207.69 311.02 L207.69 247.76" class="st2"></path>		<text x="0" y="256.76" class="st3" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist>s, t, u <v:tabchar></v:tabchar><tspan dx="0.953em" class="st4">= 32</tspan>-bit source register<v:newlinechar></v:newlinechar><tspan x="0" dy="1.2em" class="st4">d <v:tabchar></v:tabchar></tspan><tspan dx="2.787em" class="st4"> </tspan>= 32-bit register destination<v:newlinechar></v:newlinechar><tspan x="0" dy="1.2em" class="st4">x <v:tabchar></v:tabchar></tspan><tspan dx="2.842em" class="st4"> </tspan>= 32-bit register source/destination<v:newlinechar></v:newlinechar><tspan x="0" dy="1.2em" class="st4">ss, tt, uu = 64</tspan>-bit source register pair<v:newlinechar></v:newlinechar><tspan x="0" dy="1.2em" class="st4">dd <v:tabchar></v:tabchar></tspan><tspan dx="2.224em" class="st4">= 64</tspan>-bit register destination <v:newlinechar></v:newlinechar><tspan x="0" dy="1.2em" class="st4">xx <v:tabchar></v:tabchar></tspan><tspan dx="2.333em" class="st4">= 64</tspan>-bit register source/destination</text>		</g>	<g id="shape8-31" v:mid="8" v:groupcontext="shape" transform="translate(217.845,-119.199)">		<title>Sheet.8</title>		<desc>.h[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="7.72" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.h[1]</text>		</g>	<g id="shape9-35" v:mid="9" v:groupcontext="shape" transform="translate(145.845,-119.199)">		<title>Sheet.9</title>		<desc>.h[2]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="7.72" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.h[2]</text>		</g>	<g id="shape10-39" v:mid="10" v:groupcontext="shape" transform="translate(69.345,-119.199)">		<title>Sheet.10</title>		<desc>.h[3]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.35" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.h[3]</text>		</g>	<g id="shape11-43" v:mid="11" v:groupcontext="shape" transform="translate(343.35,-119.199)">		<title>Sheet.11</title>		<desc>Signed halfwords</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="42.75" cy="305.04" width="85.5" height="11.9549"></v:textrect>		<path d="M85.5 299.06 L0 299.06 L0 311.02 L85.5 311.02 L85.5 299.06" class="st2"></path>		<text x="3.62" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Signed halfwords</text>		</g>	<g id="shape12-47" v:mid="12" v:groupcontext="shape" transform="translate(271.845,-89.1763)">		<title>Rectangle.44</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape13-49" v:mid="13" v:groupcontext="shape" transform="translate(289.845,-92.1988)">		<title>Sheet.13</title>		<desc>.uh[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="4.92" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uh[0]</text>		</g>	<g id="shape14-53" v:mid="14" v:groupcontext="shape" transform="translate(199.845,-89.1763)">		<title>Rectangle.46</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape15-55" v:mid="15" v:groupcontext="shape" transform="translate(55.845,-89.1763)">		<title>Rectangle.15</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape16-57" v:mid="16" v:groupcontext="shape" transform="translate(127.845,-89.1763)">		<title>Rectangle.48</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="72" height="18" class="st1"></rect>	</g>	<g id="shape17-59" v:mid="17" v:groupcontext="shape" transform="translate(217.845,-92.1988)">		<title>Sheet.17</title>		<desc>.uh[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="4.92" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uh[1]</text>		</g>	<g id="shape18-63" v:mid="18" v:groupcontext="shape" transform="translate(145.845,-92.1988)">		<title>Sheet.18</title>		<desc>.uh[2]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="17.6203" cy="305.04" width="35.25" height="11.9549"></v:textrect>		<path d="M35.24 299.06 L0 299.06 L0 311.02 L35.24 311.02 L35.24 299.06" class="st2"></path>		<text x="4.92" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uh[2]</text>		</g>	<g id="shape19-67" v:mid="19" v:groupcontext="shape" transform="translate(69.345,-92.1988)">		<title>Sheet.19</title>		<desc>.uh[3]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.55" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uh[3]</text>		</g>	<g id="shape20-71" v:mid="20" v:groupcontext="shape" transform="translate(329.85,-92.1988)">		<title>Sheet.20</title>		<desc>Unsigned halfwords</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="61.875" cy="305.04" width="123.75" height="11.9549"></v:textrect>		<path d="M123.75 299.06 L0 299.06 L0 311.02 L123.75 311.02 L123.75 299.06" class="st2"></path>		<text x="17.16" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Unsigned halfwords</text>		</g>	<g id="shape21-75" v:mid="21" v:groupcontext="shape" transform="translate(55.845,-170.176)">		<title>Rectangle.56</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape22-77" v:mid="22" v:groupcontext="shape" transform="translate(55.845,-173.199)">		<title>Sheet.22</title>		<desc>.b[7]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[7]</text>		</g>	<g id="shape23-81" v:mid="23" v:groupcontext="shape" transform="translate(326.475,-173.199)">		<title>Sheet.23</title>		<desc>Signed bytes</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="52.875" cy="305.04" width="105.75" height="11.9549"></v:textrect>		<path d="M105.75 299.06 L0 299.06 L0 311.02 L105.75 311.02 L105.75 299.06" class="st2"></path>		<text x="23.77" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Signed bytes</text>		</g>	<g id="shape24-85" v:mid="24" v:groupcontext="shape" transform="translate(91.845,-170.176)">		<title>Rectangle.24</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape25-87" v:mid="25" v:groupcontext="shape" transform="translate(91.845,-173.199)">		<title>Sheet.25</title>		<desc>.b[6]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[6]</text>		</g>	<g id="shape26-91" v:mid="26" v:groupcontext="shape" transform="translate(127.845,-170.176)">		<title>Rectangle.26</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape27-93" v:mid="27" v:groupcontext="shape" transform="translate(127.845,-173.199)">		<title>Sheet.27</title>		<desc>.b[5]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[5]</text>		</g>	<g id="shape28-97" v:mid="28" v:groupcontext="shape" transform="translate(163.845,-170.176)">		<title>Rectangle.58</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape29-99" v:mid="29" v:groupcontext="shape" transform="translate(163.845,-173.199)">		<title>Sheet.29</title>		<desc>.b[4]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[4]</text>		</g>	<g id="shape30-103" v:mid="30" v:groupcontext="shape" transform="translate(199.845,-170.176)">		<title>Rectangle.30</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape31-105" v:mid="31" v:groupcontext="shape" transform="translate(199.845,-173.199)">		<title>Sheet.31</title>		<desc>.b[3]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[3]</text>		</g>	<g id="shape32-109" v:mid="32" v:groupcontext="shape" transform="translate(235.845,-170.176)">		<title>Rectangle.64</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape33-111" v:mid="33" v:groupcontext="shape" transform="translate(235.845,-173.199)">		<title>Sheet.33</title>		<desc>.b[2]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[2]</text>		</g>	<g id="shape34-115" v:mid="34" v:groupcontext="shape" transform="translate(271.845,-170.176)">		<title>Rectangle.66</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape35-117" v:mid="35" v:groupcontext="shape" transform="translate(271.845,-173.199)">		<title>Sheet.35</title>		<desc>.b[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[1]</text>		</g>	<g id="shape36-121" v:mid="36" v:groupcontext="shape" transform="translate(307.845,-170.176)">		<title>Rectangle.68</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape37-123" v:mid="37" v:groupcontext="shape" transform="translate(307.845,-173.199)">		<title>Sheet.37</title>		<desc>.b[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="10.34" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.b[0]</text>		</g>	<g id="shape38-127" v:mid="38" v:groupcontext="shape" transform="translate(55.845,-143.176)">		<title>Rectangle.70</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape39-129" v:mid="39" v:groupcontext="shape" transform="translate(55.845,-146.199)">		<title>Sheet.39</title>		<desc>.ub[7]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[7]</text>		</g>	<g id="shape40-133" v:mid="40" v:groupcontext="shape" transform="translate(330.975,-146.199)">		<title>Sheet.40</title>		<desc>Unsigned bytes</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="52.875" cy="305.04" width="105.75" height="11.9549"></v:textrect>		<path d="M105.75 299.06 L0 299.06 L0 311.02 L105.75 311.02 L105.75 299.06" class="st2"></path>		<text x="18.18" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Unsigned bytes</text>		</g>	<g id="shape41-137" v:mid="41" v:groupcontext="shape" transform="translate(91.845,-143.176)">		<title>Rectangle.73</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape42-139" v:mid="42" v:groupcontext="shape" transform="translate(91.845,-146.199)">		<title>Sheet.42</title>		<desc>.ub[6]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[6]</text>		</g>	<g id="shape43-143" v:mid="43" v:groupcontext="shape" transform="translate(127.845,-143.176)">		<title>Rectangle.75</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape44-145" v:mid="44" v:groupcontext="shape" transform="translate(127.845,-146.199)">		<title>Sheet.44</title>		<desc>.ub[5]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[5]</text>		</g>	<g id="shape45-149" v:mid="45" v:groupcontext="shape" transform="translate(163.845,-143.176)">		<title>Rectangle.77</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape46-151" v:mid="46" v:groupcontext="shape" transform="translate(163.845,-146.199)">		<title>Sheet.46</title>		<desc>.ub[4]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[4]</text>		</g>	<g id="shape47-155" v:mid="47" v:groupcontext="shape" transform="translate(199.845,-143.176)">		<title>Rectangle.79</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape48-157" v:mid="48" v:groupcontext="shape" transform="translate(199.845,-146.199)">		<title>Sheet.48</title>		<desc>.ub[3]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[3]</text>		</g>	<g id="shape49-161" v:mid="49" v:groupcontext="shape" transform="translate(235.845,-143.176)">		<title>Rectangle.81</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape50-163" v:mid="50" v:groupcontext="shape" transform="translate(235.845,-146.199)">		<title>Sheet.50</title>		<desc>.ub[2]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[2]</text>		</g>	<g id="shape51-167" v:mid="51" v:groupcontext="shape" transform="translate(271.845,-143.176)">		<title>Rectangle.83</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape52-169" v:mid="52" v:groupcontext="shape" transform="translate(271.845,-146.199)">		<title>Sheet.52</title>		<desc>.ub[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[1]</text>		</g>	<g id="shape53-173" v:mid="53" v:groupcontext="shape" transform="translate(307.845,-143.176)">		<title>Rectangle.85</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="36" height="18" class="st1"></rect>	</g>	<g id="shape54-175" v:mid="54" v:groupcontext="shape" transform="translate(307.845,-146.199)">		<title>Sheet.54</title>		<desc>.ub[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="7.54" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.ub[0]</text>		</g>	<g id="shape55-179" v:mid="55" v:groupcontext="shape" transform="translate(55.845,-62.1763)">		<title>Rectangle.87</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="144" height="18" class="st1"></rect>	</g>	<g id="shape56-181" v:mid="56" v:groupcontext="shape" transform="translate(105.345,-65.1988)">		<title>Sheet.56</title>		<desc>.w[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="9.48" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.w[1]</text>		</g>	<g id="shape57-185" v:mid="57" v:groupcontext="shape" transform="translate(199.845,-62.1763)">		<title>Rectangle.89</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="144" height="18" class="st1"></rect>	</g>	<g id="shape58-187" v:mid="58" v:groupcontext="shape" transform="translate(249.345,-65.1988)">		<title>Sheet.58</title>		<desc>.w[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="9.48" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.w[0]</text>		</g>	<g id="shape59-191" v:mid="59" v:groupcontext="shape" transform="translate(329.85,-65.1988)">		<title>Sheet.59</title>		<desc>Signed words</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="49.5" cy="305.04" width="99" height="11.9549"></v:textrect>		<path d="M99 299.06 L0 299.06 L0 311.02 L99 311.02 L99 299.06" class="st2"></path>		<text x="18.97" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Signed words</text>		</g>	<g id="shape60-195" v:mid="60" v:groupcontext="shape" transform="translate(55.845,-35.1763)">		<title>Rectangle.92</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="144" height="18" class="st1"></rect>	</g>	<g id="shape61-197" v:mid="61" v:groupcontext="shape" transform="translate(105.345,-38.1988)">		<title>Sheet.61</title>		<desc>.uw[1]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="6.68" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uw[1]</text>		</g>	<g id="shape62-201" v:mid="62" v:groupcontext="shape" transform="translate(199.845,-35.1763)">		<title>Rectangle.94</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<rect x="0" y="293.017" width="144" height="18" class="st1"></rect>	</g>	<g id="shape63-203" v:mid="63" v:groupcontext="shape" transform="translate(249.345,-38.1988)">		<title>Sheet.63</title>		<desc>.uw[0]</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="20.25" cy="305.04" width="40.5" height="11.9549"></v:textrect>		<path d="M40.5 299.06 L0 299.06 L0 311.02 L40.5 311.02 L40.5 299.06" class="st2"></path>		<text x="6.68" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>.uw[0]</text>		</g>	<g id="shape64-207" v:mid="64" v:groupcontext="shape" transform="translate(332.1,-38.1988)">		<title>Sheet.64</title>		<desc>Unsigned words</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="52.875" cy="305.04" width="105.75" height="11.9549"></v:textrect>		<path d="M105.75 299.06 L0 299.06 L0 311.02 L105.75 311.02 L105.75 299.06" class="st2"></path>		<text x="16.75" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Unsigned words</text>		</g>	<g id="shape65-211" v:mid="65" v:groupcontext="shape" transform="translate(422.617,33.5549) rotate(90)">		<title>Sheet.65</title>		<path d="M10.2 311.02 L10.56 311.02 L78.05 311.02" class="st5"></path>	</g>	<g id="shape66-217" v:mid="66" v:groupcontext="shape" transform="translate(18,-209.199)">		<title>Sheet.66</title>		<desc>Rds.elst</desc>		<v:textblock v:margins="rect(0,0,0,0)"></v:textblock>		<v:textrect cx="32.4" cy="305.04" width="64.81" height="11.9549"></v:textrect>		<path d="M64.8 299.06 L0 299.06 L0 311.02 L64.8 311.02 L64.8 299.06" class="st2"></path>		<text x="14.08" y="308.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Rds.elst</text>		</g>	<g id="shape67-221" v:mid="67" v:groupcontext="shape" transform="translate(357.817,101.819) rotate(90)">		<title>Sheet.67</title>		<path d="M10.2 311.02 L10.56 311.02 L180.07 311.02" class="st5"></path>	</g></g>
</svg>

**Register field symbols**

| Symbol | Meaning |
| --- | --- |
| .sN | Bits [N-1:0] are treated as a N-bit signed number.<br><br><br>For example, R0.s16 means that the least significant 16-bits of R0 are treated as a 16-bit signed number. |
| .uN | Bits [N-1:0] are treated as a N-bit unsigned number. |
| .H | Most-significant 16 bits of a 32-bit register. |
| .L | Least-significant 16 bits of a 32-bit register. |

## Instruction classes

The Hexagon processor instructions assigns instructions to
instruction classes. Classes determine the combinations of
instructions that execute in parallel
([instruction packets](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-instruction-packets)).
[Instruction classes and subclasses](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-tbl-instruction-classes-and-subclasses)
lists the instruction classes and how they form instruction packets.

Instruction classes logically correspond with instruction types, so
they serve as mnemonics for looking up specific instructions. For
instance, the ALU32 class contains ALU instructions that operate on
32-bit operands.

| **Class** | **Subclass** | **Description** |
| --- | --- | --- |
| [ALU32](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32) |  | 32-bit ALU operations |
| [ALU32](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32) | [ALU32 ALU](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32-alu) | Arithmetic and logical |
| [ALU32](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32) | [ALU32 PERM](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32-perm) | Permute |
| [ALU32](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32) | [ALU32 PRED](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#alu32-pred) | Predicate operations |
| [CR](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#cr) |  | Control register access and loops |
| [JR](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#jr) |  | Jumps (register indirect addressing mode) |
| [J](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#j) |  | Jumps (PC-relative addressing mode) |
| [LD](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#ld) |  | Memory load operations |
| [MEMOP](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#memop) |  | Memory operations |
| [NV](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#nv) |  | New-value operations |
| [NV](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#nv) | [NV J](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#nv-j) | New-value jumps |
| [NV](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#nv) | [NV ST](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#nv-st) | New-value stores |
| [ST](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#st) |  | Memory store operations; allocate stack frame |
| [System](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#system) |  | Operating system access |
| [System](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#system) | [System user](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#system-user) | Application-level access |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) |  | Assorted operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE ALU](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-alu) | 64-bit ALU operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE bit](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-bit) | Bit operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE complex](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-complex) | Complex math (using real and imaginary numbers) |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE FP](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-fp) | Floating point operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE MPY](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-mpy) | Multiply operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE perm](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-perm) | Vector permute and format conversion (pack, splat, swizzle) |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE PRED](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-pred) | Predicate operations |
| [XTYPE](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype) | [XTYPE SHIFT](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#xtype-shift) | Shift operations (with optional ALU operations) |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |

## Instruction packets

Hexagon groups instructions into very long instruction word (VLIW)
packets for parallel execution, where each packet contains one to four
instructions. A program can contain packets of varying lengths. Hexagon
executes individual instructions, which are not explicitly grouped
in packets, as packets containing a single instruction.

Vector instructions operate on single instruction multiple data
(SIMD) vectors.

Software explicitly defines instruction packets. Instruction
packets are expressed in assembly language by enclosing groups of
instructions in curly braces.

For example, two instructions grouped in a packet:

{ R0 = R1; R2 = R3 }
    Copy to clipboard

Four instructions grouped in a packet:

{
       R8 = memh(R3++#2);
       R12 = memw(R1++#4);
       R = mpy(R10,R6):<<1:sat;
       R7 = add(R9,#2);
    }
    Copy to clipboard

Packets have restrictions on instruction combinations. The
instruction class of the instructions in a packet determines the
primary restriction. Packet formation is subject to the following
constraints:

- [Resource constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-resource-constraints) determine how many
instructions of a specific type can appear in a packet.

    - The Hexagon processor has a fixed number of execution units.
    - Each instruction executes on a particular type of unit and each unit can process at most one instruction at a time.
    - For example: the Hexagon processor contains only two load units so an instruction packet with three load instructions is invalid.
- [Grouping constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-grouping-constraints) are a small set of
rules that apply beyond the resource constraints.
- [Dependency constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-instructions-dependency-constraints) ensure that no
write-after-write hazards exist in a packet.
- [Ordering constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-ordering-constraints) dictate the ordering
of instructions within a packet.
- [Alignment constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-alignment-constraints) dictate the
placement of packets in memory.

### Packet execution semantics

Packets are defined to have parallel execution semantics. The
following defines the execution behavior of a packet:

- Instructions in the packet read their source registers in
parallel.
- Instructions in the packet execute.
- Instructions in the packet write their destination registers
in parallel. For example, consider the following packet:

{
           R2 = R3;
           R3 = R2;
        }
        Copy to clipboard

In the first phase, registers R3 and R2 are read from the register
file. After execution, R2 is written with the old value of R3 and R3
is written with the old value of R2. The result of this packet is the
swap of the values of R2 and R3.

Note

[Dual stores](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#dual-stores),
[Dual jumps](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#dual-jumps),
[New-value stores](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#new-value-stores),
[New-value compare jumps](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#new-value-compare-jumps),
and [Dot-new predicates](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#dot-new-predicates)
have non-parallel execution semantics.

### Sequencing semantics

Packets of any length can freely mix in code. A packet is
an atomic unit: in essence, a single large instruction. From the
program perspective, a packet either executes to completion or not at
all; it never partially executes. For example, if a packet causes a
memory exception, Hexagon establishes the exception point before the
packet.

A packet containing multiple load/store instructions can require
service from the external system. For instance, consider a packet
that performs two load operations that both miss in the cache.

The packet requires the memory system to supply the data:

- From the memory system perspective, the two resulting load requests
are processed serially.
- From the program perspective, however, both load operations must
complete before the packet can complete.

Thus, the packet is atomic from the program perspective.

Packets have a single PC address, which is the address of the start
of the packet. Branch instructions cannot branch into the middle of a
packet.

Architecturally, packets execute to completion—including updating
all registers and memory—before the next packet begins. As a
result, application programs are not exposed to any pipeline
artifacts.

### Resource constraints

A packet cannot use more hardware resources than are physically
available on the processor. For instance, the Hexagon
processor has only two load units; so a packet with three load
instructions is invalid. The behavior of such a packet is undefined.
The assembler automatically rejects packets that oversubscribe the
hardware resources.

The processor supports up to four parallel instructions. The
instructions execute in four parallel pipelines, which are referred
to as slots. The four slots are named Slot 0, Slot 1, Slot 2, and
Slot 3.

Note

The endloopN instructions ([loop end](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-loop-end))
do not use any slots.

Each instruction belongs to specific [instruction classes](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-instruction-classes).
For example, jumps belong to instruction class J and loads belong to instruction class LD.
The class of an instruction determines the slot in which the instruction can execute.

[Packet grouping combinations](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-fig-packet-grouping-combinations)
shows which instruction classes can be assigned to each of the four slots.

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by Microsoft Visio, SVG Export fig_instr_slots.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="6.80833in" height="6.40333in" viewbox="0 0 490.2 461.04" xml:space="preserve" color-interpolation-filters="sRGB" class="st8"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>		<v:ud v:nameu="msvConvertTheme"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-2 .st1 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-2 .st2 { fill: #2a2aea; font-family: Roboto; font-size: 0.833336em; font-style: italic; font-weight: bold }
.svg-2 .st3 { font-size: 1em; text-decoration: underline }
.svg-2 .st4 { font-size: 1em; font-style: normal; font-weight: normal }
.svg-2 .st5 { fill: none; stroke: #2a2aea; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-2 .st6 { fill: #2a2aea; font-family: Roboto; font-size: 0.833336em; font-weight: bold }
.svg-2 .st7 { font-size: 1em; font-weight: normal }
.svg-2 .st8 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="SchemeName" v:val="VT4(Default)"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape1-1" v:mid="1" v:groupcontext="shape" transform="translate(55.2328,-18.12)">		<title>Rectangle.1</title>		<desc>XTYPE instructions (32/64-bit) Arithmetic, logical, bit manip...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104.884" cy="312.203" width="209.77" height="297.674"></v:textrect>		<rect x="0" y="163.366" width="209.768" height="297.674" class="st1"></rect>		<text x="4" y="183.2" class="st2" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist><tspan class="st3">XTYPE instructions (32/64</tspan><tspan class="st3">-</tspan><tspan class="st3">bit)<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">Arithmetic, logical, bit manipulation<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Multiply (integer, fractional, complex)<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Floating</tspan><tspan class="st4">-</tspan><tspan class="st4">point operations<v:newlinechar></v:newlinechar><v:paragraph></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">Permute/vector permute operations<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Predicate operations<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Shift / shift with add/sub/logical<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">Vector byte ALU<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Vector halfword (ALU, shift, multiply)<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Vector word (ALU, shift)<v:newlinechar></v:newlinechar><v:paragraph></v:paragraph><v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="2.4em" class="st3">ALU32 instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Arithmetic/logical (32</tspan><tspan class="st4">-</tspan><tspan class="st4"> </tspan><tspan class="st4">bit)<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Vector halfword  <v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="2.4em" class="st3">CR instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Control register transfers<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Hardware loop setup<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Predicate logicals and reductions<v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar><v:paragraph></v:paragraph></tspan><tspan x="4" dy="2.4em" class="st3">NV instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">New</tspan><tspan class="st4">-</tspan><tspan class="st4">value jumps<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">New</tspan><tspan class="st4">-</tspan><tspan class="st4">value stores </tspan> </text>		</g>	<g id="shape2-35" v:mid="2" v:groupcontext="shape" transform="translate(251.611,-333.835)">		<title>Rectangle.11</title>		<desc>Slot 2 XTYPE instructions ALU32 instructions J instructions J...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.7867" cy="406.498" width="107.58" height="109.085"></v:textrect>		<rect x="0" y="351.955" width="107.573" height="109.085" class="st5"></rect>		<text x="40.76" y="367.5" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist><tspan class="st3">Slot 2</tspan><v:newlinechar></v:newlinechar><v:paragraph></v:paragraph><tspan x="4" dy="1.2em" class="st7">XTYPE instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">ALU32 instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">J instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">JR instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">Some system </tspan><tspan x="4" dy="1.2em" class="st7">instructions</tspan><v:newlinechar></v:newlinechar></text>		</g>	<g id="shape3-45" v:mid="3" v:groupcontext="shape" transform="translate(364.507,-332.995)">		<title>Rectangle.12</title>		<desc>Slot 3 XTYPE instructions ALU32 instructions J instructions C...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.7867" cy="406.498" width="107.58" height="109.085"></v:textrect>		<rect x="0" y="351.955" width="107.573" height="109.085" class="st5"></rect>		<text x="40.76" y="367.5" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist><tspan class="st3">Slot 3</tspan><v:newlinechar></v:newlinechar><v:paragraph></v:paragraph><tspan x="4" dy="1.2em" class="st7">XTYPE instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">ALU32 instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">J instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">CR instructions</tspan><v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar></text>		</g>	<g id="shape4-53" v:mid="4" v:groupcontext="shape" transform="translate(18.12,-333.835)">		<title>Rectangle.13</title>		<desc>Slot 0 LD instructions ST instructions ALU32 instructions MEM...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="57.2291" cy="406.917" width="114.46" height="108.245"></v:textrect>		<rect x="0" y="352.795" width="114.458" height="108.245" class="st5"></rect>		<text x="44.2" y="367.92" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist><tspan class="st3">Slot 0</tspan><v:newlinechar></v:newlinechar><v:paragraph></v:paragraph><tspan x="4" dy="1.2em" class="st7">LD instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">ST instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">ALU32 instructions <v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">MEMOP instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">NV instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">System instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7">Some J instructions</tspan></text>		</g>	<g id="shape5-64" v:mid="5" v:groupcontext="shape" transform="translate(138.387,-334.239)">		<title>Rectangle.14</title>		<desc>Slot 1 LD instructions ST instructions ALU32 instructions Som...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.7867" cy="407.119" width="107.58" height="107.842"></v:textrect>		<rect x="0" y="353.198" width="107.573" height="107.842" class="st5"></rect>		<text x="40.76" y="368.12" class="st6" v:langid="0"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist><tspan class="st3">Slot 1</tspan><v:newlinechar></v:newlinechar><v:paragraph></v:paragraph><tspan x="4" dy="1.2em" class="st7" v:langid="1033">LD instructions<v:lf></v:lf></tspan><tspan x="4" dy="1.2em" class="st7" v:langid="1033">ST instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7" v:langid="1033">ALU32 instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st7" v:langid="1033">Some J instructions </tspan> <v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar></text>		</g>	<g id="shape6-72" v:mid="6" v:groupcontext="shape" transform="translate(275.221,-27.1404)">		<title>Rectangle.2</title>		<desc>J instructions Jump/call PC-relative JR instructions Jump/cal...</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(10):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="91.4374" cy="312.514" width="182.88" height="297.053"></v:textrect>		<rect x="0" y="163.987" width="182.875" height="297.053" class="st1"></rect>		<text x="4" y="189.51" class="st2" v:langid="1033"><v:paragraph></v:paragraph><v:tablist></v:tablist><tspan class="st3">J instructions</tspan><v:newlinechar></v:newlinechar><tspan x="4" dy="1.2em" class="st4" v:langid="0">Jump/</tspan><tspan class="st4">c</tspan><tspan class="st4" v:langid="0">all PC</tspan><tspan class="st4" v:langid="0">-</tspan><tspan class="st4" v:langid="0">relative<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0"></v:paragraph><v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="2.4em" class="st3" v:langid="0">JR </tspan><tspan class="st3">i</tspan><tspan class="st3" v:langid="0">nstructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Jump/call register<v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="2.4em" class="st3">LD instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Loads (8/16/32/64</tspan><tspan class="st4">-</tspan><tspan class="st4">bit)<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">Deallocframe<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0"></v:paragraph><v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="2.4em" class="st3">ST instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Stores (8/16/32/64</tspan><tspan class="st4">-</tspan><tspan class="st4">bit)<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="1.2em" class="st4">Allocframe<v:newlinechar></v:newlinechar><v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="2.4em" class="st3">MEMOP instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Operation on memory (8/16/32</tspan><tspan class="st4">-</tspan><tspan class="st4">bit)<v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0"></v:paragraph><v:newlinechar></v:newlinechar><v:paragraph v:bulletsize="0.0138889"></v:paragraph></tspan><tspan x="4" dy="2.4em" class="st3">SYSTEM instructions<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Prefetch<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Cache maintenance<v:newlinechar></v:newlinechar></tspan><tspan x="4" dy="1.2em" class="st4">Bus operations </tspan> <v:newlinechar></v:newlinechar></text>		</g></g>
</svg>

**Figure 3-2 Packet grouping combinations**

### Grouping constraints

A few restrictions determine what constitutes a valid packet. The
assembler ensures that packets follow valid grouping rules. If a
packet executes that violates a grouping rule, the behavior is
undefined. The following rules must be followed:

- Dot-new conditional instructions ([dot-new predicates](https://docs.qualcomm.com/doc/80-N2040-60/topic/conditional-execution.html#v79-prm-dot-new-predicates))
must be grouped in a packet with an instruction that generates dot-new predicates.
- ST-class instructions can be placed in Slot 1. In this case, Slot 0 normally must
contain a second ST-class instruction ([dual stores](https://docs.qualcomm.com/doc/80-N2040-60/topic/memory.html#v79-prm-dual-stores)).
- J-class instructions can be placed in Slots 2 or 3. However, only
certain combinations of program flow instructions (J or JR) can be
grouped in a packet ([dual jumps](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-dual-jumps)). Otherwise, at
most one program flow instruction is allowed in a packet. Some Jump
and compare-Jump instructions can execute on slots 0 or 1, excluding
calls, such as the following:

    - Instructions of the form “Pd=cmp.xx(); if(Pd.new)jump:hint&lt;target&gt;”
    - Instructions of the form “If(Pd[.new]) jump[:hint] &lt;target&gt;”
- The “jump&lt;target&gt;”” instruction
- JR-class instructions can be placed in Slot 2. However, when encoded
in a duplex jumpr R31 instruction can be placed in Slot 0
([duplexes](https://docs.qualcomm.com/doc/80-N2040-60/topic/instruction-encoding.html#v79-prm-duplexes)).
- Restrictions limit the instructions that can appear in a packet at
the setup or end of a hardware loop ([pipelined hardware loops](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-pipelined-hardware-loops)).
- A transfer to USR cannot
be grouped with a floating point instruction ([user status register](https://docs.qualcomm.com/doc/80-N2040-60/topic/registers.html#v79-prm-user-status-register)).
- The SYSTEM-class instructions include prefetch, cache operations, bus
operations, load locked, and store conditional instructions
([cache memory](https://docs.qualcomm.com/doc/80-N2040-60/topic/memory.html#v79-prm-cache-memory)). These instructions have the following
grouping rules:

    - The brkpt, trap, pause, icinva, isync, and syncht instructions are
solo instructions. They must not be grouped with other
instructions in a packet.
    - The memw\_locked, memd\_locked, l2fetch, and trace instructions must
execute on Slot 0. They must be grouped only with ALU32 or
(non-FP) XTYPE instructions.
    - The dccleana, dcinva, dccleaninva, and dczeroa instructions must
execute on Slot 0. Slot 1 must be empty or an ALU32 instruction.

### Dependency constraints

Instructions in a packet cannot write to the same destination
register. The assembler automatically flags such packets as invalid.
If the processor executes a packet with two writes to the same
general register, the processor raises an error exception.

If the processor executes a packet that performs multiple writes to
the same predicate or control register, the behavior is undefined.
Three special cases exist for this rule:

- Conditional writes are only allowed to target the same destination
register when at most one of the writes is performed
([dependency constraints](https://docs.qualcomm.com/doc/80-N2040-60/topic/conditional-execution.html#v79-prm-conditional-dependency-constraints)).
- The overflow flag in the status register has defined behavior when
multiple instructions write to it
([user status register](https://docs.qualcomm.com/doc/80-N2040-60/topic/registers.html#v79-prm-user-status-register)). Do not group instructions that
write to the entire user status register (for example, USR = R2) in a
packet with any instruction that writes to a bit in the user status
register.
- Multiple compare instructions may target the same
predicate register to perform a logical AND of the results
([auto-and predicates](https://docs.qualcomm.com/doc/80-N2040-60/topic/conditional-execution.html#v79-prm-auto-and-predicates)).

### Ordering constraints

In assembly code, instructions can appear in a packet in any order
except for [dual jumps](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-dual-jumps). The assembler
automatically encodes instructions in the packet in the proper order.

In the binary encoding of a packet, the instructions must be ordered
from Slot 3 down to Slot 0. If the packet contains fewer than four
instructions, any unused slot is skipped—a NOP is unnecessary as
the hardware handles the proper spacing of the instructions.

In memory, instructions in a packet must appear in strictly
decreasing slot order. Additionally, if an instruction can go in a
higher-numbered slot, and that slot is empty, it must move into the
higher- numbered slot.

For example, if a packet contains three instructions and slot 1 is
not used, encode the instructions in the packet as follows:

- Slot 3 instruction at the lowest address
- Slot 2 instruction follows the Slot 3 instruction
- Slot 0 instructions at the last (highest) address

If a packet contains a single load or store instruction, that
instruction must go in Slot 0, which is the highest address. As an
example, a packet that contains both LD and ALU32 instructions must
be ordered so the LD is in Slot 0 and the ALU32 in another slot.

### Alignment constraints

Packets have the following constraints on their placement or
alignment in memory:

- Packets must be word-aligned (32-bit). If the processor executes an
improperly aligned packet, it raises an error exception
([exceptions](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-program-flow-exceptions)).
- Packets should not wrap the address space. If address wraparound
occurs, the processor behavior is undefined.

No other core-based restrictions exist for code placement or
alignment.

If the processor branches to a packet that crosses a 16-byte address
boundary, the resulting instruction fetch stalls for one cycle.
Packets that are jump targets or loop body entries can be explicitly
aligned to ensure that this stall does not occur
([branches to and from packets](https://docs.qualcomm.com/doc/80-N2040-60/topic/program-flow.html#v79-prm-branches-to-and-from-packets)).

## Instruction intrinsics

To support efficient coding of the time-critical sections of a
program (without resorting to assembly language), the C compilers
support intrinsics that directly express Hexagon processor
instructions from within C code.

For example:

int main()
    
    {
       long long v1 = 0xFFFF0000FFFF0000LL;
       long long v2 = 0x0000FFFF0000FFFFLL;
       long long result;
    
       // Find the minimum for each half-word in a 64-bit vector
       result = Q6_P_vminh_PP(v1,v2);
    }
    Copy to clipboard

Intrinsics are defined for most of the Hexagon processor
instructions.

## Compound instructions

The Hexagon processor supports compound instructions, which encode
pairs of common operations in a single instruction. For example, each
of the following is a single compound instruction:

dealloc_return                  // Deallocate frame and return
    R2 &= and(R1, R0)               // And and and
    R7 = add(R4, sub(#15, R3))      // Subtract and add
    R3 = sub(#20, asl(R3, #16))     // Shift and subtract
    R5 = add(R2, mpyi(#8, R4))      // Multiply and add
    {                               // Compare and jump
       P0 = cmp.eq (R2, R5)
       if (P0.new) jump:nt target
    }
    {                               // Register transfer and jump
       R2 = #15
       jump target
    }
    Copy to clipboard

Compound instructions reduce code size and improve code performance.

Note

Compound instructions (except for X-and-jump as shown here)
have distinct assembly syntax from the instructions they are composed of.

## Duplex instructions

To reduce code size, the Hexagon processor supports duplex
instructions, which encode pairs of common instructions in a 32-bit
instruction container.

Unlike [compound instructions](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html#v79-prm-compound-instructions),
duplex instructions do not have distinct syntax - in assembly code they
appear identical to the instructions they are composed of. The
assembler is responsible for recognizing when a pair of instructions
can be encoded as a single duplex rather than a pair of regular
instruction words.

To fit two instructions into a single 32-bit word,
[duplexes](https://docs.qualcomm.com/doc/80-N2040-60/topic/instruction-encoding.html#v79-prm-duplexes) are limited to a subset of the most common
instructions (load, store, branch, ALU), and the most common register
operands.

Last Published: Jan 16, 2025

[Previous Topic
Registers](https://docs.qualcomm.com/bundle/publicresource/80-N2040-60/topics/registers.md) [Next Topic
Data processing](https://docs.qualcomm.com/bundle/publicresource/80-N2040-60/topics/data-processing.md)

Source: [https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html](https://docs.qualcomm.com/doc/80-N2040-60/topic/instructions.html)