Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2633)

Unified Diff: src/trusted/validator/x86/decoder/generator/zero_extends.c

Issue 625923004: Delete old x86 validator. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: rebase master Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator/x86/decoder/generator/zero_extends.c
diff --git a/src/trusted/validator/x86/decoder/generator/zero_extends.c b/src/trusted/validator/x86/decoder/generator/zero_extends.c
deleted file mode 100644
index de28edf042959602ee53876eaf7f886031dc6282..0000000000000000000000000000000000000000
--- a/src/trusted/validator/x86/decoder/generator/zero_extends.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2011 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.
- */
-
-/*
- * Captures instructions that zero extend 32 bit values.
- *
- * Extracted from table B-1 in AMD document 25494 - AMD64 Architecture
- * Programmer's Manual, Volume 3: General-Purpose and System Instructions.
- *
- * Note: This is used by the x86-64 validator to decide what operations can
- * be used to mask control/memory accesses. Therefore, not all instructions
- * listed in table B-1 (above) are defined to zero-extend. In particular,
- * this is a NaCl-specific flag that is used to whitelist instructions
- * that can be used to zero-extend (mask) 32-bit addresses. As such, although
- * some instruction can zero-extend, we don't necessarily allow them here.
- */
-
-#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/generator/zero_extends.h"
-
-#include "native_client/src/include/nacl_macros.h"
-#include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_forms.h"
-#include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_tablegen.h"
-
-/* List of instruction mnemonics that zero extend 32 bit results. */
-static const NaClMnemonic kZeroExtend32Op[] = {
- /* Note: The following instructions are listed in table B-1 (above), but are
- * not included for the following reasons:
- *
- * Bsf and Bsr instructions are not included because they conditionally
- * write the destination. See
- * http://code.google.com/p/nativeclient/issues/detail?id=2010
- *
- * Cmovcc instructions (0f40 through 0f4f) are not included out of caution.
- * Table B-1 (above) states that these instrucitons always zero extends 32 bit
- * register results to 64 bits, and that this occurs even if the condition
- * is false. However, we decided to be safe and omit these instructions
- * anyway.
- *
- * Cmpxchg is not included because it conditionally writes to
- * different destinations.
- *
- * Bswap is not included because we don't really think that
- * swapping the bottom bytes is a good thing to do to mask a memory
- * reference.
- *
- * Bt, Btc, Btr, Bts, Rcl, Rcr, Rol, Rol, Sar, Shl, Shld, Shr, and
- * Shrd instructions are not included out of caution. We assume that
- * these instructions are used for bit manipulation rather than
- * computing viable addresses.
- *
- * Adc and Sbb are not included since borrows/carries should not be
- * need when calculating an address.
- *
- * Cpuid, In, and Lar instructions are not included just because they
- * shouldn't be.
- *
- * Div, Idiv, and Mul instructions are not included because we never
- * allowed them.
- *
- * Lfs, Lgs, Lss, and Lsl instructions are not included because segment
- * addresses shouldn't be used.
- *
- * Lzcnt is not included because it is unlikely to be useful for
- * computing an address based on the number of leading zeros of a value.
- *
- * Pextrb is not included because you shouldn't use MMX registers
- * to hold addresses.
- *
- * Popcnt is not included because it is unlikely to be useful for computing
- * an address based on the number of ones in a value.
- *
- * Rdmsr is not included, because you shouldn't be reading model specific
- * registers.
- *
- * Rdpmc is not included because you shouldn't be basing addresses on
- * the performance-monitor counter.
- *
- * Rdtsc and Rdtscp are not included because you shouldn't be basing
- * addresses on the time-stamp counter or the processor id.
- *
- * Smsw is not included since you shouldn't be basing addresses on the
- * machine status word.
- */
- InstAdd, /* 01, 03, 05, 81/0, 83/0 */
- InstAnd, /* 21, 23, 25, 81/4, 83/4 */
- InstImul, /* f7/5 , 0f af , 69 , 6b */
- InstLea, /* 8D */
- InstMov, /* 89, 8b, c7, b8 through bf, a1 (moffset),
- a3 (moffset)
- */
- InstMovd, /* 0f 6e, 0f 7e */
- InstMovsx, /* 0f be, 0f bf */
- InstMovsxd, /* 63 */
- InstMovzx, /* 0f b6, 0f b7 */
- InstNeg, /* f7/3 */
- InstNot, /* f7/2 */
- InstOr, /* 09, 0b, 0d, 81/1, 83/1 */
- InstSub, /* 29, 2b, 2d, 81/5, 83/5 */
- InstXadd, /* 0f c1 */
- InstXchg, /* 87, 90 through 97 */
- InstXor, /* 31, 33, 35, 81/6, 83/6 */
-};
-
-/* List of instruction nmemonics, for specific opcode sequences, that zero
- * extend 32 bit results.
- */
-static const NaClNameOpcodeSeq kZeroExtend32Opseq[] = {
- { InstDec , { 0xFF , SL(1) , END_OPCODE_SEQ } },
- { InstInc , { 0xFF , SL(0) , END_OPCODE_SEQ } },
-};
-
-/* Add OperandZeroExtends_v to instruction, if it can hold
- * a 32 bit operand.
- */
-static void AddZeroExtendToOpDestArgs(NaClModeledInst* inst) {
- if (inst->flags & NACL_IFLAG(OperandSize_v)) {
- int i;
- for (i = 0; i < inst->num_operands; ++i) {
- /* Note: we currently don't allow zero extends for
- * implicit arguments. This is done just to be extra
- * cautious on what we allow to be masks in the
- * NaCl x64-64 validator.
- */
- if ((inst->operands[i].flags & NACL_OPFLAG(OpSet)) &&
- (NACL_EMPTY_OPFLAGS ==
- (inst->operands[i].flags & NACL_OPFLAG(OpImplicit)))) {
- NaClAddOpFlags(i, NACL_OPFLAG(OperandZeroExtends_v));
- }
- }
- }
-}
-
-/* Add OperandZeroExtends_v instruction flag if applicable. */
-void NaClAddZeroExtend32FlagIfApplicable(void) {
- if ((X86_64 == NACL_FLAGS_run_mode) &&
- NaClInInstructionSet(kZeroExtend32Op,
- NACL_ARRAY_SIZE(kZeroExtend32Op),
- kZeroExtend32Opseq,
- NACL_ARRAY_SIZE(kZeroExtend32Opseq))) {
- AddZeroExtendToOpDestArgs(NaClGetDefInst());
- }
-}
« no previous file with comments | « src/trusted/validator/x86/decoder/generator/zero_extends.h ('k') | src/trusted/validator/x86/decoder/nc_decode_tables.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698