| Index: src/trusted/validator/x86/x86_insts.h
|
| diff --git a/src/trusted/validator/x86/x86_insts.h b/src/trusted/validator/x86/x86_insts.h
|
| deleted file mode 100644
|
| index 6087a2b1e312eea9bb9ce7da72743481bfaaca3a..0000000000000000000000000000000000000000
|
| --- a/src/trusted/validator/x86/x86_insts.h
|
| +++ /dev/null
|
| @@ -1,191 +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.
|
| - */
|
| -
|
| -/*
|
| - * x86_insts.h - Holds common utilties for decoding x86 instructions.
|
| - */
|
| -
|
| -#ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_X86_INSTS_H__
|
| -#define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_X86_INSTS_H__
|
| -
|
| -#include "native_client/src/include/portability.h"
|
| -
|
| -/* Readability macros for bitset testing. */
|
| -/* Set contains bit. */
|
| -#define NaClHasBit(set, bit) ((set) & (bit))
|
| -
|
| -/* Set contains (all) bits. */
|
| -#define NaClHasBits(set, bits) ((bits) == ((set) & (bits)))
|
| -
|
| -/* Set contains bits other than given bit. */
|
| -#define NaClExcludesBit(set, bit) (~(set) & bit)
|
| -
|
| -/* Readability macros for changing bitsets. */
|
| -#define NaClAddBits(set, bits) (set |= (bits))
|
| -#define NaClRemoveBits(set, bits) (set &= ~(bits))
|
| -
|
| -EXTERN_C_BEGIN
|
| -
|
| -/* Defines the corresponding byte encodings for each of the prefixes. */
|
| -#define kValueSEGCS 0x2e
|
| -#define kValueSEGSS 0x36
|
| -#define kValueSEGFS 0x64
|
| -#define kValueSEGGS 0x65
|
| -#define kValueDATA16 0x66
|
| -#define kValueADDR16 0x67
|
| -#define kValueREPNE 0xf2
|
| -#define kValueREP 0xf3
|
| -#define kValueLOCK 0xf0
|
| -#define kValueSEGES 0x26
|
| -#define kValueSEGDS 0x3e
|
| -
|
| -/* Using a bit mask here. Hopefully nobody will be offended.
|
| - * Prefix usage: 0x2e and 0x3e are used as branch prediction hints
|
| - * 0x64 and 0x65 needed for TLS
|
| - * 0x26 and 0x36 shouldn't be needed
|
| - * These are #defines, not const ints, because they are used
|
| - * for array initialization
|
| - */
|
| -#define kPrefixSEGCS 0x0001 /* 0x2e */
|
| -#define kPrefixSEGSS 0x0002 /* 0x36 */
|
| -#define kPrefixSEGFS 0x0004 /* 0x64 */
|
| -#define kPrefixSEGGS 0x0008 /* 0x65 */
|
| -#define kPrefixDATA16 0x0010 /* 0x66 - OKAY */
|
| -#define kPrefixADDR16 0x0020 /* 0x67 - disallowed */
|
| -#define kPrefixREPNE 0x0040 /* 0xf2 - OKAY */
|
| -#define kPrefixREP 0x0080 /* 0xf3 - OKAY */
|
| -#define kPrefixLOCK 0x0100 /* 0xf0 - OKAY */
|
| -#define kPrefixSEGES 0x0200 /* 0x26 - disallowed */
|
| -#define kPrefixSEGDS 0x0400 /* 0x3e - disallowed */
|
| -#define kPrefixREX 0x1000 /* 0x40 - 0x4f Rex prefix */
|
| -
|
| -/* a new enumerated type for instructions.
|
| - * Note: Each enumerate type is marked with one of the following symbols,
|
| - * defining the validator it us used for:
|
| - * 32 - The x86-32 validator.
|
| - * 64 - The x86-64 validator.
|
| - * Both - Both the x86-32 and the x86-64 validators.
|
| - * Note: The code for the x86-64 validator is being cleaned up, and there
|
| - * are still uses of the "32" tag for x86 instructions.
|
| - * TODO(karl) - Fix this comment when modeling for the x86-64 has been cleaned
|
| - * up.
|
| - */
|
| -typedef enum {
|
| - NACLi_UNDEFINED = 0, /* uninitialized space; should never happen */ /* Both */
|
| - NACLi_ILLEGAL, /* not allowed in NaCl */ /* Both */
|
| - NACLi_INVALID, /* not valid on any known x86 */ /* Both */
|
| - NACLi_SYSTEM, /* ring-0 instruction, not allowed in NaCl */ /* Both */
|
| - NACLi_NOP, /* Predefined nop instruction sequence. */ /* 32 */
|
| - NACLi_386, /* an allowed instruction on all i386 implementations */
|
| - /* Both */
|
| - /* subset of i386 that allows LOCK prefix. NOTE:
|
| - * This is only used for the 32 bit validator. The new
|
| - * 64 bit validator uses "InstFlag(OpcodeLockable)"
|
| - * to communicate this (which separates the CPU ID
|
| - * information from whether the instruction is lockable.
|
| - * Hopefully, in future releases, this enumerated type
|
| - * will be removed.
|
| - */
|
| - NACLi_386L, /* 32 */
|
| - NACLi_386R, /* subset of i386 that allow REP prefix */ /* 32 */
|
| - NACLi_386RE, /* subset of i386 that allow REPE/REPZ prefixes */
|
| - /* 32 */
|
| - NACLi_JMP8, /* 32 */
|
| - NACLi_JMPZ, /* 32 */
|
| - NACLi_INDIRECT, /* 32 */
|
| - NACLi_OPINMRM, /* 32 */
|
| - NACLi_RETURN, /* 32 */
|
| - /* Both */
|
| - NACLi_LAHF, /* LAHF/SAHF: unconditionally allowed in 32-bit
|
| - conditionally allowed in 64-bit mode */
|
| - NACLi_SFENCE_CLFLUSH, /* Both */
|
| - NACLi_CMPXCHG8B, /* Both */
|
| - NACLi_CMPXCHG16B, /* 64-bit mode only, illegal for NaCl */ /* Both */
|
| - NACLi_CMOV, /* Both */
|
| - NACLi_RDMSR, /* Both */
|
| - NACLi_RDTSC, /* Both */
|
| - NACLi_RDTSCP, /* AMD only */ /* Both */
|
| - NACLi_SYSCALL, /* AMD only; equivalent to SYSENTER */ /* Both */
|
| - NACLi_SYSENTER, /* Both */
|
| - NACLi_X87, /* Both */
|
| - NACLi_X87_FSINCOS, /* Both */
|
| - NACLi_MMX, /* Both */
|
| - NACLi_MMXSSE2, /* MMX with no prefix, SSE2 with 0x66 prefix */ /* Both */
|
| - NACLi_3DNOW, /* AMD only */ /* Both */
|
| - NACLi_EMMX, /* Cyrix only; not supported yet */ /* Both */
|
| - NACLi_E3DNOW, /* AMD only */ /* Both */
|
| - NACLi_SSE, /* Both */
|
| - NACLi_SSE2, /* no prefix => MMX; prefix 66 => SSE; */ /* Both */
|
| - /* f2, f3 not allowed unless used for opcode selection */
|
| - NACLi_SSE2x, /* SSE2; prefix 66 required!!! */ /* 32 */
|
| - NACLi_SSE3, /* Both */
|
| - NACLi_SSE4A, /* AMD only */ /* Both */
|
| - NACLi_SSE41, /* Both */
|
| - NACLi_SSE42, /* Both */
|
| - NACLi_MOVBE, /* Both */
|
| - NACLi_POPCNT, /* Both */
|
| - NACLi_LZCNT, /* Both */
|
| - NACLi_LONGMODE,/* AMD only? */ /* 32 */
|
| - NACLi_SVM, /* AMD only */ /* Both */
|
| - NACLi_SSSE3, /* Both */
|
| - NACLi_3BYTE, /* 32 */
|
| - NACLi_FCMOV, /* 32 */
|
| - NACLi_VMX, /* 64 */
|
| - NACLi_FXSAVE /* SAVE/RESTORE xmm, mmx, and x87 state. */ /* 64 */
|
| - /* NOTE: This enum must be kept consistent with kNaClInstTypeRange */
|
| - /* (defined below). */
|
| - /* Note: If you change this enumerated type, be sure to update */
|
| - /* kNaClInstTypeString in x86_insts.c. */
|
| -} NaClInstType;
|
| -
|
| -#define kNaClInstTypeRange 49
|
| -
|
| -/* Returns the print name for the enumerated type.*/
|
| -const char* NaClInstTypeString(NaClInstType typ);
|
| -
|
| -/* Define the maximum register value that can be encoded into the opcode
|
| - * byte.
|
| - */
|
| -#define kMaxRegisterIndexInOpcode 7
|
| -
|
| -extern const uint8_t kFirstX87Opcode; /* 0xd8 */
|
| -extern const uint8_t kLastX87Opcode; /* 0xdf */
|
| -
|
| -/* Defines the opcode for the WAIT instruction.
|
| - * Note: WAIT is an x87 instruction but not in the coproc opcode space.
|
| - */
|
| -extern const uint8_t kWAITOp; /* 0x9b */
|
| -
|
| -#define NCDTABLESIZE 256
|
| -
|
| -extern const uint8_t kTwoByteOpcodeByte1; /* 0x0f */
|
| -extern const uint8_t k3DNowOpcodeByte2; /* 0x0f */
|
| -extern const int kMaxPrefixBytes; /* 4 */
|
| -
|
| -/* Accessors for the ModRm byte. */
|
| -extern uint8_t modrm_mod(uint8_t modrm);
|
| -extern uint8_t modrm_rm(uint8_t modrm);
|
| -extern uint8_t modrm_reg(uint8_t modrm);
|
| -extern uint8_t modrm_opcode(uint8_t modrm);
|
| -
|
| -/* Accessors for the Sib byte. */
|
| -extern uint8_t sib_ss(uint8_t sib);
|
| -extern uint8_t sib_index(uint8_t sib);
|
| -extern uint8_t sib_base(uint8_t sib);
|
| -
|
| -/* Defines the range of rex prefix values. */
|
| -extern const uint8_t NaClRexMin; /* 0x40 */
|
| -extern const uint8_t NaClRexMax; /* 0x4F */
|
| -
|
| -/* Accessors for each of the rex bits. */
|
| -uint8_t NaClRexW(uint8_t prefix);
|
| -uint8_t NaClRexR(uint8_t prefix);
|
| -uint8_t NaClRexX(uint8_t prefix);
|
| -uint8_t NaClRexB(uint8_t prefix);
|
| -
|
| -EXTERN_C_END
|
| -
|
| -#endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_X86_INSTS_H__ */
|
|
|