| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (c) 2011 The Native Client Authors. All rights reserved. | |
| 3 * Use of this source code is governed by a BSD-style license that can be | |
| 4 * found in the LICENSE file. | |
| 5 */ | |
| 6 | |
| 7 /* | |
| 8 * API to generator routines for building x86 instruction set. | |
| 9 */ | |
| 10 | |
| 11 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_TABLE
GEN_H__ | |
| 12 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_TABLE
GEN_H__ | |
| 13 | |
| 14 #ifndef NACL_TRUSTED_BUT_NOT_TCB | |
| 15 #error("This file is not meant for use in the TCB") | |
| 16 #endif | |
| 17 | |
| 18 #include "native_client/src/trusted/validator/x86/decoder/generator/modeled_nacl
_inst.h" | |
| 19 | |
| 20 struct NaClSymbolTable; | |
| 21 | |
| 22 /* Report the given fatal error, and then quit. */ | |
| 23 void NaClFatal(const char* s); | |
| 24 | |
| 25 /* Possible run modes for instructions. */ | |
| 26 typedef enum { | |
| 27 X86_32, /* Model x86-32 bit instructions. */ | |
| 28 X86_64, /* Model x86-64-bit instructions. */ | |
| 29 /* Special end of list marker, denoting the number | |
| 30 * of run modes; | |
| 31 */ | |
| 32 NaClRunModeSize | |
| 33 } NaClRunMode; | |
| 34 | |
| 35 /* Defines the run mode files that should be generated. */ | |
| 36 extern NaClRunMode NACL_FLAGS_run_mode; | |
| 37 | |
| 38 /* Change the current opcode prefix to the given value. */ | |
| 39 void NaClDefInstPrefix(const NaClInstPrefix prefix); | |
| 40 | |
| 41 /* Resets the default opcode prefix to the value of the last | |
| 42 * call to NaClDefDefaultInstPrefix. | |
| 43 */ | |
| 44 void NaClResetToDefaultInstPrefix(void); | |
| 45 | |
| 46 /* Same as NaClDefInstChoices, but you can explicitly define the | |
| 47 * prefix associated with the opcode. | |
| 48 */ | |
| 49 void NaClDefPrefixInstChoices(const NaClInstPrefix prefix, | |
| 50 const uint8_t opcode, | |
| 51 const int count); | |
| 52 | |
| 53 /* Same as NaClDefPrefixInstChoices, but extends the opcode with | |
| 54 * the modrm opcode in the modrm byte (must be in [0..7]). | |
| 55 */ | |
| 56 void NaClDefPrefixInstMrmChoices(const NaClInstPrefix prefix, | |
| 57 const uint8_t opcode, | |
| 58 const uint8_t modrm_opcode, | |
| 59 const int count); | |
| 60 | |
| 61 /* Same as NaClDefInstChoices_32_64, but you can explicitly define the | |
| 62 * prefix associated with the opcode. | |
| 63 */ | |
| 64 void NaClDefPrefixInstChoices_32_64(const NaClInstPrefix prefix, | |
| 65 const uint8_t opcode, | |
| 66 const int count_32, | |
| 67 const int count_64); | |
| 68 | |
| 69 /* Same as NaClDefPrefixInstChoices_32_64, but extends the opcode with | |
| 70 * the modrm opcode in the modrm byte (must be in [0..7]). | |
| 71 */ | |
| 72 void NaClDefPrefixInstMrmChoices_32_64(const NaClInstPrefix prefix, | |
| 73 const uint8_t opcode, | |
| 74 const uint8_t modrm_opcode, | |
| 75 const int count_32, | |
| 76 const int count_64); | |
| 77 | |
| 78 /* By default, sanity checks are applied as each defining | |
| 79 * call is made. When this is called, these sanity checks | |
| 80 * are turned off until the explicit call to NaClApplySanityChecks. | |
| 81 */ | |
| 82 void NaClDelaySanityChecks(void); | |
| 83 | |
| 84 void NaClApplySanityChecks(void); | |
| 85 | |
| 86 /* Define the next opcode (instruction), initializing with | |
| 87 * no operands. | |
| 88 */ | |
| 89 void NaClDefInst( | |
| 90 const uint8_t opcode, | |
| 91 const NaClInstType insttype, | |
| 92 NaClIFlags flags, | |
| 93 const NaClMnemonic name); | |
| 94 | |
| 95 /* Returns the current instruction being defined. | |
| 96 * ***WARNING***: If you call any function within this header file | |
| 97 * that modifies the current instruction will invalidate the contents | |
| 98 * returned by this function. | |
| 99 */ | |
| 100 NaClModeledInst* NaClGetDefInst(void); | |
| 101 | |
| 102 /* Define an opcode extension for the current instruction, which is | |
| 103 * a value between 0 and 7, that appears in the modrm byte of the | |
| 104 * instruction. | |
| 105 */ | |
| 106 void NaClDefOpcodeExtension(int opcode); | |
| 107 | |
| 108 /* Defines an opcode extension stored in the ModRm r/m field (must be | |
| 109 * in [0..7]). | |
| 110 */ | |
| 111 void NaClDefineOpcodeModRmRmExtension(int value); | |
| 112 | |
| 113 /* Define a register value embedded in the opcode value. */ | |
| 114 void NaClDefOpcodeRegisterValue(int r); | |
| 115 | |
| 116 /* Add additional instruction flags to the current instruction being | |
| 117 * processed. | |
| 118 */ | |
| 119 void NaClAddIFlags(NaClIFlags more_flags); | |
| 120 | |
| 121 /* Remove instruction flags from the current instruction being processed. */ | |
| 122 void NaClRemoveIFlags(NaClIFlags less_flags); | |
| 123 | |
| 124 /* | |
| 125 * Define the next operand of the current opcode to have the given kind | |
| 126 * and flags. | |
| 127 */ | |
| 128 void NaClDefOp(NaClOpKind kind, NaClOpFlags flags); | |
| 129 | |
| 130 /* Add additional operand flags to the indexed operand of the current | |
| 131 * instruction being processed (index is 0 based). | |
| 132 */ | |
| 133 void NaClAddOpFlags(uint8_t operand_index, NaClOpFlags more_flags); | |
| 134 | |
| 135 /* Add format string to the indexed oeprand of the current instruction | |
| 136 * being processed (index is 0 based). | |
| 137 * | |
| 138 * Note: the passed in string is copied, and hence its contents can | |
| 139 * change once this function returns. | |
| 140 */ | |
| 141 void NaClAddOpFormat(uint8_t operand_index, const char* format); | |
| 142 | |
| 143 /* Removes operand flags from the indexed operand of the current | |
| 144 * instruction being processed (index is 0 based). | |
| 145 */ | |
| 146 void NaClRemoveOpFlags(uint8_t operand_index, NaClOpFlags flags); | |
| 147 | |
| 148 /* Returns the set of operand size flags defined for the given instruction. */ | |
| 149 NaClIFlags NaClOperandSizes(NaClModeledInst* inst); | |
| 150 | |
| 151 /* Defines one byte opcodes. */ | |
| 152 void NaClDefOneByteInsts(struct NaClSymbolTable* context_st); | |
| 153 | |
| 154 /* Defines two byte opcodes beginning with OF. */ | |
| 155 void NaClDef0FInsts(struct NaClSymbolTable* context_st); | |
| 156 | |
| 157 /* Defines two byte opcodes beginning with DC. */ | |
| 158 void NaClDefDCInsts(void); | |
| 159 | |
| 160 /* Defines SSE instructions (i.e. instructions using MMX and XMM registers). */ | |
| 161 void NaClDefSseInsts(struct NaClSymbolTable* context_st); | |
| 162 | |
| 163 /* Define x87 instructions. */ | |
| 164 void NaClDefX87Insts(struct NaClSymbolTable* context_st); | |
| 165 | |
| 166 #endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_GENERATOR_NCDECODE_TA
BLEGEN_H__ */ | |
| OLD | NEW |