You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

237 line
10KB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- This file documents the GNU Assembler "as".
  4. Copyright (C) 1991-2020 Free Software Foundation, Inc.
  5. Permission is granted to copy, distribute and/or modify this document
  6. under the terms of the GNU Free Documentation License, Version 1.3
  7. or any later version published by the Free Software Foundation;
  8. with no Invariant Sections, with no Front-Cover Texts, and with no
  9. Back-Cover Texts. A copy of the license is included in the
  10. section entitled "GNU Free Documentation License".
  11. -->
  12. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  13. <head>
  14. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  15. <title>V850 Opcodes (Using as)</title>
  16. <meta name="description" content="V850 Opcodes (Using as)">
  17. <meta name="keywords" content="V850 Opcodes (Using as)">
  18. <meta name="resource-type" content="document">
  19. <meta name="distribution" content="global">
  20. <meta name="Generator" content="makeinfo">
  21. <link href="index.html#Top" rel="start" title="Top">
  22. <link href="AS-Index.html#AS-Index" rel="index" title="AS Index">
  23. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  24. <link href="V850_002dDependent.html#V850_002dDependent" rel="up" title="V850-Dependent">
  25. <link href="Vax_002dDependent.html#Vax_002dDependent" rel="next" title="Vax-Dependent">
  26. <link href="V850-Directives.html#V850-Directives" rel="prev" title="V850 Directives">
  27. <style type="text/css">
  28. <!--
  29. a.summary-letter {text-decoration: none}
  30. blockquote.indentedblock {margin-right: 0em}
  31. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  32. blockquote.smallquotation {font-size: smaller}
  33. div.display {margin-left: 3.2em}
  34. div.example {margin-left: 3.2em}
  35. div.lisp {margin-left: 3.2em}
  36. div.smalldisplay {margin-left: 3.2em}
  37. div.smallexample {margin-left: 3.2em}
  38. div.smalllisp {margin-left: 3.2em}
  39. kbd {font-style: oblique}
  40. pre.display {font-family: inherit}
  41. pre.format {font-family: inherit}
  42. pre.menu-comment {font-family: serif}
  43. pre.menu-preformatted {font-family: serif}
  44. pre.smalldisplay {font-family: inherit; font-size: smaller}
  45. pre.smallexample {font-size: smaller}
  46. pre.smallformat {font-family: inherit; font-size: smaller}
  47. pre.smalllisp {font-size: smaller}
  48. span.nolinebreak {white-space: nowrap}
  49. span.roman {font-family: initial; font-weight: normal}
  50. span.sansserif {font-family: sans-serif; font-weight: normal}
  51. ul.no-bullet {list-style: none}
  52. -->
  53. </style>
  54. </head>
  55. <body lang="en">
  56. <a name="V850-Opcodes"></a>
  57. <div class="header">
  58. <p>
  59. Previous: <a href="V850-Directives.html#V850-Directives" accesskey="p" rel="prev">V850 Directives</a>, Up: <a href="V850_002dDependent.html#V850_002dDependent" accesskey="u" rel="up">V850-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
  60. </div>
  61. <hr>
  62. <a name="Opcodes-19"></a>
  63. <h4 class="subsection">9.49.5 Opcodes</h4>
  64. <a name="index-V850-opcodes"></a>
  65. <a name="index-opcodes-for-V850"></a>
  66. <p><code>as</code> implements all the standard V850 opcodes.
  67. </p>
  68. <p><code>as</code> also implements the following pseudo ops:
  69. </p>
  70. <dl compact="compact">
  71. <dd>
  72. <a name="index-hi0-pseudo_002dop_002c-V850"></a>
  73. </dd>
  74. <dt><code>hi0()</code></dt>
  75. <dd><p>Computes the higher 16 bits of the given expression and stores it into
  76. the immediate operand field of the given instruction. For example:
  77. </p>
  78. <p>&lsquo;<samp>mulhi hi0(here - there), r5, r6</samp>&rsquo;
  79. </p>
  80. <p>computes the difference between the address of labels &rsquo;here&rsquo; and
  81. &rsquo;there&rsquo;, takes the upper 16 bits of this difference, shifts it down 16
  82. bits and then multiplies it by the lower 16 bits in register 5, putting
  83. the result into register 6.
  84. </p>
  85. <a name="index-lo-pseudo_002dop_002c-V850"></a>
  86. </dd>
  87. <dt><code>lo()</code></dt>
  88. <dd><p>Computes the lower 16 bits of the given expression and stores it into
  89. the immediate operand field of the given instruction. For example:
  90. </p>
  91. <p>&lsquo;<samp>addi lo(here - there), r5, r6</samp>&rsquo;
  92. </p>
  93. <p>computes the difference between the address of labels &rsquo;here&rsquo; and
  94. &rsquo;there&rsquo;, takes the lower 16 bits of this difference and adds it to
  95. register 5, putting the result into register 6.
  96. </p>
  97. <a name="index-hi-pseudo_002dop_002c-V850"></a>
  98. </dd>
  99. <dt><code>hi()</code></dt>
  100. <dd><p>Computes the higher 16 bits of the given expression and then adds the
  101. value of the most significant bit of the lower 16 bits of the expression
  102. and stores the result into the immediate operand field of the given
  103. instruction. For example the following code can be used to compute the
  104. address of the label &rsquo;here&rsquo; and store it into register 6:
  105. </p>
  106. <p>&lsquo;<samp>movhi hi(here), r0, r6</samp>&rsquo;
  107. &lsquo;<samp>movea lo(here), r6, r6</samp>&rsquo;
  108. </p>
  109. <p>The reason for this special behaviour is that movea performs a sign
  110. extension on its immediate operand. So for example if the address of
  111. &rsquo;here&rsquo; was 0xFFFFFFFF then without the special behaviour of the hi()
  112. pseudo-op the movhi instruction would put 0xFFFF0000 into r6, then the
  113. movea instruction would takes its immediate operand, 0xFFFF, sign extend
  114. it to 32 bits, 0xFFFFFFFF, and then add it into r6 giving 0xFFFEFFFF
  115. which is wrong (the fifth nibble is E). With the hi() pseudo op adding
  116. in the top bit of the lo() pseudo op, the movhi instruction actually
  117. stores 0 into r6 (0xFFFF + 1 = 0x0000), so that the movea instruction
  118. stores 0xFFFFFFFF into r6 - the right value.
  119. </p>
  120. <a name="index-hilo-pseudo_002dop_002c-V850"></a>
  121. </dd>
  122. <dt><code>hilo()</code></dt>
  123. <dd><p>Computes the 32 bit value of the given expression and stores it into
  124. the immediate operand field of the given instruction (which must be a
  125. mov instruction). For example:
  126. </p>
  127. <p>&lsquo;<samp>mov hilo(here), r6</samp>&rsquo;
  128. </p>
  129. <p>computes the absolute address of label &rsquo;here&rsquo; and puts the result into
  130. register 6.
  131. </p>
  132. <a name="index-sdaoff-pseudo_002dop_002c-V850"></a>
  133. </dd>
  134. <dt><code>sdaoff()</code></dt>
  135. <dd><p>Computes the offset of the named variable from the start of the Small
  136. Data Area (whose address is held in register 4, the GP register) and
  137. stores the result as a 16 bit signed value in the immediate operand
  138. field of the given instruction. For example:
  139. </p>
  140. <p>&lsquo;<samp>ld.w sdaoff(_a_variable)[gp],r6</samp>&rsquo;
  141. </p>
  142. <p>loads the contents of the location pointed to by the label &rsquo;_a_variable&rsquo;
  143. into register 6, provided that the label is located somewhere within +/-
  144. 32K of the address held in the GP register. [Note the linker assumes
  145. that the GP register contains a fixed address set to the address of the
  146. label called &rsquo;__gp&rsquo;. This can either be set up automatically by the
  147. linker, or specifically set by using the &lsquo;<samp>--defsym __gp=&lt;value&gt;</samp>&rsquo;
  148. command-line option].
  149. </p>
  150. <a name="index-tdaoff-pseudo_002dop_002c-V850"></a>
  151. </dd>
  152. <dt><code>tdaoff()</code></dt>
  153. <dd><p>Computes the offset of the named variable from the start of the Tiny
  154. Data Area (whose address is held in register 30, the EP register) and
  155. stores the result as a 4,5, 7 or 8 bit unsigned value in the immediate
  156. operand field of the given instruction. For example:
  157. </p>
  158. <p>&lsquo;<samp>sld.w tdaoff(_a_variable)[ep],r6</samp>&rsquo;
  159. </p>
  160. <p>loads the contents of the location pointed to by the label &rsquo;_a_variable&rsquo;
  161. into register 6, provided that the label is located somewhere within +256
  162. bytes of the address held in the EP register. [Note the linker assumes
  163. that the EP register contains a fixed address set to the address of the
  164. label called &rsquo;__ep&rsquo;. This can either be set up automatically by the
  165. linker, or specifically set by using the &lsquo;<samp>--defsym __ep=&lt;value&gt;</samp>&rsquo;
  166. command-line option].
  167. </p>
  168. <a name="index-zdaoff-pseudo_002dop_002c-V850"></a>
  169. </dd>
  170. <dt><code>zdaoff()</code></dt>
  171. <dd><p>Computes the offset of the named variable from address 0 and stores the
  172. result as a 16 bit signed value in the immediate operand field of the
  173. given instruction. For example:
  174. </p>
  175. <p>&lsquo;<samp>movea zdaoff(_a_variable),zero,r6</samp>&rsquo;
  176. </p>
  177. <p>puts the address of the label &rsquo;_a_variable&rsquo; into register 6, assuming
  178. that the label is somewhere within the first 32K of memory. (Strictly
  179. speaking it also possible to access the last 32K of memory as well, as
  180. the offsets are signed).
  181. </p>
  182. <a name="index-ctoff-pseudo_002dop_002c-V850"></a>
  183. </dd>
  184. <dt><code>ctoff()</code></dt>
  185. <dd><p>Computes the offset of the named variable from the start of the Call
  186. Table Area (whose address is held in system register 20, the CTBP
  187. register) and stores the result a 6 or 16 bit unsigned value in the
  188. immediate field of then given instruction or piece of data. For
  189. example:
  190. </p>
  191. <p>&lsquo;<samp>callt ctoff(table_func1)</samp>&rsquo;
  192. </p>
  193. <p>will put the call the function whose address is held in the call table
  194. at the location labeled &rsquo;table_func1&rsquo;.
  195. </p>
  196. <a name="index-longcall-pseudo_002dop_002c-V850"></a>
  197. </dd>
  198. <dt><code>.longcall <code>name</code></code></dt>
  199. <dd><p>Indicates that the following sequence of instructions is a long call
  200. to function <code>name</code>. The linker will attempt to shorten this call
  201. sequence if <code>name</code> is within a 22bit offset of the call. Only
  202. valid if the <code>-mrelax</code> command-line switch has been enabled.
  203. </p>
  204. <a name="index-longjump-pseudo_002dop_002c-V850"></a>
  205. </dd>
  206. <dt><code>.longjump <code>name</code></code></dt>
  207. <dd><p>Indicates that the following sequence of instructions is a long jump
  208. to label <code>name</code>. The linker will attempt to shorten this code
  209. sequence if <code>name</code> is within a 22bit offset of the jump. Only
  210. valid if the <code>-mrelax</code> command-line switch has been enabled.
  211. </p>
  212. </dd>
  213. </dl>
  214. <p>For information on the V850 instruction set, see <cite>V850
  215. Family 32-/16-Bit single-Chip Microcontroller Architecture Manual</cite> from NEC.
  216. Ltd.
  217. </p>
  218. <hr>
  219. <div class="header">
  220. <p>
  221. Previous: <a href="V850-Directives.html#V850-Directives" accesskey="p" rel="prev">V850 Directives</a>, Up: <a href="V850_002dDependent.html#V850_002dDependent" accesskey="u" rel="up">V850-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
  222. </div>
  223. </body>
  224. </html>