mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-21 19:42:14 +00:00
GP-2480 Console mode inst_next2 support and documentation update
This commit is contained in:
parent
8d4a6c213e
commit
d33cd8a92e
@ -41,6 +41,7 @@ src/decompile/datatests/pointersub.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/promotecompare.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/readvolatile.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/sbyte.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/skipnext2.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/statuscmp.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/threedim.xml||GHIDRA||||END|
|
||||
src/decompile/datatests/twodim.xml||GHIDRA||||END|
|
||||
|
@ -17,11 +17,12 @@
|
||||
#include "slghsymbol.hh"
|
||||
#include "translate.hh"
|
||||
|
||||
ParserContext::ParserContext(ContextCache *ccache)
|
||||
ParserContext::ParserContext(ContextCache *ccache,Translate *trans)
|
||||
|
||||
{
|
||||
parsestate = 0;
|
||||
parsestate = uninitialized;
|
||||
contcache = ccache;
|
||||
translate = trans;
|
||||
if (ccache != (ContextCache *)0) {
|
||||
contextsize = ccache->getDatabase()->getContextSize();
|
||||
context = new uintm[ contextsize ];
|
||||
@ -43,6 +44,18 @@ void ParserContext::initialize(int4 maxstate,int4 maxparam,AddrSpace *spc)
|
||||
base_state = &state[0];
|
||||
}
|
||||
|
||||
const Address &ParserContext::getN2addr(void) const
|
||||
|
||||
{
|
||||
if (n2addr.isInvalid()) {
|
||||
if (translate == (Translate *)0 || parsestate == uninitialized)
|
||||
throw LowlevelError("inst_next2 not available in this context");
|
||||
int4 length = translate->instructionLength(naddr);
|
||||
n2addr = naddr + length;
|
||||
}
|
||||
return n2addr;
|
||||
}
|
||||
|
||||
uintm ParserContext::getInstructionBytes(int4 bytestart,int4 size,uint4 off) const
|
||||
|
||||
{ // Get bytes from the instruction stream into a intm
|
||||
|
@ -64,6 +64,7 @@ struct ContextSet { // Instructions for setting a global context value
|
||||
|
||||
class ParserWalker; // Forward declaration
|
||||
class ParserWalkerChange;
|
||||
class Translate;
|
||||
|
||||
class ParserContext {
|
||||
friend class ParserWalker;
|
||||
@ -75,6 +76,7 @@ public:
|
||||
pcode = 2 // Instruction is parsed in preparation for generating p-code
|
||||
};
|
||||
private:
|
||||
Translate *translate; // Instruction parser
|
||||
int4 parsestate;
|
||||
AddrSpace *const_space;
|
||||
uint1 buf[16]; // Buffer of bytes in the instruction stream
|
||||
@ -84,13 +86,14 @@ private:
|
||||
vector<ContextSet> contextcommit;
|
||||
Address addr; // Address of start of instruction
|
||||
Address naddr; // Address of next instruction
|
||||
mutable Address n2addr; // Address of instruction after the next
|
||||
Address calladdr; // For injections, this is the address of the call being overridden
|
||||
vector<ConstructState> state; // Current resolved instruction
|
||||
ConstructState *base_state;
|
||||
int4 alloc; // Number of ConstructState's allocated
|
||||
int4 delayslot; // delayslot depth
|
||||
public:
|
||||
ParserContext(ContextCache *ccache);
|
||||
ParserContext(ContextCache *ccache,Translate *trans);
|
||||
~ParserContext(void) { if (context != (uintm *)0) delete [] context; }
|
||||
uint1 *getBuffer(void) { return buf; }
|
||||
void initialize(int4 maxstate,int4 maxparam,AddrSpace *spc);
|
||||
@ -98,7 +101,7 @@ public:
|
||||
void setParserState(int4 st) { parsestate = st; }
|
||||
void deallocateState(ParserWalkerChange &walker);
|
||||
void allocateOperand(int4 i,ParserWalkerChange &walker);
|
||||
void setAddr(const Address &ad) { addr = ad; }
|
||||
void setAddr(const Address &ad) { addr = ad; n2addr = Address(); }
|
||||
void setNaddr(const Address &ad) { naddr = ad; }
|
||||
void setCalladdr(const Address &ad) { calladdr = ad; }
|
||||
void addCommit(TripleSymbol *sym,int4 num,uintm mask,bool flow,ConstructState *point);
|
||||
@ -106,7 +109,7 @@ public:
|
||||
void applyCommits(void);
|
||||
const Address &getAddr(void) const { return addr; }
|
||||
const Address &getNaddr(void) const { return naddr; }
|
||||
const Address &getN2addr(void) const { return naddr; /* inst_next2 not supported */ }
|
||||
const Address &getN2addr(void) const;
|
||||
const Address &getDestAddr(void) const { return calladdr; }
|
||||
const Address &getRefAddr(void) const { return calladdr; }
|
||||
AddrSpace *getCurSpace(void) const { return addr.getSpace(); }
|
||||
|
@ -333,7 +333,7 @@ void PcodeInjectLibrarySleigh::parseInject(InjectPayload *payload)
|
||||
throw LowlevelError("Registering pcode snippet before language is instantiated");
|
||||
}
|
||||
if (contextCache.pos == (ParserContext *)0) { // Make sure we have a context
|
||||
contextCache.pos = new ParserContext((ContextCache *)0);
|
||||
contextCache.pos = new ParserContext((ContextCache *)0,(Translate *)0);
|
||||
contextCache.pos->initialize(8,8,slgh->getConstantSpace());
|
||||
}
|
||||
PcodeSnippet compiler(slgh);
|
||||
|
@ -444,7 +444,7 @@ void DisassemblyCache::initialize(int4 min,int4 hashsize)
|
||||
nextfree = 0;
|
||||
hashtable = new ParserContext *[hashsize];
|
||||
for(int4 i=0;i<minimumreuse;++i) {
|
||||
ParserContext *pos = new ParserContext(contextcache);
|
||||
ParserContext *pos = new ParserContext(contextcache,translate);
|
||||
pos->initialize(75,20,constspace);
|
||||
list[i] = pos;
|
||||
}
|
||||
@ -462,13 +462,15 @@ void DisassemblyCache::free(void)
|
||||
delete [] hashtable;
|
||||
}
|
||||
|
||||
/// \param trans is the Translate object instantiating this cache (for inst_next2 callbacks)
|
||||
/// \param ccache is the ContextCache front-end shared across all the parser contexts
|
||||
/// \param cspace is the constant address space used for minting constant Varnodes
|
||||
/// \param cachesize is the number of distinct ParserContext objects in this cache
|
||||
/// \param windowsize is the size of the ParserContext hash-table
|
||||
DisassemblyCache::DisassemblyCache(ContextCache *ccache,AddrSpace *cspace,int4 cachesize,int4 windowsize)
|
||||
DisassemblyCache::DisassemblyCache(Translate *trans,ContextCache *ccache,AddrSpace *cspace,int4 cachesize,int4 windowsize)
|
||||
|
||||
{
|
||||
translate = trans;
|
||||
contextcache = ccache;
|
||||
constspace = cspace;
|
||||
initialize(cachesize,windowsize); // Set default settings for the cache
|
||||
@ -559,7 +561,7 @@ void Sleigh::initialize(DocumentStorage &store)
|
||||
parser_cachesize = 8;
|
||||
parser_windowsize = 256;
|
||||
}
|
||||
discache = new DisassemblyCache(cache,getConstantSpace(),parser_cachesize,parser_windowsize);
|
||||
discache = new DisassemblyCache(this,cache,getConstantSpace(),parser_cachesize,parser_windowsize);
|
||||
}
|
||||
|
||||
/// \brief Obtain a parse tree for the instruction at the given address
|
||||
|
@ -103,6 +103,7 @@ public:
|
||||
/// accessing the ContextDatabase and resolving context variables from the SLEIGH spec.
|
||||
/// ParserContext objects are stored in a hash-table keyed by the address of the instruction.
|
||||
class DisassemblyCache {
|
||||
Translate *translate; ///< The Translate object that owns this cache
|
||||
ContextCache *contextcache; ///< Cached values from the ContextDatabase
|
||||
AddrSpace *constspace; ///< The constant address space
|
||||
int4 minimumreuse; ///< Can call getParserContext this many times, before a ParserContext is reused
|
||||
@ -113,7 +114,7 @@ class DisassemblyCache {
|
||||
void initialize(int4 min,int4 hashsize); ///< Initialize the hash-table of ParserContexts
|
||||
void free(void); ///< Free the hash-table of ParserContexts
|
||||
public:
|
||||
DisassemblyCache(ContextCache *ccache,AddrSpace *cspace,int4 cachesize,int4 windowsize); ///< Constructor
|
||||
DisassemblyCache(Translate *trans,ContextCache *ccache,AddrSpace *cspace,int4 cachesize,int4 windowsize); ///< Constructor
|
||||
~DisassemblyCache(void) { free(); } ///< Destructor
|
||||
ParserContext *getParserContext(const Address &addr); ///< Get the parser for a particular Address
|
||||
};
|
||||
|
@ -0,0 +1,19 @@
|
||||
<decompilertest>
|
||||
<binaryimage arch="Toy:BE:32:builder.align2:default">
|
||||
<!--
|
||||
Test SLEIGH inst_next2 functionality via the Toy "skeq", (skip if equal) instruction
|
||||
-->
|
||||
<bytechunk space="ram" offset="0x10">
|
||||
0a0acec58000c0abdfcaf400
|
||||
</bytechunk>
|
||||
<symbol name="skipinst" space="ram" offset="0x10"/>
|
||||
</binaryimage>
|
||||
<script>
|
||||
<com>lo fu skipinst</com>
|
||||
<com>decompile</com>
|
||||
<com>print C</com>
|
||||
<com>quit</com>
|
||||
</script>
|
||||
<stringmatch name="Skip Instruction #1" min="1" max="1">if \(param_1 != 5\)</stringmatch>
|
||||
<stringmatch name="Skip Instruction #2" min="1" max="1">iVar1 = param_2 \+ 10;</stringmatch>
|
||||
</decompilertest>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<article>
|
||||
<article id="pcoderef_title">
|
||||
<info>
|
||||
<title>P-Code Reference Manual</title>
|
||||
<releaseinfo>Last updated September 5, 2019</releaseinfo>
|
||||
@ -184,7 +184,7 @@ longer match their <emphasis>raw p-code</emphasis> form.
|
||||
<para>
|
||||
The core concepts of p-code are:
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="pcoderef_address_space">
|
||||
<title>Address Space</title>
|
||||
<para>
|
||||
The <emphasis role="bold">address space</emphasis> for p-code is a generalization
|
||||
@ -224,7 +224,7 @@ right byte offset when dereferencing the pointer. The wordsize attribute has no
|
||||
any of the other p-code operations.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="pcoderef_varnode">
|
||||
<title>Varnode</title>
|
||||
<para>
|
||||
A <emphasis role="bold">varnode</emphasis> is a generalization of
|
||||
@ -270,7 +270,7 @@ of the constant. As with other varnodes, constants only have a type forced
|
||||
on them by the p-code operations that use them.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="pcoderef_pcode_operation">
|
||||
<title>P-code Operation</title>
|
||||
<para>
|
||||
A <emphasis role="bold">p-code operation</emphasis> is the analog of a
|
||||
|
@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<article>
|
||||
<article id="sleigh_title">
|
||||
<info>
|
||||
<title>SLEIGH</title>
|
||||
<subtitle>A Language for Rapid Processor Specification</subtitle>
|
||||
<pubdate>Originally published December 16, 2005</pubdate>
|
||||
<releaseinfo>Last updated October 28, 2020</releaseinfo>
|
||||
<releaseinfo>Last updated August 24, 2022</releaseinfo>
|
||||
</info>
|
||||
<simplesect>
|
||||
<simplesect id="sleigh_history">
|
||||
<info>
|
||||
<title>History</title>
|
||||
</info>
|
||||
@ -36,7 +36,7 @@
|
||||
</para>
|
||||
</simplesect>
|
||||
|
||||
<simplesect>
|
||||
<simplesect id="sleigh_overview">
|
||||
<info>
|
||||
<title>Overview</title>
|
||||
</info>
|
||||
@ -70,7 +70,7 @@ will always refer to this target of the specification.
|
||||
Italics are used when defining terms and for named entities. Bold is used for SLEIGH keywords.
|
||||
</para>
|
||||
</simplesect>
|
||||
<sect1>
|
||||
<sect1 id="sleigh_introduction">
|
||||
<title>Introduction to P-Code</title>
|
||||
<para>
|
||||
Although p-code is a distinct language from SLEIGH, because a major
|
||||
@ -128,7 +128,7 @@ the <emphasis>operation</emphasis>. These are generalizations of the
|
||||
computing concepts of RAM, registers, and machine instructions
|
||||
respectively.
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_address_spaces">
|
||||
<title>Address Spaces</title>
|
||||
<para>
|
||||
An <emphasis>address</emphasis> space for p-code is a generalization of
|
||||
@ -227,7 +227,7 @@ different way. Any consistent meaning assigned to a particular varnode
|
||||
must be provided and enforced by the specification designer.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_operations">
|
||||
<title>Operations</title>
|
||||
<para>
|
||||
P-code is intended to emulate a target processor by substituting a
|
||||
@ -331,7 +331,7 @@ follow a specific format as parsed by the SLEIGH compiler. In this
|
||||
section, we list the basic formatting rules for this file as enforced
|
||||
by the compiler.
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_comments">
|
||||
<title>Comments</title>
|
||||
<para>
|
||||
Comments start with the ‘#’ character and continue to the end of the
|
||||
@ -340,7 +340,7 @@ constructor (see <xref linkend="sleigh_display_section"/>) where the ‘#’ cha
|
||||
interpreted as something that should be printed in disassembly.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_identifiers">
|
||||
<title>Identifiers</title>
|
||||
<para>
|
||||
Identifiers are made up of letters a-z, capitals A-Z, digits 0-9 and
|
||||
@ -348,7 +348,7 @@ the characters ‘.’ and ‘_’. An identifier can use these characters in
|
||||
any order and for any length, but it must not start with a digit.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_strings">
|
||||
<title>Strings</title>
|
||||
<para>
|
||||
String literals can be used, when specifying names and when specifying
|
||||
@ -358,7 +358,7 @@ character ‘”’ and all characters in between lose their special
|
||||
meaning.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_integers">
|
||||
<title>Integers</title>
|
||||
<para>
|
||||
Integers are specified either in a decimal format or in a standard
|
||||
@ -383,7 +383,7 @@ be thought of as having arbitrary precision. Currently, SLEIGH stores
|
||||
integers internally with 64 bits of precision.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_white_space">
|
||||
<title>White Space</title>
|
||||
<para>
|
||||
White space characters include space, tab, line-feed, vertical
|
||||
@ -419,7 +419,7 @@ included files can have their
|
||||
own <emphasis role="bold">@include</emphasis> directives.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_preprocessor_macros">
|
||||
<title>Preprocessor Macros</title>
|
||||
<para>
|
||||
SLEIGH allows simple (unparameterized) macro definitions and
|
||||
@ -449,7 +449,7 @@ definition of a macro from that point on in the file.
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_conditional_compilation">
|
||||
<title>Conditional Compilation</title>
|
||||
<para>
|
||||
SLEIGH supports several directives that allow conditional inclusion of
|
||||
@ -466,7 +466,7 @@ second <emphasis role="bold">@if...</emphasis> <emphasis role="bold">@endif</emp
|
||||
pair can occur inside an initial <emphasis role="bold">@if</emphasis>
|
||||
and <emphasis role="bold">@endif</emphasis>.
|
||||
</para>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_ifdef">
|
||||
<title>@ifdef and @ifndef</title>
|
||||
<para>
|
||||
The <emphasis role="bold">@ifdef</emphasis> directive is followed by a
|
||||
@ -491,7 +491,7 @@ an <emphasis role="bold">@if</emphasis>
|
||||
or <emphasis role="bold">@elif</emphasis> directive (See below).
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_if">
|
||||
<title>@if</title>
|
||||
<para>
|
||||
The <emphasis role="bold">@if</emphasis> directive is followed by a
|
||||
@ -519,7 +519,7 @@ is defined.
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_else">
|
||||
<title>@else and @elif</title>
|
||||
<para>
|
||||
An <emphasis role="bold">@else</emphasis> directive splits the lines
|
||||
@ -583,7 +583,7 @@ endianess when labeling instruction fields and when defining overlapping registe
|
||||
otherwise the specification language hides endianess issues.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_alignment_definition">
|
||||
<title>Alignment Definition</title>
|
||||
<para>
|
||||
An alignment definition looks like
|
||||
@ -599,7 +599,7 @@ the address against this value and can opt to flag an unaligned
|
||||
instruction as an error.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_space_definitions">
|
||||
<title>Space Definitions</title>
|
||||
<para>
|
||||
The definition of an address space looks like
|
||||
@ -752,7 +752,7 @@ define register offset=0 size=1
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_bitrange_registers">
|
||||
<title>Bit Range Registers</title>
|
||||
<para>
|
||||
Many processors define registers that either consist of a single bit
|
||||
@ -822,7 +822,7 @@ the <emphasis role="bold">define bitrange</emphasis> statement can be
|
||||
used as an alternate syntax for defining overlapping registers.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_userdefined_operations">
|
||||
<title>User-Defined Operations</title>
|
||||
<para>
|
||||
The specification designer can define new p-code operations using
|
||||
@ -933,7 +933,7 @@ can be used in the definition of other <emphasis>table</emphasis>
|
||||
symbols until the root symbol is fully described. The root symbol has
|
||||
the predefined identifier <emphasis>instruction</emphasis>.
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_notes_namespaces">
|
||||
<title>Notes on Namespaces</title>
|
||||
<para>
|
||||
Almost all identifiers live in the same global "scope". The global scope includes
|
||||
@ -1093,7 +1093,7 @@ manner of repeats and overlaps in the fields so long as they all have
|
||||
different names.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_fields_family">
|
||||
<title>Fields as Family Symbols</title>
|
||||
<para>
|
||||
Fields are the most basic form of family symbol; they define a natural
|
||||
@ -1117,7 +1117,7 @@ representation. The default is hexadecimal. [Currently
|
||||
the <emphasis role="bold">dec</emphasis> attribute is not supported]
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_alternate_meanings">
|
||||
<title>Attaching Alternate Meanings to Fields</title>
|
||||
<para>
|
||||
The default interpretation of a field is probably the most natural but
|
||||
@ -1127,7 +1127,7 @@ is used to alter either the display or semantic meaning of fields into
|
||||
the most common (and basic) interpretations. More complex
|
||||
interpretations must be built up out of tables.
|
||||
</para>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_attaching_registers">
|
||||
<title>Attaching Registers</title>
|
||||
<para>
|
||||
Probably <emphasis>the</emphasis> most common processor interpretation
|
||||
@ -1165,7 +1165,7 @@ display meaning. Instead this encoding is flagged as an invalid form
|
||||
of the instruction.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_attaching_integers">
|
||||
<title>Attaching Other Integers</title>
|
||||
<para>
|
||||
Sometimes a processor interprets a field as an integer but not the
|
||||
@ -1186,7 +1186,7 @@ the <emphasis>fieldlist</emphasis>. [Currently SLEIGH does not support
|
||||
unspecified positions in the list using a ‘_’]
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_attaching_names">
|
||||
<title>Attaching Names</title>
|
||||
<para>
|
||||
It is possible to just modify the display characteristics of a field
|
||||
@ -1298,7 +1298,7 @@ associated with it. Most of this chapter is devoted to describing how
|
||||
to define a single constructor. The issues involved in combining
|
||||
multiple constructors into a single table are addressed in <xref linkend="sleigh_tables"/>.
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_sections_constructor">
|
||||
<title>The Five Sections of a Constructor</title>
|
||||
<para>
|
||||
A single complex statement in the specification file describes a
|
||||
@ -1329,7 +1329,7 @@ the syntax typically fits on a single line. We describe each section
|
||||
in turn.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_table_header">
|
||||
<title>The Table Header</title>
|
||||
<para>
|
||||
Every constructor must be part of a table, which is the element with
|
||||
@ -1464,7 +1464,7 @@ assure uniqueness, but for reverse engineering applications there is
|
||||
no such requirement.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_caret">
|
||||
<title>The '^' character</title>
|
||||
<para>
|
||||
The ‘^’ character in the display section is used to separate
|
||||
@ -1510,7 +1510,7 @@ constructor’s <emphasis>pattern</emphasis>, the subset of possible
|
||||
instruction encodings that the designer wants
|
||||
to <emphasis>match</emphasis> the constructor being defined.
|
||||
</para>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_constraints">
|
||||
<title>Constraints</title>
|
||||
<para>
|
||||
The patterns required for processor specifications can almost always
|
||||
@ -1567,7 +1567,7 @@ all possible. The <emphasis>logical or</emphasis> operator usually
|
||||
requires two or more mask/value style checks to correctly implement.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_defining_operands">
|
||||
<title>Defining Operands and Invoking Subtables</title>
|
||||
<para>
|
||||
The principle way of defining a constructor operand, left undefined
|
||||
@ -1627,7 +1627,7 @@ grammar’s start symbol. So this link from local to global is simply a
|
||||
statement of the grouping of old symbols into the new constructor.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_variable_length">
|
||||
<title>Variable Length Instructions</title>
|
||||
<para>
|
||||
There are some additional complexities to designing a specification
|
||||
@ -1649,7 +1649,7 @@ final length of the instruction. SLEIGH has two operators that are
|
||||
specific to variable length instruction sets and that give the
|
||||
designer control over how tokens fit together.
|
||||
</para>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_semicolon">
|
||||
<title>The ';' Operator</title>
|
||||
<para>
|
||||
The most important operator for patterns defining variable length
|
||||
@ -1710,7 +1710,7 @@ order. Also these operators have higher precedence than the ‘;’
|
||||
operator, so parentheses may be necessary to get the intended meaning.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_ellipsis">
|
||||
<title>The '...' Operator</title>
|
||||
<para>
|
||||
The ellipsis operator ‘...’ is used to satisfy the token matching
|
||||
@ -1784,7 +1784,7 @@ you need to break up the parsing of an instruction along lines that
|
||||
don’t quite match the assembly.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_empty_patterns">
|
||||
<title>Empty Patterns</title>
|
||||
<para>
|
||||
Occasionally there is a need for an empty pattern when building
|
||||
@ -1793,7 +1793,7 @@ symbol <emphasis>epsilon</emphasis> which has been traditionally used
|
||||
to indicate an empty pattern.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_advanced_constraints">
|
||||
<title>Advanced Constraints</title>
|
||||
<para>
|
||||
A constraint does not have to be of the form “field = constant”,
|
||||
@ -2157,7 +2157,7 @@ operation, <emphasis>INT_ADD</emphasis>, where the input varnodes
|
||||
are <emphasis>r1</emphasis> and <emphasis>r2</emphasis> and the output
|
||||
varnode is <emphasis>r1</emphasis>.
|
||||
</para>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_expressions">
|
||||
<title>Expressions</title>
|
||||
<para>
|
||||
Expressions are built out of symbols and the binary and unary
|
||||
@ -2171,7 +2171,7 @@ have a precedence, which is used by the SLEIGH compiler to determine
|
||||
the ordering of the final p-code operations. Parentheses can be used
|
||||
within expressions to affect this order.
|
||||
</para>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_arithmetic_logical">
|
||||
<title>Arithmetic, Logical and Boolean Operators</title>
|
||||
<para>
|
||||
For the most part these operators should be familiar to software
|
||||
@ -2232,7 +2232,7 @@ address if the <emphasis role="bold">wordsize</emphasis> attribute is
|
||||
set to something other than one.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_extension">
|
||||
<title>Extension</title>
|
||||
<para>
|
||||
Most processors have instructions that extend small values into big
|
||||
@ -2253,7 +2253,7 @@ the <emphasis>INT_SEXT</emphasis> operation is invoked with
|
||||
the <emphasis role="bold">sext</emphasis> operator.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_truncation">
|
||||
<title>Truncation</title>
|
||||
<para>
|
||||
There are two forms of syntax indicating a truncation of the input
|
||||
@ -2377,7 +2377,7 @@ the offset portion of the address, and to copy the desired value, the
|
||||
‘*’ operator must have a <emphasis>register</emphasis> space override.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_managed_code">
|
||||
<title>Managed Code Operations</title>
|
||||
<para>
|
||||
SLEIGH provides basic support for instructions where encoding and context
|
||||
@ -2437,7 +2437,7 @@ define pcodeop arctan;
|
||||
</para>
|
||||
</sect4>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_statements">
|
||||
<title>Statements</title>
|
||||
<para>
|
||||
We describe the types of semantic statements that are allowed in SLEIGH.
|
||||
@ -2506,7 +2506,7 @@ Use of the <emphasis role="bold">local</emphasis> keyword is preferred
|
||||
and may be enforced in future compiler versions.
|
||||
</para></warning>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_storage_statements">
|
||||
<title>Storage Statements</title>
|
||||
<para>
|
||||
SLEIGH supports fairly standard <emphasis>storage statement</emphasis>
|
||||
@ -2536,7 +2536,7 @@ not a byte address if the <emphasis role="bold">wordsize</emphasis>
|
||||
attribute is set to something other than one.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_exports">
|
||||
<title>Exports</title>
|
||||
<para>
|
||||
The semantic section doesn’t just specify how to generate p-code for a
|
||||
@ -2587,7 +2587,7 @@ would in a normal expression (see
|
||||
varnode being modified to be exported as an integer constant.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_dynamic_references">
|
||||
<title>Dynamic References</title>
|
||||
<para>
|
||||
The only other operator allowed as part of
|
||||
@ -2645,7 +2645,7 @@ addressing mode implementations from instruction semantics at higher
|
||||
levels.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_branching_statements">
|
||||
<title>Branching Statements</title>
|
||||
<para>
|
||||
This section discusses statements that generate p-code branching
|
||||
@ -2875,7 +2875,7 @@ or <emphasis>CALL</emphasis> operation.
|
||||
</sect4>
|
||||
<sect4 id="sleigh_skip_instruction_branching">
|
||||
<title>Skip Instruction Branching</title>
|
||||
<para>>
|
||||
<para>
|
||||
Many processors have a conditional-skip-instruction which must branch over the next instruction
|
||||
based upon some condition. The <emphasis>inst_next2</emphasis> symbol has been provided for
|
||||
this purpose.
|
||||
@ -3016,7 +3016,7 @@ each followed by a variation which corrects the error.
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_unimplemented_semantics">
|
||||
<title>Unimplemented Semantics</title>
|
||||
<para>
|
||||
The semantic section must be present for every constructor in the
|
||||
@ -3173,7 +3173,7 @@ checking, can be used for various tricks in the specification but
|
||||
should generally be avoided.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="sleigh_specific_symbol_trees">
|
||||
<title>Specific Symbol Trees</title>
|
||||
<para>
|
||||
When the SLEIGH parser analyzes an instruction, it starts with the
|
||||
@ -3259,7 +3259,7 @@ determined by the matching constructor for
|
||||
the <emphasis>op2</emphasis> table. SLEIGH generates the disassembly
|
||||
and p-code for these encodings by walking the trees.
|
||||
</para>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_disassembly_trees">
|
||||
<title>Disassembly Trees</title>
|
||||
<para>
|
||||
If the nodes of each tree are replaced with the display information of
|
||||
@ -3285,7 +3285,7 @@ walking the tree, SLEIGH obtains the final illustrated assembly
|
||||
statements corresponding to the original instruction encodings.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<sect4 id="sleigh_pcode_trees">
|
||||
<title>P-code Trees</title>
|
||||
<para>
|
||||
A similar procedure produces the resulting p-code translation of the
|
||||
@ -3366,7 +3366,7 @@ calls to other macros. A <emphasis role="bold">build</emphasis>
|
||||
directive however should not be used in a macro.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_build_directives">
|
||||
<title>Build Directives</title>
|
||||
<para>
|
||||
Because the nodes of a specific symbol tree are traversed in a
|
||||
@ -3420,7 +3420,7 @@ a <emphasis role="bold">build</emphasis> directive, followed by the
|
||||
normal action of the instruction.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_delayslot_directives">
|
||||
<title>Delay Slot Directives</title>
|
||||
<para>
|
||||
For processors with a pipe-lined architecture, multiple instructions
|
||||
@ -3464,7 +3464,7 @@ by the condition.
|
||||
<para>
|
||||
Because the <emphasis role="bold">delayslot</emphasis> directive
|
||||
combines two or more instructions into one, the meaning of the
|
||||
symbol <emphasis>inst_next</emphasis> and <emphasis>inst_next2</emphasis>
|
||||
symbols <emphasis>inst_next</emphasis> and <emphasis>inst_next2</emphasis>
|
||||
become ambiguous. It is not
|
||||
clear anymore what exactly the “next instruction” is. SLEIGH uses the
|
||||
following conventions for interpreting
|
||||
@ -3473,11 +3473,12 @@ semantic section, the symbol refers to the address of the instruction
|
||||
after any instructions in the delay slot. However, if it is used in a
|
||||
disassembly action, the <emphasis>inst_next</emphasis> symbol refers
|
||||
to the address of the instruction immediately after the first
|
||||
instruction, even if there is a delay slot. The use of
|
||||
the <emphasis>inst_next2</emphasis> symbol may be inappropriate in
|
||||
conjunction with delayslot use. While the next instruction address
|
||||
is identified by <emphasis>inst_next</emphasis>, the length of the
|
||||
next instruction ignores any delayslots it may have.
|
||||
instruction, even if there is a delay slot. The use of the
|
||||
<emphasis>inst_next2</emphasis> symbol may be inappropriate in conjunction
|
||||
with <emphasis role="bold">delayslot</emphasis> use. While its use of the
|
||||
next instruction address is identified by <emphasis>inst_next</emphasis>,
|
||||
the length of the next instruction ignores any delay slots it may have
|
||||
when computing the value of <emphasis>inst_next2</emphasis>.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
@ -3539,7 +3540,7 @@ just another field to use in our bit patterns. It gives us the extra
|
||||
information we need to distinguish between different instructions
|
||||
whose encodings are otherwise the same.
|
||||
</para>
|
||||
<sect2>
|
||||
<sect2 id="sleigh_context_basic">
|
||||
<title>Basic Use of Context Variables</title>
|
||||
<para>
|
||||
Suppose a processor supports the use of two different sets of
|
||||
@ -3555,6 +3556,7 @@ define space ram type=ram_space size=4 default;
|
||||
define space register type=register_space size=4;
|
||||
define register offset=0 size=4 [ r0 r1 r2 r3 r4 r5 r6 r7 ];
|
||||
define register offset=0x100 size=4 [ s0 s1 s2 s3 s4 s5 s6 s7 ];
|
||||
define register offset=0x200 size=4 [ statusreg ]; # define context bits (if defined, size must be multiple of 4-bytes)
|
||||
|
||||
define token instr(16)
|
||||
op=(10,15) rreg1=(7,9) sreg1=(7,9) imm=(0,6)
|
||||
|
@ -3,7 +3,7 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Additional P-CODE Operations</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="up" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="prev" href="pseudo-ops.html" title="Pseudo P-CODE Operations">
|
||||
@ -36,7 +36,7 @@ introduced at a later stage by various analysis algorithms.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_multiequal"></a>MULTIEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="multiequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="multiequal.htmltable"></a><table xml:id="multiequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -91,7 +91,7 @@ was last executed. All inputs and outputs must be the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_indirect"></a>INDIRECT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="indirect.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="indirect.htmltable"></a><table xml:id="indirect.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -152,7 +152,7 @@ to the operation was used or preserved.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_ptradd"></a>PTRADD</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="ptradd.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="ptradd.htmltable"></a><table xml:id="ptradd.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -210,7 +210,7 @@ and stores it in output.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_ptrsub"></a>PTRSUB</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="ptrsub.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="ptrsub.htmltable"></a><table xml:id="ptrsub.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -261,7 +261,7 @@ pointer to the subcomponent and stores it in output.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_cast"></a>CAST</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="cast.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="cast.htmltable"></a><table xml:id="cast.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -305,7 +305,7 @@ interpretation as a data-type changes at this point.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_insert"></a>INSERT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="insert.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="insert.htmltable"></a><table xml:id="insert.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -373,7 +373,7 @@ to SLEIGH <span class="bold"><strong>bitrange</strong></span> syntax such as inp
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_extract"></a>EXTRACT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="extract.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="extract.htmltable"></a><table xml:id="extract.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>P-Code Operation Reference</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="up" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="prev" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
@ -37,7 +37,7 @@ describing semantics in a processor specification file.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_copy"></a>COPY</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="copy.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="copy.htmltable"></a><table xml:id="copy.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -78,7 +78,7 @@ input0 and output must be the same.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_load"></a>LOAD</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="load.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="load.htmltable"></a><table xml:id="load.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -149,7 +149,7 @@ correct byte offset into the space.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_store"></a>STORE</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="store.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="store.htmltable"></a><table xml:id="store.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -212,7 +212,7 @@ correct byte offset into the space.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_branch"></a>BRANCH</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="branch.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="branch.htmltable"></a><table xml:id="branch.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -272,7 +272,7 @@ with index 8 by specifying a constant destination “address” of
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_cbranch"></a>CBRANCH</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="cbranch.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="cbranch.htmltable"></a><table xml:id="cbranch.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -322,7 +322,7 @@ relative branching</em></span>. See the discussion for the
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_branchind"></a>BRANCHIND</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="branchind.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="branchind.htmltable"></a><table xml:id="branchind.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -364,7 +364,7 @@ relative branching is not possible with <span class="bold"><strong>BRANCHIND</st
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_call"></a>CALL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="call.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="call.htmltable"></a><table xml:id="call.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -428,7 +428,7 @@ into the call.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_callind"></a>CALLIND</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="callind.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="callind.htmltable"></a><table xml:id="callind.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -482,7 +482,7 @@ the parameters being passed to the logical call.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_return"></a>RETURN</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="return.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="return.htmltable"></a><table xml:id="return.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -534,7 +534,7 @@ subroutine.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_piece"></a>PIECE</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="piece.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="piece.htmltable"></a><table xml:id="piece.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -583,7 +583,7 @@ makes up the most significant part of the output.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_subpiece"></a>SUBPIECE</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="subpiece.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="subpiece.htmltable"></a><table xml:id="subpiece.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -634,7 +634,7 @@ truncated.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_popcount"></a>POPCOUNT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="popcount.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="popcount.htmltable"></a><table xml:id="popcount.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -678,7 +678,7 @@ count is zero extended into the output varnode.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_equal"></a>INT_EQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intequal.htmltable"></a><table xml:id="intequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -727,7 +727,7 @@ must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_notequal"></a>INT_NOTEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intnotequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intnotequal.htmltable"></a><table xml:id="intnotequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -776,7 +776,7 @@ and the output must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_less"></a>INT_LESS</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intless.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intless.htmltable"></a><table xml:id="intless.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -824,7 +824,7 @@ same size, and the output must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sless"></a>INT_SLESS</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsless.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsless.htmltable"></a><table xml:id="intsless.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -872,7 +872,7 @@ the output must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_lessequal"></a>INT_LESSEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intlessequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intlessequal.htmltable"></a><table xml:id="intlessequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -920,7 +920,7 @@ same size, and the output must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_slessequal"></a>INT_SLESSEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intslessequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intslessequal.htmltable"></a><table xml:id="intslessequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -968,7 +968,7 @@ and the output must have a size of 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_zext"></a>INT_ZEXT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intzext.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intzext.htmltable"></a><table xml:id="intzext.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1012,7 +1012,7 @@ size of input.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sext"></a>INT_SEXT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsext.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsext.htmltable"></a><table xml:id="intsext.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1057,7 +1057,7 @@ than the size of input0.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_add"></a>INT_ADD</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intadd.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intadd.htmltable"></a><table xml:id="intadd.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1108,7 +1108,7 @@ and <span class="bold"><strong>INT_SCARRY</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sub"></a>INT_SUB</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsub.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsub.htmltable"></a><table xml:id="intsub.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1159,7 +1159,7 @@ and <span class="bold"><strong>INT_LESS</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_carry"></a>INT_CARRY</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intcarry.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intcarry.htmltable"></a><table xml:id="intcarry.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1208,7 +1208,7 @@ and output must be size 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_scarry"></a>INT_SCARRY</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intscarry.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intscarry.htmltable"></a><table xml:id="intscarry.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1257,7 +1257,7 @@ and output must be size 1.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sborrow"></a>INT_SBORROW</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsborrow.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsborrow.htmltable"></a><table xml:id="intsborrow.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1308,7 +1308,7 @@ is <span class="bold"><strong>INT_LESS</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_2comp"></a>INT_2COMP</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="int2comp.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="int2comp.htmltable"></a><table xml:id="int2comp.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1351,7 +1351,7 @@ be the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_negate"></a>INT_NEGATE</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intnegate.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intnegate.htmltable"></a><table xml:id="intnegate.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1393,7 +1393,7 @@ the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_xor"></a>INT_XOR</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intxor.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intxor.htmltable"></a><table xml:id="intxor.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1439,7 +1439,7 @@ and input1. Both inputs and output must be the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_and"></a>INT_AND</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intand.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intand.htmltable"></a><table xml:id="intand.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1485,7 +1485,7 @@ output must be the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_or"></a>INT_OR</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intor.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intor.htmltable"></a><table xml:id="intor.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1531,7 +1531,7 @@ output must be the same size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_left"></a>INT_LEFT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intleft.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intleft.htmltable"></a><table xml:id="intleft.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1582,7 +1582,7 @@ size. Input1 can be any size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_right"></a>INT_RIGHT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intright.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intright.htmltable"></a><table xml:id="intright.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1633,7 +1633,7 @@ the same size. Input1 can be any size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sright"></a>INT_SRIGHT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsright.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsright.htmltable"></a><table xml:id="intsright.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1686,7 +1686,7 @@ any size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_mult"></a>INT_MULT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intmult.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intmult.htmltable"></a><table xml:id="intmult.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1737,7 +1737,7 @@ sign-extended to the desired size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_div"></a>INT_DIV</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intdiv.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intdiv.htmltable"></a><table xml:id="intdiv.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1787,7 +1787,7 @@ the <span class="bold"><strong>INT_DIV</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_rem"></a>INT_REM</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intrem.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intrem.htmltable"></a><table xml:id="intrem.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1838,7 +1838,7 @@ and <span class="bold"><strong>INT_ADD</strong></span> operations.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_sdiv"></a>INT_SDIV</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsdiv.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsdiv.htmltable"></a><table xml:id="intsdiv.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1888,7 +1888,7 @@ be used before the <span class="bold"><strong>INT_SDIV</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int_srem"></a>INT_SREM</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="intsrem.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="intsrem.htmltable"></a><table xml:id="intsrem.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1939,7 +1939,7 @@ and <span class="bold"><strong>INT_ADD</strong></span> operations.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_bool_negate"></a>BOOL_NEGATE</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="boolnegate.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="boolnegate.htmltable"></a><table xml:id="boolnegate.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -1984,7 +1984,7 @@ or <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_bool_xor"></a>BOOL_XOR</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="boolxor.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="boolxor.htmltable"></a><table xml:id="boolxor.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2034,7 +2034,7 @@ or <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_bool_and"></a>BOOL_AND</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="booland.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="booland.htmltable"></a><table xml:id="booland.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2084,7 +2084,7 @@ or <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_bool_or"></a>BOOL_OR</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="boolor.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="boolor.htmltable"></a><table xml:id="boolor.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2134,7 +2134,7 @@ or <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_equal"></a>FLOAT_EQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatequal.htmltable"></a><table xml:id="floatequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2184,7 +2184,7 @@ to <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_notequal"></a>FLOAT_NOTEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatnotequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatnotequal.htmltable"></a><table xml:id="floatnotequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2234,7 +2234,7 @@ to <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_less"></a>FLOAT_LESS</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatless.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatless.htmltable"></a><table xml:id="floatless.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2284,7 +2284,7 @@ to <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_lessequal"></a>FLOAT_LESSEQUAL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatlessequal.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatlessequal.htmltable"></a><table xml:id="floatlessequal.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2334,7 +2334,7 @@ to <span class="emphasis"><em>false</em></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_add"></a>FLOAT_ADD</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatadd.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatadd.htmltable"></a><table xml:id="floatadd.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2384,7 +2384,7 @@ occurs, output is set to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_sub"></a>FLOAT_SUB</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatsub.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatsub.htmltable"></a><table xml:id="floatsub.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2434,7 +2434,7 @@ occurs, output is set to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_mult"></a>FLOAT_MULT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatmult.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatmult.htmltable"></a><table xml:id="floatmult.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2484,7 +2484,7 @@ occurs, output is set to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_div"></a>FLOAT_DIV</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatdiv.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatdiv.htmltable"></a><table xml:id="floatdiv.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2534,7 +2534,7 @@ occurs, output is set to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_neg"></a>FLOAT_NEG</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatneg.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatneg.htmltable"></a><table xml:id="floatneg.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2578,7 +2578,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_abs"></a>FLOAT_ABS</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatabs.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatabs.htmltable"></a><table xml:id="floatabs.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2621,7 +2621,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_sqrt"></a>FLOAT_SQRT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatsqrt.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatsqrt.htmltable"></a><table xml:id="floatsqrt.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2664,7 +2664,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_ceil"></a>FLOAT_CEIL</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatceil.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatceil.htmltable"></a><table xml:id="floatceil.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2709,7 +2709,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_floor"></a>FLOAT_FLOOR</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatfloor.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatfloor.htmltable"></a><table xml:id="floatfloor.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2756,7 +2756,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_round"></a>FLOAT_ROUND</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatround.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatround.htmltable"></a><table xml:id="floatround.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2803,7 +2803,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float_nan"></a>FLOAT_NAN</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="floatnan.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="floatnan.htmltable"></a><table xml:id="floatnan.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2845,7 +2845,7 @@ size 1, and input0 can be any size.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_int2float"></a>INT2FLOAT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="int2float.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="int2float.htmltable"></a><table xml:id="int2float.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2889,7 +2889,7 @@ precision.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_float2float"></a>FLOAT2FLOAT</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="float2float.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="float2float.htmltable"></a><table xml:id="float2float.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -2935,7 +2935,7 @@ to <span class="bold"><strong>NaN</strong></span>.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_trunc"></a>TRUNC</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="trunc.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="trunc.htmltable"></a><table xml:id="trunc.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>P-Code Reference Manual</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="next" href="pcodedescription.html" title="P-Code Operation Reference">
|
||||
</head>
|
||||
@ -25,13 +25,13 @@
|
||||
<div class="titlepage">
|
||||
<div>
|
||||
<div><h1 class="title">
|
||||
<a name="idm140035470386944"></a>P-Code Reference Manual</h1></div>
|
||||
<a name="pcoderef_title"></a>P-Code Reference Manual</h1></div>
|
||||
<div><p class="releaseinfo">Last updated September 5, 2019</p></div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="table">
|
||||
<a name="mytoc.htmltable"></a><table width="90%" frame="none">
|
||||
<a name="mytoc.htmltable"></a><table xml:id="mytoc.htmltable" width="90%" frame="none">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
@ -215,7 +215,7 @@ The core concepts of p-code are:
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140035470234080"></a>Address Space</h3></div></div></div>
|
||||
<a name="pcoderef_address_space"></a>Address Space</h3></div></div></div>
|
||||
<p>
|
||||
The <span class="bold"><strong>address space</strong></span> for p-code is a generalization
|
||||
of RAM. It is defined simply as an indexed sequence of bytes that can
|
||||
@ -256,7 +256,7 @@ any of the other p-code operations.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140035470224608"></a>Varnode</h3></div></div></div>
|
||||
<a name="pcoderef_varnode"></a>Varnode</h3></div></div></div>
|
||||
<p>
|
||||
A <span class="bold"><strong>varnode</strong></span> is a generalization of
|
||||
either a register or a memory location. It is represented by the formal triple:
|
||||
@ -303,7 +303,7 @@ on them by the p-code operations that use them.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140035470216864"></a>P-code Operation</h3></div></div></div>
|
||||
<a name="pcoderef_pcode_operation"></a>P-code Operation</h3></div></div></div>
|
||||
<p>
|
||||
A <span class="bold"><strong>p-code operation</strong></span> is the analog of a
|
||||
machine instruction. All p-code operations have the same basic format
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>Pseudo P-CODE Operations</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="up" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="prev" href="pcodedescription.html" title="P-Code Operation Reference">
|
||||
@ -40,7 +40,7 @@ placed on other p-code operations that all effects must be explicit.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_userdefined"></a>USERDEFINED</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="userdefined.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="userdefined.htmltable"></a><table xml:id="userdefined.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -112,7 +112,7 @@ still have normal data-flow and can be manipulated symbolically.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_cpoolref"></a>CPOOLREF</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="cpoolref.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="cpoolref.htmltable"></a><table xml:id="cpoolref.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
@ -174,7 +174,7 @@ of emulation and analysis, are necessarily architecture dependent.
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="cpui_new"></a>NEW</h3></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="new.htmltable"></a><table frame="above" width="80%" rules="groups">
|
||||
<a name="new.htmltable"></a><table xml:id="new.htmltable" frame="above" width="80%" rules="groups">
|
||||
<col width="23%">
|
||||
<col width="15%">
|
||||
<col width="61%">
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>Syntax Reference</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="up" href="pcoderef.html" title="P-Code Reference Manual">
|
||||
<link rel="prev" href="additionalpcode.html" title="Additional P-CODE Operations">
|
||||
@ -26,7 +26,7 @@
|
||||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||||
<a name="reference"></a>Syntax Reference</h2></div></div></div>
|
||||
<div class="informalexample"><div class="table">
|
||||
<a name="ref.htmltable"></a><table width="90%" frame="box" rules="rows">
|
||||
<a name="ref.htmltable"></a><table xml:id="ref.htmltable" width="90%" frame="box" rules="rows">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
<col width="50%">
|
||||
@ -45,7 +45,7 @@
|
||||
<td>LOAD</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="loadtmp.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="loadtmp.htmltable"></a><table xml:id="loadtmp.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">* v1</code></td>
|
||||
</tr>
|
||||
@ -68,7 +68,7 @@
|
||||
<td>STORE</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="storetmp.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="storetmp.htmltable"></a><table xml:id="storetmp.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">*v0 = v1;</code></td>
|
||||
</tr>
|
||||
@ -153,7 +153,7 @@
|
||||
<td>INT_LESS</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="less.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="less.htmltable"></a><table xml:id="less.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 < v1</code></td>
|
||||
</tr>
|
||||
@ -169,7 +169,7 @@
|
||||
<td>INT_SLESS</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="sless.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="sless.htmltable"></a><table xml:id="sless.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 s< v1</code></td>
|
||||
</tr>
|
||||
@ -185,7 +185,7 @@
|
||||
<td>INT_LESSEQUAL</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="lessequal.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="lessequal.htmltable"></a><table xml:id="lessequal.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 <= v1</code></td>
|
||||
</tr>
|
||||
@ -201,7 +201,7 @@
|
||||
<td>INT_SLESSEQUAL</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="slessequal.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="slessequal.htmltable"></a><table xml:id="slessequal.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 s<= v1</code></td>
|
||||
</tr>
|
||||
@ -347,7 +347,7 @@
|
||||
<td>FLOAT_LESS</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="floatlesstmp.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="floatlesstmp.htmltable"></a><table xml:id="floatlesstmp.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 f< v1</code></td>
|
||||
</tr>
|
||||
@ -363,7 +363,7 @@
|
||||
<td>FLOAT_LESSEQUAL</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="floatlessequaltmp.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="floatlessequaltmp.htmltable"></a><table xml:id="floatlessequaltmp.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 f<= v1</code></td>
|
||||
</tr>
|
||||
@ -454,7 +454,7 @@
|
||||
<td>NEW</td>
|
||||
<td>
|
||||
<div class="table">
|
||||
<a name="newtmp.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="newtmp.htmltable"></a><table xml:id="newtmp.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">newobject(v0)</code></td>
|
||||
</tr>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>SLEIGH</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="next" href="sleigh_layout.html" title="2. Basic Specification Layout">
|
||||
</head>
|
||||
@ -25,9 +25,9 @@
|
||||
<div class="titlepage">
|
||||
<div>
|
||||
<div><h1 class="title">
|
||||
<a name="idm140526921073488"></a>SLEIGH</h1></div>
|
||||
<a name="sleigh_title"></a>SLEIGH</h1></div>
|
||||
<div><h3 class="subtitle"><i>A Language for Rapid Processor Specification</i></h3></div>
|
||||
<div><p class="releaseinfo">Last updated October 28, 2020</p></div>
|
||||
<div><p class="releaseinfo">Last updated August 24, 2022</p></div>
|
||||
<div><p class="pubdate">Originally published December 16, 2005</p></div>
|
||||
</div>
|
||||
<hr>
|
||||
@ -35,51 +35,51 @@
|
||||
<div class="toc">
|
||||
<p><b>Table of Contents</b></p>
|
||||
<dl class="toc">
|
||||
<dt><span class="sect1"><a href="sleigh.html#idm140526921048752">1. Introduction to P-Code</a></span></dt>
|
||||
<dt><span class="sect1"><a href="sleigh.html#sleigh_introduction">1. Introduction to P-Code</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh.html#idm140526921040400">1.1. Address Spaces</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh.html#sleigh_address_spaces">1.1. Address Spaces</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh.html#sleigh_varnodes">1.2. Varnodes</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh.html#idm140526921024752">1.3. Operations</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh.html#sleigh_operations">1.3. Operations</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_layout.html">2. Basic Specification Layout</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#idm140526920986416">2.1. Comments</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#idm140526920983776">2.2. Identifiers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#idm140526920982144">2.3. Strings</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#idm140526920980384">2.4. Integers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#idm140526920976000">2.5. White Space</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#sleigh_comments">2.1. Comments</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#sleigh_identifiers">2.2. Identifiers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#sleigh_strings">2.3. Strings</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#sleigh_integers">2.4. Integers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_layout.html#sleigh_white_space">2.5. White Space</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_preprocessing.html">3. Preprocessing</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_preprocessing.html#sleigh_including_files">3.1. Including Files</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_preprocessing.html#idm140526920968368">3.2. Preprocessor Macros</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_preprocessing.html#idm140526920961536">3.3. Conditional Compilation</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_preprocessing.html#sleigh_preprocessor_macros">3.2. Preprocessor Macros</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_preprocessing.html#sleigh_conditional_compilation">3.3. Conditional Compilation</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_definitions.html">4. Basic Definitions</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_endianess_definition">4.1. Endianess Definition</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#idm140526921098128">4.2. Alignment Definition</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#idm140526921095104">4.3. Space Definitions</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_alignment_definition">4.2. Alignment Definition</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_space_definitions">4.3. Space Definitions</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_naming_registers">4.4. Naming Registers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#idm140526920875744">4.5. Bit Range Registers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#idm140526920863712">4.6. User-Defined Operations</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_bitrange_registers">4.5. Bit Range Registers</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_definitions.html#sleigh_userdefined_operations">4.6. User-Defined Operations</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_symbols.html">5. Introduction to Symbols</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_symbols.html#idm140526920845152">5.1. Notes on Namespaces</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_symbols.html#sleigh_notes_namespaces">5.1. Notes on Namespaces</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_symbols.html#sleigh_predefined_symbols">5.2. Predefined Symbols</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_tokens.html">6. Tokens and Fields</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#sleigh_defining_tokens">6.1. Defining Tokens and Fields</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#idm140526920800080">6.2. Fields as Family Symbols</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#idm140526920794256">6.3. Attaching Alternate Meanings to Fields</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#sleigh_fields_family">6.2. Fields as Family Symbols</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#sleigh_alternate_meanings">6.3. Attaching Alternate Meanings to Fields</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_tokens.html#sleigh_context_variables">6.4. Context Variables</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_constructors.html">7. Constructors</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#idm140526920750848">7.1. The Five Sections of a Constructor</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#idm140526920746272">7.2. The Table Header</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_sections_constructor">7.1. The Five Sections of a Constructor</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_table_header">7.2. The Table Header</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_display_section">7.3. The Display Section</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_bit_pattern">7.4. The Bit Pattern Section</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_disassembly_actions">7.5. Disassembly Actions Section</a></span></dt>
|
||||
@ -87,12 +87,12 @@
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_semantic_section">7.7. The Semantic Section</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_tables">7.8. Tables</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_macros">7.9. P-code Macros</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#idm140526920290640">7.10. Build Directives</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#idm140526920281024">7.11. Delay Slot Directives</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_build_directives">7.10. Build Directives</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_constructors.html#sleigh_delayslot_directives">7.11. Delay Slot Directives</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="sect1"><a href="sleigh_context.html">8. Using Context</a></span></dt>
|
||||
<dd><dl>
|
||||
<dt><span class="sect2"><a href="sleigh_context.html#idm140526920261472">8.1. Basic Use of Context Variables</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_context.html#sleigh_context_basic">8.1. Basic Use of Context Variables</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_context.html#sleigh_local_change">8.2. Local Context Change</a></span></dt>
|
||||
<dt><span class="sect2"><a href="sleigh_context.html#sleigh_global_change">8.3. Global Context Change</a></span></dt>
|
||||
</dl></dd>
|
||||
@ -101,7 +101,7 @@
|
||||
</div>
|
||||
<div class="simplesect">
|
||||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||||
<a name="idm140526921055904"></a>History</h2></div></div></div>
|
||||
<a name="sleigh_history"></a>History</h2></div></div></div>
|
||||
<p>
|
||||
This document describes the syntax for the SLEIGH processor
|
||||
specification language, which was developed for the GHIDRA
|
||||
@ -129,7 +129,7 @@
|
||||
</div>
|
||||
<div class="simplesect">
|
||||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||||
<a name="idm140526921052720"></a>Overview</h2></div></div></div>
|
||||
<a name="sleigh_overview"></a>Overview</h2></div></div></div>
|
||||
<p>
|
||||
SLEIGH is a language for describing the instruction sets of general
|
||||
purpose microprocessors, in order to facilitate the reverse
|
||||
@ -162,7 +162,7 @@ Italics are used when defining terms and for named entities. Bold is used for SL
|
||||
</div>
|
||||
<div class="sect1">
|
||||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||||
<a name="idm140526921048752"></a>1. Introduction to P-Code</h2></div></div></div>
|
||||
<a name="sleigh_introduction"></a>1. Introduction to P-Code</h2></div></div></div>
|
||||
<p>
|
||||
Although p-code is a distinct language from SLEIGH, because a major
|
||||
purpose of SLEIGH is to specify the translation from machine code to
|
||||
@ -221,7 +221,7 @@ respectively.
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526921040400"></a>1.1. Address Spaces</h3></div></div></div>
|
||||
<a name="sleigh_address_spaces"></a>1.1. Address Spaces</h3></div></div></div>
|
||||
<p>
|
||||
An <span class="emphasis"><em>address</em></span> space for p-code is a generalization of
|
||||
the indexed memory (RAM) that a typical processor has access to, and
|
||||
@ -322,7 +322,7 @@ must be provided and enforced by the specification designer.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526921024752"></a>1.3. Operations</h3></div></div></div>
|
||||
<a name="sleigh_operations"></a>1.3. Operations</h3></div></div></div>
|
||||
<p>
|
||||
P-code is intended to emulate a target processor by substituting a
|
||||
sequence of p-code operations for each machine instruction. Thus every
|
||||
@ -353,7 +353,7 @@ general purpose processor instruction sets. They break up into groups.
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="ops.htmltable"></a><p class="title"><b>Table 1. P-code Operations</b></p>
|
||||
<div class="table-contents"><table width="70%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="ops.htmltable" width="70%" frame="box" rules="all">
|
||||
<col width="40%">
|
||||
<col width="60%">
|
||||
<thead><tr>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>7. Constructors</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_tokens.html" title="6. Tokens and Fields">
|
||||
@ -60,7 +60,7 @@ multiple constructors into a single table are addressed in <a class="xref" href=
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920750848"></a>7.1. The Five Sections of a Constructor</h3></div></div></div>
|
||||
<a name="sleigh_sections_constructor"></a>7.1. The Five Sections of a Constructor</h3></div></div></div>
|
||||
<p>
|
||||
A single complex statement in the specification file describes a
|
||||
constructor. This statement is always made up of five distinct
|
||||
@ -92,7 +92,7 @@ in turn.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920746272"></a>7.2. The Table Header</h3></div></div></div>
|
||||
<a name="sleigh_table_header"></a>7.2. The Table Header</h3></div></div></div>
|
||||
<p>
|
||||
Every constructor must be part of a table, which is the element with
|
||||
an actual family symbol identifier associated with it. So each
|
||||
@ -230,7 +230,7 @@ no such requirement.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920716688"></a>7.3.2. The '^' character</h4></div></div></div>
|
||||
<a name="sleigh_caret"></a>7.3.2. The '^' character</h4></div></div></div>
|
||||
<p>
|
||||
The ‘^’ character in the display section is used to separate
|
||||
identifiers from other characters where there shouldn’t be white space
|
||||
@ -278,7 +278,7 @@ to <span class="emphasis"><em>match</em></span> the constructor being defined.
|
||||
</p>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920705248"></a>7.4.1. Constraints</h4></div></div></div>
|
||||
<a name="sleigh_constraints"></a>7.4.1. Constraints</h4></div></div></div>
|
||||
<p>
|
||||
The patterns required for processor specifications can almost always
|
||||
be described as a mask and value pair. Given a specific instruction
|
||||
@ -337,7 +337,7 @@ requires two or more mask/value style checks to correctly implement.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920691312"></a>7.4.3. Defining Operands and Invoking Subtables</h4></div></div></div>
|
||||
<a name="sleigh_defining_operands"></a>7.4.3. Defining Operands and Invoking Subtables</h4></div></div></div>
|
||||
<p>
|
||||
The principle way of defining a constructor operand, left undefined
|
||||
from the display section, is done in the bit pattern section. If an
|
||||
@ -396,7 +396,7 @@ statement of the grouping of old symbols into the new constructor.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920679904"></a>7.4.4. Variable Length Instructions</h4></div></div></div>
|
||||
<a name="sleigh_variable_length"></a>7.4.4. Variable Length Instructions</h4></div></div></div>
|
||||
<p>
|
||||
There are some additional complexities to designing a specification
|
||||
for a processor with variable length instructions. Some initial
|
||||
@ -419,7 +419,7 @@ designer control over how tokens fit together.
|
||||
</p>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920676432"></a>7.4.4.1. The ';' Operator</h5></div></div></div>
|
||||
<a name="sleigh_semicolon"></a>7.4.4.1. The ';' Operator</h5></div></div></div>
|
||||
<p>
|
||||
The most important operator for patterns defining variable length
|
||||
instructions is the concatenation operator ‘;’. When building a
|
||||
@ -481,7 +481,7 @@ operator, so parentheses may be necessary to get the intended meaning.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920661120"></a>7.4.4.2. The '...' Operator</h5></div></div></div>
|
||||
<a name="sleigh_ellipsis"></a>7.4.4.2. The '...' Operator</h5></div></div></div>
|
||||
<p>
|
||||
The ellipsis operator ‘...’ is used to satisfy the token matching
|
||||
requirements of the ‘&’ and ‘|’ operators (described in the previous
|
||||
@ -557,7 +557,7 @@ don’t quite match the assembly.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920640560"></a>7.4.6. Empty Patterns</h4></div></div></div>
|
||||
<a name="sleigh_empty_patterns"></a>7.4.6. Empty Patterns</h4></div></div></div>
|
||||
<p>
|
||||
Occasionally there is a need for an empty pattern when building
|
||||
tables. An empty pattern matches everything. There is a predefined
|
||||
@ -567,7 +567,7 @@ to indicate an empty pattern.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920638720"></a>7.4.7. Advanced Constraints</h4></div></div></div>
|
||||
<a name="sleigh_advanced_constraints"></a>7.4.7. Advanced Constraints</h4></div></div></div>
|
||||
<p>
|
||||
A constraint does not have to be of the form “field = constant”,
|
||||
although this is almost always what is needed. In certain situations,
|
||||
@ -593,7 +593,7 @@ the following:
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="constraints.htmltable"></a><p class="title"><b>Table 3. Constraint Operators</b></p>
|
||||
<div class="table-contents"><table width="50%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="constraints.htmltable" width="50%" frame="box" rules="all">
|
||||
<col width="50%">
|
||||
<col width="50%">
|
||||
<thead><tr>
|
||||
@ -720,7 +720,7 @@ is built up out of the following typical operators:
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="patexp.htmltable"></a><p class="title"><b>Table 4. Pattern Expression Operators</b></p>
|
||||
<div class="table-contents"><table width="50%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="patexp.htmltable" width="50%" frame="box" rules="all">
|
||||
<col width="50%">
|
||||
<col width="50%">
|
||||
<thead><tr>
|
||||
@ -756,7 +756,7 @@ is built up out of the following typical operators:
|
||||
<td>Bitwise and</td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="bitwiseand.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="bitwiseand.htmltable"></a><table xml:id="bitwiseand.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td>$and</td>
|
||||
</tr>
|
||||
@ -771,7 +771,7 @@ is built up out of the following typical operators:
|
||||
<td>Bitwise or</td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="bitwiseor.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="bitwiseor.htmltable"></a><table xml:id="bitwiseor.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td>$or</td>
|
||||
</tr>
|
||||
@ -786,7 +786,7 @@ is built up out of the following typical operators:
|
||||
<td>Bitwise xor</td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="bitwisexor.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="bitwisexor.htmltable"></a><table xml:id="bitwisexor.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td>$xor</td>
|
||||
</tr>
|
||||
@ -939,7 +939,7 @@ varnode is <span class="emphasis"><em>r1</em></span>.
|
||||
</p>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920530304"></a>7.7.1. Expressions</h4></div></div></div>
|
||||
<a name="sleigh_expressions"></a>7.7.1. Expressions</h4></div></div></div>
|
||||
<p>
|
||||
Expressions are built out of symbols and the binary and unary
|
||||
operators listed in <a class="xref" href="sleigh_ref.html#syntaxref.htmltable" title="Table 5. Semantic Expression Operators and Syntax">Table 5, “Semantic Expression Operators and Syntax”</a> in the
|
||||
@ -954,7 +954,7 @@ within expressions to affect this order.
|
||||
</p>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920527872"></a>7.7.1.1. Arithmetic, Logical and Boolean Operators</h5></div></div></div>
|
||||
<a name="sleigh_arithmetic_logical"></a>7.7.1.1. Arithmetic, Logical and Boolean Operators</h5></div></div></div>
|
||||
<p>
|
||||
For the most part these operators should be familiar to software
|
||||
developers. The only real differences arise from the fact that
|
||||
@ -1017,7 +1017,7 @@ set to something other than one.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920515552"></a>7.7.1.3. Extension</h5></div></div></div>
|
||||
<a name="sleigh_extension"></a>7.7.1.3. Extension</h5></div></div></div>
|
||||
<p>
|
||||
Most processors have instructions that extend small values into big
|
||||
values, and many instructions do these minor data manipulations
|
||||
@ -1039,7 +1039,7 @@ the <span class="bold"><strong>sext</strong></span> operator.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920508832"></a>7.7.1.4. Truncation</h5></div></div></div>
|
||||
<a name="sleigh_truncation"></a>7.7.1.4. Truncation</h5></div></div></div>
|
||||
<p>
|
||||
There are two forms of syntax indicating a truncation of the input
|
||||
varnode. In one the varnode is followed by a colon ‘:’ and an integer
|
||||
@ -1119,7 +1119,7 @@ these are automatically set to zero.
|
||||
</p>
|
||||
<p>
|
||||
This operator can also be used on the left-hand side of assignments
|
||||
with similar behavior and caveats (see <a class="xref" href="sleigh_constructors.html#sleigh_bitrange_assign" title="7.7.2.7. Bit Range Assignments">Section 7.7.2.7, “Bit Range Assignments”</a>).
|
||||
with similar behavior and caveats (see <a class="xref" href="sleigh_constructors.html#sleigh_bitrange_assign" title="7.7.2.8. Bit Range Assignments">Section 7.7.2.8, “Bit Range Assignments”</a>).
|
||||
</p>
|
||||
</div>
|
||||
<div class="sect4">
|
||||
@ -1169,7 +1169,7 @@ the offset portion of the address, and to copy the desired value, the
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920484032"></a>7.7.1.7. Managed Code Operations</h5></div></div></div>
|
||||
<a name="sleigh_managed_code"></a>7.7.1.7. Managed Code Operations</h5></div></div></div>
|
||||
<p>
|
||||
SLEIGH provides basic support for instructions where encoding and context
|
||||
don't provide a complete description of the semantics. This is the case
|
||||
@ -1231,7 +1231,7 @@ define pcodeop arctan;
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920471120"></a>7.7.2. Statements</h4></div></div></div>
|
||||
<a name="sleigh_statements"></a>7.7.2. Statements</h4></div></div></div>
|
||||
<p>
|
||||
We describe the types of semantic statements that are allowed in SLEIGH.
|
||||
</p>
|
||||
@ -1305,7 +1305,7 @@ and may be enforced in future compiler versions.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920458176"></a>7.7.2.2. Storage Statements</h5></div></div></div>
|
||||
<a name="sleigh_storage_statements"></a>7.7.2.2. Storage Statements</h5></div></div></div>
|
||||
<p>
|
||||
SLEIGH supports fairly standard <span class="emphasis"><em>storage statement</em></span>
|
||||
syntax to complement the load operator. The left-hand side of an
|
||||
@ -1336,7 +1336,7 @@ attribute is set to something other than one.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920452240"></a>7.7.2.3. Exports</h5></div></div></div>
|
||||
<a name="sleigh_exports"></a>7.7.2.3. Exports</h5></div></div></div>
|
||||
<p>
|
||||
The semantic section doesn’t just specify how to generate p-code for a
|
||||
constructor. Except for those constructors in the root table, this
|
||||
@ -1388,7 +1388,7 @@ varnode being modified to be exported as an integer constant.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920441008"></a>7.7.2.4. Dynamic References</h5></div></div></div>
|
||||
<a name="sleigh_dynamic_references"></a>7.7.2.4. Dynamic References</h5></div></div></div>
|
||||
<p>
|
||||
The only other operator allowed as part of
|
||||
an <span class="bold"><strong>export</strong></span> statement, is the ‘*’
|
||||
@ -1447,7 +1447,7 @@ levels.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920427360"></a>7.7.2.5. Branching Statements</h5></div></div></div>
|
||||
<a name="sleigh_branching_statements"></a>7.7.2.5. Branching Statements</h5></div></div></div>
|
||||
<p>
|
||||
This section discusses statements that generate p-code branching
|
||||
operations. These are listed in <a class="xref" href="sleigh_ref.html#branchref.htmltable" title="Table 7. Branching Statements">Table 7, “Branching Statements”</a>, in the Appendix.
|
||||
@ -1677,7 +1677,28 @@ or <span class="emphasis"><em>CALL</em></span> operation.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="sleigh_bitrange_assign"></a>7.7.2.7. Bit Range Assignments</h5></div></div></div>
|
||||
<a name="sleigh_skip_instruction_branching"></a>7.7.2.7. Skip Instruction Branching</h5></div></div></div>
|
||||
<p>
|
||||
Many processors have a conditional-skip-instruction which must branch over the next instruction
|
||||
based upon some condition. The <span class="emphasis"><em>inst_next2</em></span> symbol has been provided for
|
||||
this purpose.
|
||||
</p>
|
||||
<div class="informalexample"><pre class="programlisting">
|
||||
:skip.eq is opcode=10 {
|
||||
if (zeroflag!=0) goto inst_next2;
|
||||
}
|
||||
</pre></div>
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
In the example above, the branch address will be determined by adding the parsed-length of the next
|
||||
instruction to the value of <span class="emphasis"><em>inst_next</em></span> causing a branch over the next
|
||||
instruction when the condition is satisfied.
|
||||
</p>
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="sleigh_bitrange_assign"></a>7.7.2.8. Bit Range Assignments</h5></div></div></div>
|
||||
<p>
|
||||
The bit range operator can appear on the left-hand side of an
|
||||
assignment. But as with the ‘*’ operator, its meaning is slightly
|
||||
@ -1802,7 +1823,7 @@ each followed by a variation which corrects the error.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920360336"></a>7.7.4. Unimplemented Semantics</h4></div></div></div>
|
||||
<a name="sleigh_unimplemented_semantics"></a>7.7.4. Unimplemented Semantics</h4></div></div></div>
|
||||
<p>
|
||||
The semantic section must be present for every constructor in the
|
||||
specification. But the designer can leave the semantics explicitly
|
||||
@ -1962,7 +1983,7 @@ should generally be avoided.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920333184"></a>7.8.2. Specific Symbol Trees</h4></div></div></div>
|
||||
<a name="sleigh_specific_symbol_trees"></a>7.8.2. Specific Symbol Trees</h4></div></div></div>
|
||||
<p>
|
||||
When the SLEIGH parser analyzes an instruction, it starts with the
|
||||
root symbol <span class="emphasis"><em>instruction</em></span>, and decides which of the
|
||||
@ -2045,7 +2066,7 @@ and p-code for these encodings by walking the trees.
|
||||
</p>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920314640"></a>7.8.2.1. Disassembly Trees</h5></div></div></div>
|
||||
<a name="sleigh_disassembly_trees"></a>7.8.2.1. Disassembly Trees</h5></div></div></div>
|
||||
<p>
|
||||
If the nodes of each tree are replaced with the display information of
|
||||
the corresponding specific symbol, we see how the disassembly
|
||||
@ -2068,7 +2089,7 @@ statements corresponding to the original instruction encodings.
|
||||
</div>
|
||||
<div class="sect4">
|
||||
<div class="titlepage"><div><div><h5 class="title">
|
||||
<a name="idm140526920308256"></a>7.8.2.2. P-code Trees</h5></div></div></div>
|
||||
<a name="sleigh_pcode_trees"></a>7.8.2.2. P-code Trees</h5></div></div></div>
|
||||
<p>
|
||||
A similar procedure produces the resulting p-code translation of the
|
||||
instruction. If each node in the specific symbol tree is replaced with
|
||||
@ -2147,7 +2168,7 @@ directive however should not be used in a macro.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920290640"></a>7.10. Build Directives</h3></div></div></div>
|
||||
<a name="sleigh_build_directives"></a>7.10. Build Directives</h3></div></div></div>
|
||||
<p>
|
||||
Because the nodes of a specific symbol tree are traversed in a
|
||||
depth-first order, the p-code for a child node in general comes before
|
||||
@ -2202,7 +2223,7 @@ normal action of the instruction.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920281024"></a>7.11. Delay Slot Directives</h3></div></div></div>
|
||||
<a name="sleigh_delayslot_directives"></a>7.11. Delay Slot Directives</h3></div></div></div>
|
||||
<p>
|
||||
For processors with a pipe-lined architecture, multiple instructions
|
||||
are typically executing simultaneously. This can lead to processor
|
||||
@ -2245,7 +2266,8 @@ by the condition.
|
||||
<p>
|
||||
Because the <span class="bold"><strong>delayslot</strong></span> directive
|
||||
combines two or more instructions into one, the meaning of the
|
||||
symbol <span class="emphasis"><em>inst_next</em></span> becomes ambiguous. It is not
|
||||
symbols <span class="emphasis"><em>inst_next</em></span> and <span class="emphasis"><em>inst_next2</em></span>
|
||||
become ambiguous. It is not
|
||||
clear anymore what exactly the “next instruction” is. SLEIGH uses the
|
||||
following conventions for interpreting
|
||||
an <span class="emphasis"><em>inst_next</em></span> symbol. If it is used in the
|
||||
@ -2253,7 +2275,12 @@ semantic section, the symbol refers to the address of the instruction
|
||||
after any instructions in the delay slot. However, if it is used in a
|
||||
disassembly action, the <span class="emphasis"><em>inst_next</em></span> symbol refers
|
||||
to the address of the instruction immediately after the first
|
||||
instruction, even if there is a delay slot.
|
||||
instruction, even if there is a delay slot. The use of the
|
||||
<span class="emphasis"><em>inst_next2</em></span> symbol may be inappropriate in conjunction
|
||||
with <span class="bold"><strong>delayslot</strong></span> use. While its use of the
|
||||
next instruction address is identified by <span class="emphasis"><em>inst_next</em></span>,
|
||||
the length of the next instruction ignores any delay slots it may have
|
||||
when computing the value of <span class="emphasis"><em>inst_next2</em></span>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>8. Using Context</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_constructors.html" title="7. Constructors">
|
||||
@ -85,7 +85,7 @@ whose encodings are otherwise the same.
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920261472"></a>8.1. Basic Use of Context Variables</h3></div></div></div>
|
||||
<a name="sleigh_context_basic"></a>8.1. Basic Use of Context Variables</h3></div></div></div>
|
||||
<p>
|
||||
Suppose a processor supports the use of two different sets of
|
||||
registers in its main addressing mode, based on the setting of a
|
||||
@ -100,7 +100,7 @@ define space ram type=ram_space size=4 default;
|
||||
define space register type=register_space size=4;
|
||||
define register offset=0 size=4 [ r0 r1 r2 r3 r4 r5 r6 r7 ];
|
||||
define register offset=0x100 size=4 [ s0 s1 s2 s3 s4 s5 s6 s7 ];
|
||||
define register offset=0x200 size=4 [ contextreg ]; # define context bits (if defined, size must be multiple of 4-bytes)
|
||||
define register offset=0x200 size=4 [ statusreg ]; # define context bits (if defined, size must be multiple of 4-bytes)
|
||||
|
||||
define token instr(16)
|
||||
op=(10,15) rreg1=(7,9) sreg1=(7,9) imm=(0,6)
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>4. Basic Definitions</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_preprocessing.html" title="3. Preprocessing">
|
||||
@ -56,7 +56,7 @@ otherwise the specification language hides endianess issues.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526921098128"></a>4.2. Alignment Definition</h3></div></div></div>
|
||||
<a name="sleigh_alignment_definition"></a>4.2. Alignment Definition</h3></div></div></div>
|
||||
<p>
|
||||
An alignment definition looks like
|
||||
</p>
|
||||
@ -73,7 +73,7 @@ instruction as an error.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526921095104"></a>4.3. Space Definitions</h3></div></div></div>
|
||||
<a name="sleigh_space_definitions"></a>4.3. Space Definitions</h3></div></div></div>
|
||||
<p>
|
||||
The definition of an address space looks like
|
||||
</p>
|
||||
@ -228,7 +228,7 @@ define register offset=0 size=1
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920875744"></a>4.5. Bit Range Registers</h3></div></div></div>
|
||||
<a name="sleigh_bitrange_registers"></a>4.5. Bit Range Registers</h3></div></div></div>
|
||||
<p>
|
||||
Many processors define registers that either consist of a single bit
|
||||
or otherwise don't use an integral number of bytes. A recurring
|
||||
@ -299,7 +299,7 @@ used as an alternate syntax for defining overlapping registers.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920863712"></a>4.6. User-Defined Operations</h3></div></div></div>
|
||||
<a name="sleigh_userdefined_operations"></a>4.6. User-Defined Operations</h3></div></div></div>
|
||||
<p>
|
||||
The specification designer can define new p-code operations using
|
||||
a <span class="bold"><strong>define pcodeop</strong></span> statement. This
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>2. Basic Specification Layout</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh.html" title="SLEIGH">
|
||||
@ -36,7 +36,7 @@ by the compiler.
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920986416"></a>2.1. Comments</h3></div></div></div>
|
||||
<a name="sleigh_comments"></a>2.1. Comments</h3></div></div></div>
|
||||
<p>
|
||||
Comments start with the ‘#’ character and continue to the end of the
|
||||
line. Comments can appear anywhere except the <span class="emphasis"><em>display section</em></span> of a
|
||||
@ -46,7 +46,7 @@ interpreted as something that should be printed in disassembly.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920983776"></a>2.2. Identifiers</h3></div></div></div>
|
||||
<a name="sleigh_identifiers"></a>2.2. Identifiers</h3></div></div></div>
|
||||
<p>
|
||||
Identifiers are made up of letters a-z, capitals A-Z, digits 0-9 and
|
||||
the characters ‘.’ and ‘_’. An identifier can use these characters in
|
||||
@ -55,7 +55,7 @@ any order and for any length, but it must not start with a digit.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920982144"></a>2.3. Strings</h3></div></div></div>
|
||||
<a name="sleigh_strings"></a>2.3. Strings</h3></div></div></div>
|
||||
<p>
|
||||
String literals can be used, when specifying names and when specifying
|
||||
how disassembly should be printed, so that special characters are
|
||||
@ -66,7 +66,7 @@ meaning.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920980384"></a>2.4. Integers</h3></div></div></div>
|
||||
<a name="sleigh_integers"></a>2.4. Integers</h3></div></div></div>
|
||||
<p>
|
||||
Integers are specified either in a decimal format or in a standard
|
||||
<span class="emphasis"><em>C-style</em></span> hexadecimal format by prepending the
|
||||
@ -92,7 +92,7 @@ integers internally with 64 bits of precision.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920976000"></a>2.5. White Space</h3></div></div></div>
|
||||
<a name="sleigh_white_space"></a>2.5. White Space</h3></div></div></div>
|
||||
<p>
|
||||
White space characters include space, tab, line-feed, vertical
|
||||
line-feed, and carriage-return (‘ ‘, ‘\t’, ‘\r’, ‘\v’,
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>3. Preprocessing</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_layout.html" title="2. Basic Specification Layout">
|
||||
@ -54,7 +54,7 @@ own <span class="bold"><strong>@include</strong></span> directives.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920968368"></a>3.2. Preprocessor Macros</h3></div></div></div>
|
||||
<a name="sleigh_preprocessor_macros"></a>3.2. Preprocessor Macros</h3></div></div></div>
|
||||
<p>
|
||||
SLEIGH allows simple (unparameterized) macro definitions and
|
||||
expansions. A macro definition occurs on one line and starts with
|
||||
@ -85,7 +85,7 @@ definition of a macro from that point on in the file.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920961536"></a>3.3. Conditional Compilation</h3></div></div></div>
|
||||
<a name="sleigh_conditional_compilation"></a>3.3. Conditional Compilation</h3></div></div></div>
|
||||
<p>
|
||||
SLEIGH supports several directives that allow conditional inclusion of
|
||||
parts of a specification, based on the existence of a macro, or its
|
||||
@ -103,7 +103,7 @@ and <span class="bold"><strong>@endif</strong></span>.
|
||||
</p>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920955392"></a>3.3.1. @ifdef and @ifndef</h4></div></div></div>
|
||||
<a name="sleigh_ifdef"></a>3.3.1. @ifdef and @ifndef</h4></div></div></div>
|
||||
<p>
|
||||
The <span class="bold"><strong>@ifdef</strong></span> directive is followed by a
|
||||
macro identifier and evaluates to true if the macro is defined.
|
||||
@ -129,7 +129,7 @@ or <span class="bold"><strong>@elif</strong></span> directive (See below).
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920949120"></a>3.3.2. @if</h4></div></div></div>
|
||||
<a name="sleigh_if"></a>3.3.2. @if</h4></div></div></div>
|
||||
<p>
|
||||
The <span class="bold"><strong>@if</strong></span> directive is followed by a
|
||||
boolean expression with macros as the variables and strings as the
|
||||
@ -158,7 +158,7 @@ is defined.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920942032"></a>3.3.3. @else and @elif</h4></div></div></div>
|
||||
<a name="sleigh_else"></a>3.3.3. @else and @elif</h4></div></div></div>
|
||||
<p>
|
||||
An <span class="bold"><strong>@else</strong></span> directive splits the lines
|
||||
bounded by an <span class="bold"><strong>@if</strong></span> directive and
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>9. P-code Tables</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_context.html" title="8. Using Context">
|
||||
@ -47,7 +47,7 @@ to lowest.
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="syntaxref.htmltable"></a><p class="title"><b>Table 5. Semantic Expression Operators and Syntax</b></p>
|
||||
<div class="table-contents"><table width="95%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="syntaxref.htmltable" width="95%" frame="box" rules="all">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
<col width="50%">
|
||||
@ -61,7 +61,7 @@ to lowest.
|
||||
<td><code class="code">SUBPIECE</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="subpieceref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="subpieceref.htmltable"></a><table xml:id="subpieceref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0:2</code></td>
|
||||
</tr>
|
||||
@ -98,7 +98,7 @@ to lowest.
|
||||
<td><code class="code">LOAD</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="loadref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="loadref.htmltable"></a><table xml:id="loadref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">* v1</code></td>
|
||||
</tr>
|
||||
@ -214,7 +214,7 @@ to lowest.
|
||||
<td><code class="code">INT_SLESS</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="slessref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="slessref.htmltable"></a><table xml:id="slessref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 s< v1</code></td>
|
||||
</tr>
|
||||
@ -230,7 +230,7 @@ to lowest.
|
||||
<td><code class="code">INT_SLESSEQUAL</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="slessequalref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="slessequalref.htmltable"></a><table xml:id="slessequalref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 s<= v1</code></td>
|
||||
</tr>
|
||||
@ -246,7 +246,7 @@ to lowest.
|
||||
<td><code class="code">INT_LESS</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="lessref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="lessref.htmltable"></a><table xml:id="lessref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 < v1</code></td>
|
||||
</tr>
|
||||
@ -262,7 +262,7 @@ to lowest.
|
||||
<td><code class="code">INT_LESSEQUAL</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="lessequalref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="lessequalref.htmltable"></a><table xml:id="lessequalref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 <= v1</code></td>
|
||||
</tr>
|
||||
@ -278,7 +278,7 @@ to lowest.
|
||||
<td><code class="code">FLOAT_LESS</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="flessref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="flessref.htmltable"></a><table xml:id="flessref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 f< v1</code></td>
|
||||
</tr>
|
||||
@ -294,7 +294,7 @@ to lowest.
|
||||
<td><code class="code">FLOAT_LESSEQUAL</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="flessequalref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="flessequalref.htmltable"></a><table xml:id="flessequalref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">v0 f<= v1</code></td>
|
||||
</tr>
|
||||
@ -454,7 +454,7 @@ The following table lists the basic forms of a semantic statement.
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="statementref.htmltable"></a><p class="title"><b>Table 6. Basic Statements and Associated Operators</b></p>
|
||||
<div class="table-contents"><table width="95%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="statementref.htmltable" width="95%" frame="box" rules="all">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
<col width="50%">
|
||||
@ -473,7 +473,7 @@ The following table lists the basic forms of a semantic statement.
|
||||
<td><code class="code">STORE</code></td>
|
||||
<td>
|
||||
<div class="informaltable">
|
||||
<a name="storeref.htmltable"></a><table frame="none"><tbody>
|
||||
<a name="storeref.htmltable"></a><table xml:id="storeref.htmltable" frame="none"><tbody>
|
||||
<tr>
|
||||
<td><code class="code">*v0 = v1</code></td>
|
||||
</tr>
|
||||
@ -533,7 +533,7 @@ The following table lists the branching operations and the statements which invo
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="branchref.htmltable"></a><p class="title"><b>Table 7. Branching Statements</b></p>
|
||||
<div class="table-contents"><table width="95%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="branchref.htmltable" width="95%" frame="box" rules="all">
|
||||
<col width="25%">
|
||||
<col width="25%">
|
||||
<col width="50%">
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>5. Introduction to Symbols</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_definitions.html" title="4. Basic Definitions">
|
||||
@ -105,7 +105,7 @@ the predefined identifier <span class="emphasis"><em>instruction</em></span>.
|
||||
</p>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920845152"></a>5.1. Notes on Namespaces</h3></div></div></div>
|
||||
<a name="sleigh_notes_namespaces"></a>5.1. Notes on Namespaces</h3></div></div></div>
|
||||
<p>
|
||||
Almost all identifiers live in the same global "scope". The global scope includes
|
||||
</p>
|
||||
@ -150,7 +150,7 @@ We list all of the symbols that are predefined by SLEIGH.
|
||||
<div class="informalexample">
|
||||
<div class="table">
|
||||
<a name="predefine.htmltable"></a><p class="title"><b>Table 2. Predefined Symbols</b></p>
|
||||
<div class="table-contents"><table width="80%" frame="box" rules="all">
|
||||
<div class="table-contents"><table xml:id="predefine.htmltable" width="80%" frame="box" rules="all">
|
||||
<col width="30%">
|
||||
<col width="70%">
|
||||
<thead><tr>
|
||||
@ -178,6 +178,10 @@ We list all of the symbols that are predefined by SLEIGH.
|
||||
<td><code class="code">inst_next</code></td>
|
||||
<td>Offset of the address of the next instruction.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code class="code">inst_next2</code></td>
|
||||
<td>Offset of the address of the instruction after the next instruction.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code class="code">epsilon</code></td>
|
||||
<td>A special identifier indicating an empty bit pattern.</td>
|
||||
@ -194,7 +198,8 @@ and <span class="emphasis"><em>inst_next</em></span>. These are family symbols w
|
||||
in the context of particular instruction to the integer offset of
|
||||
either the address of the instruction or the address of the next
|
||||
instruction respectively. These are used in any relative branching
|
||||
situation. The other symbols are rarely
|
||||
situation. The <span class="emphasis"><em>inst_next2</em></span> is intended for conditional
|
||||
skip instruction situations. The remaining symbols are rarely
|
||||
used. The <span class="emphasis"><em>const</em></span> and <span class="emphasis"><em>unique</em></span>
|
||||
identifiers are address spaces. The <span class="emphasis"><em>epsilon</em></span>
|
||||
identifier is inherited from SLED and is a specific symbol equivalent
|
||||
|
@ -4,7 +4,7 @@
|
||||
<title>6. Tokens and Fields</title>
|
||||
<link rel="stylesheet" type="text/css" href="Frontpage.css">
|
||||
<link rel="stylesheet" type="text/css" href="languages.css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||||
<link rel="home" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="up" href="sleigh.html" title="SLEIGH">
|
||||
<link rel="prev" href="sleigh_symbols.html" title="5. Introduction to Symbols">
|
||||
@ -88,7 +88,7 @@ different names.
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920800080"></a>6.2. Fields as Family Symbols</h3></div></div></div>
|
||||
<a name="sleigh_fields_family"></a>6.2. Fields as Family Symbols</h3></div></div></div>
|
||||
<p>
|
||||
Fields are the most basic form of family symbol; they define a natural
|
||||
map from instruction bits to a specific symbol as follows. We take the
|
||||
@ -113,7 +113,7 @@ the <span class="bold"><strong>dec</strong></span> attribute is not supported]
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="idm140526920794256"></a>6.3. Attaching Alternate Meanings to Fields</h3></div></div></div>
|
||||
<a name="sleigh_alternate_meanings"></a>6.3. Attaching Alternate Meanings to Fields</h3></div></div></div>
|
||||
<p>
|
||||
The default interpretation of a field is probably the most natural but
|
||||
of course processors interpret fields within an instruction in a wide
|
||||
@ -124,7 +124,7 @@ interpretations must be built up out of tables.
|
||||
</p>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920792112"></a>6.3.1. Attaching Registers</h4></div></div></div>
|
||||
<a name="sleigh_attaching_registers"></a>6.3.1. Attaching Registers</h4></div></div></div>
|
||||
<p>
|
||||
Probably <span class="emphasis"><em>the</em></span> most common processor interpretation
|
||||
of a field is as an encoding of a particular register. In SLEIGH this
|
||||
@ -163,7 +163,7 @@ of the instruction.
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920783840"></a>6.3.2. Attaching Other Integers</h4></div></div></div>
|
||||
<a name="sleigh_attaching_integers"></a>6.3.2. Attaching Other Integers</h4></div></div></div>
|
||||
<p>
|
||||
Sometimes a processor interprets a field as an integer but not the
|
||||
integer given by the default interpretation. A different integer
|
||||
@ -185,7 +185,7 @@ unspecified positions in the list using a ‘_’]
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="idm140526920778208"></a>6.3.3. Attaching Names</h4></div></div></div>
|
||||
<a name="sleigh_attaching_names"></a>6.3.3. Attaching Names</h4></div></div></div>
|
||||
<p>
|
||||
It is possible to just modify the display characteristics of a field
|
||||
without changing the semantic meaning. The need for this is rare, but
|
||||
|
Loading…
Reference in New Issue
Block a user