<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>.:: The Converted Virtual Machine Instruction Set ::.</title> </head> <body BGCOLOR="#DbDbDb" text="#000000" LINK="#0C0C0C" VLINK="#070707" ALINK="#007007"> <h1 align="center"> Miscellaneous instructions </h1><br><hr><p> <table border="0" align="center" width="80%"> <tr><td> <!--LEFT BLOCK--> <table border="0" bordercolor="#CDCDCD" align="left" cellspacing="3" cellpadding="5" cols="4"> <tr> <td> <a href="#break"><b>break</b></a></td><td> <a href="#ldtoken"><b>ldtoken</b></a></td><td> <a href="#memcpy"><b>memcpy</b></a></td><td> <a href="#memmove"><b>memmove</b></a></td></tr><tr><td> <a href="#memset"><b>memset</b></a></td><td> <a href="#memzero"><b>memzero</b></a></td><td> <a href="#nop"><b>nop</b></a></td><td> <a href="#prefix"><b>prefix</b></a></td></tr><tr><td> <a href="#unroll_method"><b>unroll_method</b></a></td><td> <a href="#wide"><b>wide</b></a></td><td> </td><td> </td></tr></table></td></tr></table><p><hr><p><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="break"> <font color="#FFFFFF" size="+5"> break</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Mark the position of a breakpoint</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>break</i></td></tr><tr><td align="center" width="100"><i>subcode</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{break}</i></td></tr><tr><td align="center" width="100"><i>subcode</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>break</i> = 254 (0xFE)<br></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">This instruction marks a position in the CVM bytecode that may be used as a breakpoint in debug versions of the runtime engine.<p> Every potentional position for a breakpoint is marked, even if those positions will never have active breakpoints set on them. The runtime engine keeps a list of active breakpoints, which is inspected at each potentional breakpoint.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="ldtoken"> <font color="#FFFFFF" size="+5"> ldtoken</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Load a token pointer onto the stack</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>ldtoken</i></td></tr><tr><td align="center" width="100"><i>pointer</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{ldtoken}</i></td></tr><tr><td align="center" width="100"><i>pointer</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>ldtoken</i> = 234 (0xEA)<br></td></tr><tr border="0"><td border="0"> · <b>Stack</b></td><td border="0"><i>...</i> => <i>..., pointer</i></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Push <i>pointer</i> onto the stack as a <code>ptr</code> value.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">The <i>pointer</i> value is a native pointer to the token descriptor, which may 32 or 64 bits in size.<p> This instruction is used to load type, field, and method descriptors onto the stack as handle instances.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="memcpy"> <font color="#FFFFFF" size="+5"> memcpy</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Copy a fixed-size block of non-overlapping memory</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>memcpy</i></td></tr><tr><td align="center" width="100"><i>N[1]</i></td></tr></table></td><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>wide</i></td></tr><tr><td align="center" width="100"><i>memcpy</i></td></tr><tr><td align="center" width="100"><i>N[4]</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{memcpy}</i></td></tr><tr><td align="center" width="100"><i>N</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>memcpy</i> = 237 (0xED)<br></td></tr><tr border="0"><td border="0"> · <b>Stack</b></td><td border="0"><i>..., dest, src</i> => <i>...</i></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Pop <i>dest</i> and <i>src</i> from the stack as type <code>ptr</code>. Copy <i>N</i> bytes of memory from <i>src</i> to <i>dest</i>.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">It is assumed that the source and destination regions do not overlap.<p> This instruction is typically used to copy value type instances from one location to another.<p> Use <i>memmove</i> for overlapping memory regions, and for regions that do not have a fixed size.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="memmove"> <font color="#FFFFFF" size="+5"> memmove</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Move a block of memory</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>memmove</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{memmove}</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>memmove</i> = 238 (0xEE)<br></td></tr><tr border="0"><td border="0"> · <b>Stack</b></td><td border="0"><i>..., dest, src, length</i> => <i>...</i></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Pop <i>dest</i>, <i>src</i>, and <i>length</i> from the stack as the types <code>ptr</code>, <code>ptr</code>, and <code>uint32</code> respectively. Move <i>length</i> bytes of memory from <i>src</i> to <i>dest</i>.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">If the source and destination regions overlap, this instruction will guarantee to produce the correct result.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="memset"> <font color="#FFFFFF" size="+5"> memset</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Fill a block of memory with a byte value</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>memset</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{memset}</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>memset</i> = 240 (0xF0)<br></td></tr><tr border="0"><td border="0"> · <b>Stack</b></td><td border="0"><i>..., dest, value, length</i> => <i>...</i></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Pop <i>dest</i>, <i>value</i>, and <i>length</i> from the stack as the types <code>ptr</code>, <code>int32</code>, and <code>uint32</code>. Fill <i>length</i> bytes of memory at <i>dest</i> with <i>value</i>.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="memzero"> <font color="#FFFFFF" size="+5"> memzero</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Fill a fixed-size block of memory with zeroes</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>memzero</i></td></tr><tr><td align="center" width="100"><i>N[1]</i></td></tr></table></td><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>wide</i></td></tr><tr><td align="center" width="100"><i>memzero</i></td></tr><tr><td align="center" width="100"><i>N[4]</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{memzero}</i></td></tr><tr><td align="center" width="100"><i>N</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>memzero</i> = 239 (0xEF)<br></td></tr><tr border="0"><td border="0"> · <b>Stack</b></td><td border="0"><i>..., dest</i> => <i>...</i></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Pop <i>dest</i> from the stack as type <code>ptr</code>. Fill <i>N</i> bytes of memory at <i>dest</i> with zero bytes.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">This instruction is typically used to initialize value type instances.<p> Use <i>memset</i> if the region does not have a fixed size, or the fill value is something other than zero.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="nop"> <font color="#FFFFFF" size="+5"> nop</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Do nothing</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>nop</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{nop}</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>nop</i> = 0 (0x00)<br></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">Do nothing.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="prefix"> <font color="#FFFFFF" size="+5"> prefix</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Prefix an alternative instruction</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>prefix</i></td></tr><tr><td align="center" width="100"><i>opcode</i></td></tr><tr><td align="center" width="100"><i>...</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>prefix</i> = 255, 255 (0xFF, 0xFF)<br></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">The <i>prefix</i> instruction is used to switch the runtime engine into an alternative instruction set. The alternative instruction is <i>opcode</i>. Prefixing is necessary because the VM has more than 256 distinct instructions.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">There is no direct format for this instruction, because <i>prefix</i> is not required for the direct encoding.</td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="unroll_method"> <font color="#FFFFFF" size="+5"> unroll_method</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Mark a method for unrolling</td></tr><tr border="0"><td border="0"> · <b>Direct Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>{unroll_method}</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>unroll_method</i> = 255, 79 (0xFF, 0x4F)<br></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">The <i>unroll_method</i> instruction is used in direct code to trigger native code unrolling. <p> Unrolling converts fragments of the method into native code for the underlying CPU, to speed up execution.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">There is no bytecode format for this instruction, because unrolling is not possible with the bytecode encoding.<p> In a method that can support unrolling, the <i>nop</i> instruction is used to mark a label, so that the unroller can process labels in a single translation pass. The <i>prefix</i> instruction is used to mark the end of the method's code, so that the unroller knows where to stop. </td></tr></table><br><br><table cellpadding="5" cellspacing="0" bordercolor="#000000" border=" 1" align="center" width="80%"> <tr bgcolor="#7F7F7F" border="2"><td border="0" width="30%"> <a name="wide"> <font color="#FFFFFF" size="+5"> wide</font></a></td><td align="right" border="0"> </td></tr><tr border="1"><td border="0"> · <b>Operation</b></td><td border="0">Modify an instruction to its wide form</td></tr><tr border="0"><td border="0"> · <b>Format </b></td><td border="0"><table border="0" bordercolor="#AAAAAA" cellpadding="6" cellspacing="0"><tr><td><table border="1" cellpadding="6" cellspacing="0"><tr><td align="center" width="100"><i>wide</i></td></tr><tr><td align="center" width="100"><i>opcode</i></td></tr><tr><td align="center" width="100"><i>...</i></td></tr></table></td></tr></table></td></tr><tr border="0"><td border="0"> · <b>Forms </b></td><td border="0"><i>wide</i> = 253 (0xFD)<br></td></tr><tr border="0"><td border="0" valign="top"> · <b>Description </b></td><td border="0">The <i>wide</i> instruction modifies another instruction to take longer operands. The format of the operands depends upon the <i>opcode</i>.</td></tr><tr border="0"><td border="0" valign="top"> · <b>Notes </b></td><td border="0">The documentation for other instructions includes information on their wide forms where appropriate.<p> There is no direct format for this instruction, because <i>wide</i> is not required for the direct encoding.</td></tr></table><br><br><p align="center"> <font size="-2">Copyright © Southern Storm Software Pty Ltd 2002 <br> Licensed under GNU FDL </font></p></body></html>