| Index: src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils.c
 | 
| diff --git a/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils.c b/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils.c
 | 
| deleted file mode 100644
 | 
| index 78650113e36835971d07d91abdc98e011753189f..0000000000000000000000000000000000000000
 | 
| --- a/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils.c
 | 
| +++ /dev/null
 | 
| @@ -1,156 +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.
 | 
| - */
 | 
| -
 | 
| -/* Some useful utilities for validator patterns. */
 | 
| -
 | 
| -#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils.h"
 | 
| -
 | 
| -#include "native_client/src/include/portability_io.h"
 | 
| -#include "native_client/src/shared/platform/nacl_log.h"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/nc_decode_tables.h"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/nc_inst_iter.h"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/nc_inst_state_internal.h"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/nc_inst_trans.h"
 | 
| -#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h"
 | 
| -#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter_internal.h"
 | 
| -
 | 
| -/* To turn on debugging of instruction decoding, change value of
 | 
| - * DEBUGGING to 1.
 | 
| - */
 | 
| -#define DEBUGGING 0
 | 
| -
 | 
| -#include "native_client/src/shared/utils/debugging.h"
 | 
| -
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/ncopcode_desc_inl.c"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/ncop_exps_inl.c"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/nc_inst_iter_inl.c"
 | 
| -
 | 
| -const NaClOpFlags NaClOpSetOrUse = NACL_OPFLAG(OpSet) | NACL_OPFLAG(OpUse);
 | 
| -
 | 
| -Bool NaClIsBinaryUsingRegisters(const NaClInst* inst,
 | 
| -                                NaClMnemonic name,
 | 
| -                                NaClExpVector* vector,
 | 
| -                                NaClOpKind reg_1,
 | 
| -                                NaClOpKind reg_2) {
 | 
| -  return name == inst->name &&
 | 
| -      2 == NaClGetInstNumberOperandsInline(inst) &&
 | 
| -      /* Note: Since the vector contains a list of operand expressions, the
 | 
| -       * first operand reference is always at index zero, and its first child
 | 
| -       * (where the register would be defined) is at index 1.
 | 
| -       */
 | 
| -      ExprRegister == vector->node[1].kind &&
 | 
| -      reg_1 == NaClGetExpRegisterInline(&vector->node[1]) &&
 | 
| -      /* Note: Since the first subtree is a register operand, it uses
 | 
| -       * nodes 0 and 1 in the vector (node 0 is the operand reference, and
 | 
| -       * node 1 is its child defining a register value). The second operand
 | 
| -       * reference therefore lies at node 2, and if the operand is defined by
 | 
| -       * a register, it is the first kid of node 2, which is node 3.
 | 
| -       */
 | 
| -      ExprRegister == vector->node[3].kind &&
 | 
| -      reg_2 == NaClGetExpRegisterInline(&vector->node[3]);
 | 
| -}
 | 
| -
 | 
| -Bool NaClIsMovUsingRegisters(const NaClDecodeTables* tables,
 | 
| -                             const NaClInst* inst,
 | 
| -                             NaClExpVector* vector,
 | 
| -                             NaClOpKind reg_set,
 | 
| -                             NaClOpKind reg_use) {
 | 
| -  return NaClIsBinaryUsingRegisters(inst, InstMov, vector, reg_set, reg_use) &&
 | 
| -      NACL_OPFLAG(OpSet) ==
 | 
| -      (NaClGetInstOperandInline(tables, inst, 0)->flags & NaClOpSetOrUse) &&
 | 
| -      NACL_OPFLAG(OpUse) ==
 | 
| -      (NaClGetInstOperandInline(tables, inst, 1)->flags & NaClOpSetOrUse);
 | 
| -}
 | 
| -
 | 
| -Bool NaClIsBinarySetUsingRegisters(const NaClDecodeTables* tables,
 | 
| -                                   const NaClInst* inst,
 | 
| -                                   NaClMnemonic name,
 | 
| -                                   NaClExpVector* vector,
 | 
| -                                   NaClOpKind reg_1,
 | 
| -                                   NaClOpKind reg_2) {
 | 
| -  return NaClIsBinaryUsingRegisters(inst, name, vector, reg_1, reg_2) &&
 | 
| -      NaClOpSetOrUse ==
 | 
| -      (NaClGetInstOperandInline(tables, inst, 0)->flags & NaClOpSetOrUse) &&
 | 
| -      NACL_OPFLAG(OpUse) ==
 | 
| -      (NaClGetInstOperandInline(tables, inst, 1)->flags & NaClOpSetOrUse);
 | 
| -}
 | 
| -
 | 
| -Bool NaClOperandOneIsRegisterSet(NaClInstState* inst,
 | 
| -                                 NaClOpKind reg_name) {
 | 
| -  /* Note: Since the vector contains a list of operand expressions, the
 | 
| -   * first operand reference is always at index zero, and its first child
 | 
| -   * (where the register would be defined) is at index 1.
 | 
| -   */
 | 
| -  Bool result = FALSE;
 | 
| -  NaClExpVector* vector = NaClInstStateExpVector(inst);
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "->NaClOperandOneIsRegisterSet %s\n",
 | 
| -                NaClOpKindName(reg_name)));
 | 
| -  DEBUG(NaClExpVectorPrint(NaClLogGetGio(), inst));
 | 
| -  if (vector->number_expr_nodes >= 2) {
 | 
| -    NaClExp* op_reg = &vector->node[1];
 | 
| -    result = (ExprRegister == op_reg->kind &&
 | 
| -              reg_name == NaClGetExpRegisterInline(op_reg) &&
 | 
| -              (op_reg->flags & NACL_EFLAG(ExprSet)));
 | 
| -  }
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "<-NaClOperandOneIsRegisterSet = %"NACL_PRIdBool"\n", result));
 | 
| -  return result;
 | 
| -}
 | 
| -
 | 
| -Bool NaClOperandOneZeroExtends(NaClInstState* state) {
 | 
| -  Bool result = FALSE;
 | 
| -  const NaClInst* inst = NaClInstStateInst(state);
 | 
| -  DEBUG(NaClLog(LOG_INFO, "->NaClOperandOneZeroExtends\n"));
 | 
| -  DEBUG_OR_ERASE(NaClInstPrint(NaClLogGetGio(), state->decoder_tables, inst));
 | 
| -  result = (1 <= NaClGetInstNumberOperandsInline(inst) &&
 | 
| -            (NaClGetInstOperandInline(state->decoder_tables, inst, 0)->flags &
 | 
| -             NACL_OPFLAG(OperandZeroExtends_v)) &&
 | 
| -            4 == NaClInstStateOperandSize(state));
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "<-NcOPerandOneZeroExtends = %"NACL_PRIdBool"\n", result));
 | 
| -  return result;
 | 
| -}
 | 
| -
 | 
| -static INLINE Bool NaClAssignsRegisterWithZeroExtends(NaClInstState* state,
 | 
| -                                        NaClOpKind reg_name) {
 | 
| -  return NaClOperandOneIsRegisterSet(state, reg_name) &&
 | 
| -      NaClOperandOneZeroExtends(state);
 | 
| -}
 | 
| -
 | 
| -Bool NaClAssignsRegisterWithZeroExtends32(
 | 
| -    struct NaClValidatorState* state,
 | 
| -    size_t distance,
 | 
| -    NaClOpKind reg32) {
 | 
| -  Bool result = FALSE;
 | 
| -  DEBUG(NaClLog(LOG_INFO, "zero extend precond? %s %u\n",
 | 
| -                NaClOpKindName(reg32), (unsigned) distance));
 | 
| -#ifdef NCVAL_TESTING
 | 
| -  /* Assume we match previous instructions when generating pre/post
 | 
| -   * conditions.
 | 
| -   */
 | 
| -  if (distance > 0) return TRUE;
 | 
| -#endif
 | 
| -
 | 
| -  if (NaClInstIterHasLookbackStateInline(state->cur_iter, distance)) {
 | 
| -    result = NaClAssignsRegisterWithZeroExtends(
 | 
| -        NaClInstIterGetLookbackStateInline(state->cur_iter, distance), reg32);
 | 
| -  }
 | 
| -
 | 
| -  DEBUG(if (result)
 | 
| -          NaClValidatorMessage(
 | 
| -              LOG_INFO, state, "zero extends = %d\n", result));
 | 
| -  return result;
 | 
| -}
 | 
| -
 | 
| -Bool NaClAssignsRegisterWithZeroExtends64(
 | 
| -    struct NaClValidatorState* state,
 | 
| -    size_t distance,
 | 
| -    NaClOpKind reg64) {
 | 
| -  NaClOpKind reg32 = NaClGet32For64BitReg(reg64);
 | 
| -  return (RegUnknown != reg32) &&
 | 
| -      NaClAssignsRegisterWithZeroExtends32(state, distance, reg32);
 | 
| -}
 | 
| 
 |