| Index: src/trusted/validator/x86/decoder/generator/ncdecode_forms.h
|
| diff --git a/src/trusted/validator/x86/decoder/generator/ncdecode_forms.h b/src/trusted/validator/x86/decoder/generator/ncdecode_forms.h
|
| deleted file mode 100644
|
| index e02b9cd507a3013ca0619b5b35d440d8df86996d..0000000000000000000000000000000000000000
|
| --- a/src/trusted/validator/x86/decoder/generator/ncdecode_forms.h
|
| +++ /dev/null
|
| @@ -1,480 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 The Native Client Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -/*
|
| - * Set of predefined instruction forms (via procedure calls), providing
|
| - * a more concise way of specifying opcodes.
|
| - */
|
| -
|
| -#ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_FORMS_H__
|
| -#define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_FORMS_H__
|
| -
|
| -#ifndef NACL_TRUSTED_BUT_NOT_TCB
|
| -#error("This file is not meant for use in the TCB")
|
| -#endif
|
| -
|
| -#include "native_client/src/trusted/validator/x86/decoder/ncopcode_desc.h"
|
| -
|
| -struct NaClSymbolTable;
|
| -
|
| -/* Defines the general category of instruction, and is used to define
|
| - * set/use values for instructions. That is, most X86 instructions
|
| - * have the form:
|
| - *
|
| - * OP Dest, Source
|
| - *
|
| - * where OP is some mnemonic name, the first argument is the DEST (because
|
| - * side effecting operations change this value), and Source is a second (use)
|
| - * argument.
|
| - *
|
| - * Note: Unary operands assume form:
|
| - *
|
| - * OP Dest
|
| - *
|
| - * Reading the text associated with each instruction, one should be able to
|
| - * categorize (most) instructions, into one of the following:
|
| - */
|
| -typedef enum NaClInstCat {
|
| - /* The following are for categorizing operands with a single operand. */
|
| - UnarySet, /* The value of Dest is set to a predetermined value. */
|
| - UnaryUpdate, /* Dest := f(Dest) for some f. */
|
| - /* The following are for categorizing operations with 2 or more operands. */
|
| - Move, /* Dest := f(Source) for some f. */
|
| - O2Move, /* Dest1, Dest2 = f(source) for some f. */
|
| - Binary, /* Dest := f(Dest, Source) for some f. */
|
| - O2Binary, /* Dest1,Dest2 = f(Dest2, Source) for some f. */
|
| - Nary, /* Dest := f(dest, source1, ..., sourcen) for some f. */
|
| - O1Nary, /* Dest := f(source1, ..., sourcen) for some f. */
|
| - O3Nary, /* Dest1,Dest2,Dest3 = f(source1, ..., sourcen) for some f. */
|
| - Compare, /* Sets flag using f(Dest, Source). The value of Dest is not
|
| - * modified.
|
| - */
|
| - Exchange, /* Dest := f(Dest, Source) for some f, and
|
| - * Source := g(Dest, Source) for some g.
|
| - */
|
| - Push, /* Implicit first (stack) argument is updated, and the
|
| - * value of the Dest is not modified.
|
| - */
|
| - Pop, /* Implicit first (stack) argument is updated, and
|
| - * dest := f() for some f (i.e. f gets the value on
|
| - * top of the stack).
|
| - */
|
| - Call, /* Implicit ip first argument that is updated. Stack second
|
| - * argument that is updated. Third argument is used.
|
| - */
|
| - SysCall, /* Implicit ip first argument that is updated, Implicit register
|
| - * second argument that is set.
|
| - */
|
| - SysJump, /* First four arguments are set (eip, esp, cs, ss). Remaining
|
| - * (if any) are used.
|
| - */
|
| - Return, /* Implicit ip first argument that is set. Stack second
|
| - * argument that is updated. Third argument, if given, is used.
|
| - */
|
| - SysRet, /* Implicit ip first argument that is set. Implicit register
|
| - * second argument that is used.
|
| - */
|
| - Jump, /* Implicit first (IP) argument is updated to the
|
| - * value of the Dest argument.
|
| - */
|
| - Uses, /* All arguments are uses. */
|
| - Sets, /* All arguments are set. */
|
| - Lea, /* Address calculation, and hence, operand 2 is neither used
|
| - * nor set.
|
| - */
|
| - Cpuid, /* Sets all, uses starting with third. */
|
| - Other, /* No implicit set/use implications. */
|
| -} NaClInstCat;
|
| -
|
| -/* Defines the maximum length of an opcode sequence descriptor (see
|
| - * comment for typedef NaClOpcodeSeq). Note: two extra bytes have been added
|
| - * for SL(x) and END_OPCODE_SEQ entries.
|
| - */
|
| -#define NACL_OPCODE_SEQ_SIZE (NACL_MAX_OPCODE_BYTES + 2)
|
| -
|
| -/* Models an opcode sequence. Used by NaClInInstructionSet to describe
|
| - * an instruction implemented by a sequence of bytes. Macro SL(N) is used
|
| - * to describe an additional value N, which appears in the modrm mod field.
|
| - * Macro END_OPCODE_SEQ is an placeholder, ignore value, defining the end of the
|
| - * opcode sequence.
|
| - *
|
| - * 0..256 => Opcode byte.
|
| - * PR(N) => prefix byte value N.
|
| - * SL(N) => /N
|
| - * END_OPCODE_SEQ => Not part of prefix.
|
| - */
|
| -typedef int16_t NaClOpcodeSeq[NACL_OPCODE_SEQ_SIZE];
|
| -
|
| -/* Value denoting the end of an opcode sequence (descriptor). */
|
| -#define END_OPCODE_SEQ 512
|
| -
|
| -/* Define value in modrm (i.e. /n in opcode sequence). */
|
| -#define SL(n) (-((n) + 1))
|
| -
|
| -/* Define prefix value for opcode sequence. */
|
| -#define PR(n) SL(n) - END_OPCODE_SEQ
|
| -
|
| -/* Model an instruction by its mnemonic and opcode sequence. */
|
| -typedef struct NaClNameOpcodeSeq {
|
| - NaClMnemonic name;
|
| - NaClOpcodeSeq opcode_seq;
|
| -} NaClNameOpcodeSeq;
|
| -
|
| -/* Returns true iff the current instruction has one of the given mnemonic names,
|
| - * or is defined by one of the name and opcode sequences. Note: It is safe to
|
| - * pass NULL for names or name_and_opcode_seq, if the corresponding size
|
| - * parameter is zero.
|
| - */
|
| -Bool NaClInInstructionSet(const NaClMnemonic* names,
|
| - size_t names_size,
|
| - const NaClNameOpcodeSeq* name_and_opcode_seq,
|
| - size_t name_and_opcode_seq_size);
|
| -
|
| -/* Model of a an operand processing function. */
|
| -typedef void (*NaClDefOperand)(void);
|
| -
|
| -/***************************************************************************
|
| - * This section is the new API for defining instructions. It uses a string,
|
| - * describing the instruction to model. In addition, a symbol table is passed
|
| - * in to define possible substitutions.
|
| - *
|
| - * The string defining the instruction is called an "opcode description string".
|
| - *
|
| - * Examples: The following are some examples of opcode description strings.
|
| - *
|
| - * "06: Push {%@sp}, %es" - Defines (opcode 06) that pushes register es
|
| - * "07: Pop {%@sp}, %es" - Defines (opcode 07) that pops into register es.
|
| - * "69/r: Imul $Gv, $Ev, $Iz" - Defines (opcode 69) a signed multiply.
|
| - * "0fba/7: Btc $Ev, $Ib" - Defines (opcode 0f ba, with opcode extension
|
| - * 7 in the modrm mod field) a bit test and complement.
|
| - * "90+@i: Xchg $r8v, $rAX" - Defines (opcode 90+i) exchange register/memory
|
| - * with register.
|
| - *
|
| - * A (symbol table) substitution is defined as follows:
|
| - *
|
| - * (1) It begins with the character '@';
|
| - * (2) Its name is an alphanumeric sequence; and
|
| - * (3) The name is terminated by a character in the charset ' :+/{}'.
|
| - *
|
| - * The general form of an opcode description string is a sequence of
|
| - * hex values defining the opcode prefix, and the opcode byte. This
|
| - * sequence of values must be terminated with a colon (:). No spaces
|
| - * are allowed in this sequence.
|
| - *
|
| - * If the instruction uses the modrm byte, a '/r' must immediately follow
|
| - * the sequence of hex values (and must appear before the colon).
|
| - *
|
| - * If the instruction is continued in the modrm mod field (i.e. a value 0..7),
|
| - * the characters /N (where N is in 0..7) must immediately follow the sequence
|
| - * of hex values (and must appear before the colon).
|
| - *
|
| - * If the instruction encodes a register value as part of the opcode byte,
|
| - * the value of the register defined is the string '+R' (where R is in 0..7),
|
| - * and must immediately follow the sequence of hex values (and must appear
|
| - * before the colon).
|
| -
|
| - * Note: If the instruction uses an operand print form that uses the modrm
|
| - * value (such as $E or $G), then it is not necessary to add the
|
| - * /r suffix to the sequence of hex values.
|
| - *
|
| - * After the colon, the mnemonic name of the instruction must appear. An
|
| - * arbitrary number of spaces can appear between the colon, and the mnemonic
|
| - * name. The mnemonic name is then followed by zero or more operands.
|
| - * Each operand can be separated by an arbitrary sequence of spaces and/or
|
| - * commas.
|
| - *
|
| - * Each operand specifies a register and/or memory address. An operand
|
| - * may not contain spaces.
|
| - *
|
| - * If the operand is implicit (i.e. should not appear when printing a
|
| - * decoded instruction), it should be enclosed in curly braces. In general,
|
| - * we put implicit operands first, but there are no rules defining where an
|
| - * implicit operand may appear.
|
| - *
|
| - * A register begins with the character '%', and is followed by its name.
|
| - * Register names are case insensitive. Legal values are any operand kind
|
| - * defined in ncopcode_operand_kind.enum that begins with the text 'Reg'.
|
| - *
|
| - * A print form begins with the character '$", and is followed by a name.
|
| - * Print forms are, in general, defined by Appendex section A.1 - Opcode-Syntax
|
| - * Notation in AMD document 24594-Rev.3.14-September 2007, "AMD64 Architecture
|
| - * Programmer's manual Volume 3: General-Purpose and System Instructions".
|
| - * Exceptions are made for descriptions used in that appendex, but are
|
| - * not documented in this section. For clarity, the rules are explicitly
|
| - * defined as follows: A print form consists of a FORM, followed by
|
| - * a SIZE specification.
|
| - *
|
| - * Valid FORMs are:
|
| - * A - Far pointer is encoded in the instruction.
|
| - * C - Control register specified by the ModRM reg field.
|
| - * D - Debug register specified by the ModRM reg field.
|
| - * E - General purpose register or memory operand specified by the ModRm
|
| - * byte. Memory addresses can be computed from a segment register,
|
| - * SIB byte, and/or displacement.
|
| - * F - rFLAGS register.
|
| - * G - General purpose register specified by the ModRm reg field.
|
| - * I - Immediate value.
|
| - * J - The instruction includes a relative offset that is added to the rIP
|
| - * register.
|
| - * M - A memory operand specified by the ModRM byte.
|
| - * O - The offset of an operand is encoded in the instruction. There is no
|
| - * ModRm byte in the instruction. Complex addressing using the SIB byte
|
| - * cannot be done.
|
| - * P - 64-bit MMX register specified by the ModRM reg field.
|
| - * PR - 64 bit MMX register specified by the ModRM r/m field. The ModRM mod
|
| - * field must be 11b.
|
| - * Q - 64 bit MMX register or memory operand specified by the ModRM byte.
|
| - * Memory addresses can be computed from a segment register, SIB byte,
|
| - * and/or displacement.
|
| - * R - General purpose register specified by the ModRM r/m field. The ModRM
|
| - * mod field must be 11b.
|
| - * S - Segment register specified by the ModRM reg field.
|
| - * U - The R/M field of the ModR/M byte selects a 128-bit XMM register.
|
| - * V - 128-bit XMM register specified by the ModRM reg field.
|
| - * VR - 128-bit XMM register specified by the ModRM r/m field. The ModRM mod
|
| - * field must be 11b.
|
| - * W - 128 Xmm register or memory operand specified by the ModRm Byte. Memory
|
| - * addresses can be computed from a segment register, SIB byte, and/or
|
| - * displacement.
|
| - * X - A memory operand addressed by the DS.rSI registers. Used in string
|
| - * instructions.
|
| - * Y - A memory operand addressed by the ES.rDI registers. Used in string
|
| - * instructions.
|
| - * Z - A memory operand addressed by the DS.rDI registers. Used in maskmov
|
| - * instructions.
|
| - * r8 - The 8 registers rAX, rCX, rDX, rBX, rSP, rBP, rSI, rDI, and the
|
| - * optional registers r8-r15 if REX.b is set, based on the register value
|
| - * embedded in the opcode.
|
| - * SG - segment address defined by a G expression and the segment register in
|
| - * the corresponding mnemonic (lds, les, lfs, lgs, lss).
|
| - * rAX - The register AX, EAX, or RAX, depending on SIZE.
|
| - * rBP - The register BP, EBP, or RBP, depending on SIZE.
|
| - * rBX - The register BX, EBX, or RBX, depending on SIZE.
|
| - * rCX - The register CX, ECX, or RCX, depending on SIZE.
|
| - * rDI - The register DI, EDI, or RDI, depending on SIZE.
|
| - * rDX - The register DX, EDX, or RDX, depending on SIZE.
|
| - * rSI - The register SI, ESI, or RSI, depending on SIZE.
|
| - * rSP - The register SP, ESP, or RSP, depending on SIZE.
|
| - *
|
| - * Note: r8 is not in the manual cited above. It has been added to deal with
|
| - * instructions with an embedded register in the opcode. In such cases, this
|
| - * value allows a single defining call to be used (within a for loop),
|
| - * rather than writing eight separate rules (one for each possible register
|
| - * value).
|
| - *
|
| - * Note: SG is also not in the manual cited above. It has been added to deal
|
| - * with the instructions lds, les, lfs, lgs, and lss, which generate a
|
| - * segment address from a General purpose register specified in the ModRm reg
|
| - * field.
|
| - *
|
| - * Note: Z is also not in the manual cited above. It has been added to deal with
|
| - * the implicit argument of maskmov instructions.
|
| - *
|
| - * Valid SIZEs are:
|
| - * a - Two 16-bit or 32-bit memory operands, depending on the effective
|
| - * operand size. Used in the BOUND instruction.
|
| - * b - A byte, irrespective of the effective operand size.
|
| - * d - A doubleword (32-bits), irrespective of the effective operand size.
|
| - * dq - A double-quadword (128 bits), irrespective of the effective operand
|
| - * size.
|
| - * p - A 32-bit or 48-bit far pointer, depending on the effective operand
|
| - * size.
|
| - * pd - A 128-bit double-precision floating point vector operand (packed
|
| - * double).
|
| - * pi - A 64-bit MMX operand (packed integer).
|
| - * ps - A 128-bit single precision floating point vector operand (packed
|
| - * single).
|
| - * q - A quadword, irrespective of the effective operand size.
|
| - * s - A 6-byte or 10-byte pseudo-descriptor.
|
| - * sd - A scalar double-precision floating point operand (scalar double).
|
| - * si - A scalar doubleword (32-bit) integer operand (scalar integer).
|
| - * ss - A scalar single-precision floating-point operand (scalar single).
|
| - * w - A word, irrespective of the effective operand size.
|
| - * v - A word, doubleword, or quadword, depending on the effective operand
|
| - * size.
|
| - * va - A word, doubleword, or quadword, depending on the effective address
|
| - * size.
|
| - * vw - A word only when the effective operand size matches.
|
| - * vd - A doubleword only when the effective operand size matches.
|
| - * vq - A quadword only when the effective operand size matches.
|
| - * w - A word, irrespective of the effective operand size.
|
| - * z - A word if the effective operand size is 16 bits, or a doubleword
|
| - * if the effective operand size is 32 or 64 bits.
|
| - * zw - A word only when the effective operand size matches.
|
| - * zd - A doubleword only when the effective operand size is 32 or 64 bits.
|
| - * f - A memory access (of small size, i.e. less than 100 bytes),
|
| - * irrespective of the operand size (as modified by the prefix 66,
|
| - and the Rex.w prefix). Should only be used with $M arguments.
|
| - * When this size modifier $Mf is used (unlike $M which allows
|
| - * prefix 66), prefix 66 is illegal.
|
| - * Note: When $Mf is used, the (small) size differences are not
|
| - * important for the validator. Hence, it doesn't matter if we are
|
| - * more accurate.
|
| - *
|
| - * Note: vw, vd, vq, zw, and zd are not in the manual cited above. However,
|
| - * they have been added so that sub-variants of an v/z instruction (not
|
| - * specified in the manual) can be specified.
|
| - *
|
| - * In addition, this code adds the following special print forms:
|
| - * One - The literal constant 1.
|
| - *
|
| - * Note: The AMD manual uses some slash notations (such as d/q) which isn't
|
| - * explicitly defined. In general, we allow such notation as specified in
|
| - * the AMD manual. Depending on the use, it can mean any of the following:
|
| - * (1) In 32-bit mode, d is used. In 64-bit mode, q is used.
|
| - * (2) only 32-bit or 64-bit values are allowed.
|
| - * In addition, when the nmemonic name changes based on which value is chosen
|
| - * in d/q, we use d/q/d to denote the 32-bit case, and d/q/q to denote the
|
| - * 64 bit case.
|
| - *
|
| - * Because some instructions may need to add flags and/or additional operands
|
| - * outside the string context, instructions are modeled using a pair of calls
|
| - * (i.e. a Begin and End form). The Begin form starts defining the instruction,
|
| - * and the End form completes and installs the modeled instruction. Any
|
| - * additional model changes for the instruction being defined should
|
| - * appear between these call pairs.
|
| - *
|
| - * For instructions not needing to do special touchups, a simpler Define form
|
| - * exists that simply dispatches calls to the corresponding Begin and End forms.
|
| - ***************************************************************************/
|
| -
|
| -/* Defines target machine.*/
|
| -typedef enum {
|
| - T32, /* 32 only. */
|
| - T64, /* 64 only. */
|
| - Tall, /* both 32 and 64. */
|
| -} NaClTargetPlatform;
|
| -
|
| -/* Defines the beginning of the modeling of a platform instruction.
|
| - * Parameters are:
|
| - * platform - The platform(s) the instruction applies to.
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - */
|
| -void NaClBegDefPlatform(NaClTargetPlatform platform,
|
| - const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st);
|
| -
|
| -/* Defines the beginning of the modeling of both a x86-32 and x86-64
|
| - * instruction.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - */
|
| -void NaClBegDef(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st);
|
| -
|
| -/* Defines the beginning of the modeling of a x86-32 instruction without
|
| - * an equivalent x86-64 version.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - */
|
| -void NaClBegD32(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st);
|
| -
|
| -/* Defines the beginning of the modeling of a x86-64 instruction without
|
| - * an equivalent x86-32 version.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - */
|
| -void NaClBegD64(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st);
|
| -
|
| -/* Defines the end of the modeling of an instruction. Must be paired with
|
| - * a call to NaClBegDef, NaClBegD32, or NaClBegD64.
|
| - * Parameters are:
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClEndDef(NaClInstCat icat);
|
| -
|
| -/* Defines a platform instruction, using dispatching
|
| - * calls to NaClBegDefPlatform and NaClEndDef.
|
| - * Parameters are:
|
| - * platform - the platform(s) the instruction applies to.
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDefinePlatform(NaClTargetPlatform platform,
|
| - const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st, NaClInstCat cat);
|
| -
|
| -/* Defines both a x86-32 and x86-64 instruction, using dispatching
|
| - * calls to NaClBegDef and NaClEndDef.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDefine(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st, NaClInstCat cat);
|
| -
|
| -/* Defines a x86-32 instruction without an equivalent x86-64 version, using
|
| - * dispatching calls to NaClBegD32 and NaClEndDef.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDef_32(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st, NaClInstCat cat);
|
| -
|
| -/* Defines a x86-64 instruction without an equivalent x86-32 version, using
|
| - * dispatching calls to NaClBegD32 and NaClEndDef.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDef_64(const char* desc, NaClInstType insttype,
|
| - struct NaClSymbolTable* st, NaClInstCat cat);
|
| -
|
| -
|
| -/* Defines a set of instructions, for all values of min <= i <= max (bound
|
| - * in a local symbol table), using calls to NaClDefine on the remaining
|
| - * arguments. In addition, opcodes of the form "xx+@i:", within the description
|
| - * string are automatically added to generate the opcode value xx+i.
|
| - * In addition, the value of min and max must be between 0 and 7.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * min - The starting value to iterate i on.
|
| - * max - The ending value to iterate i on.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDefIter(const char* desc, int min, int max,
|
| - NaClInstType insttype, struct NaClSymbolTable* st,
|
| - NaClInstCat cat);
|
| -
|
| -/* Defines a set of instructions, for all values of min <= reg <= max (bound
|
| - * in a local symbol), using calls to NaClDefine on the remaining arguments.
|
| - * In addition, the value of min and max must be between 0 and 255. Typically
|
| - * used to generate register values that are part of the opcode.
|
| - * Parameters are:
|
| - * desc - the opcode description string.
|
| - * min - The starting value to iterate reg on.
|
| - * max - The ending value to iterate reg on.
|
| - * insttype - The category of the instruction (defines the effects of CPUID).
|
| - * st - The symbol table to use while defining the instruction.
|
| - * icat - The set/use categorization for the instruction being defined.
|
| - */
|
| -void NaClDefReg(const char* desc, int min, int max,
|
| - NaClInstType insttype, struct NaClSymbolTable* st,
|
| - NaClInstCat cat);
|
| -
|
| -
|
| -#endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_FORMS_H__ */
|
|
|