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

Side by Side Diff: src/trusted/validator/x86/decoder/generator/nc_rep_prefix.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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright 2010 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 * Captures instructions that allow REP and REPNE prefixes (other than
9 * multibyte instructions that require the REP/REPNE prefix bytes).
10 *
11 * Extracted from tables 1-6. 1-7, and 1-8 in AMD document 25494 - AMD64
12 * Architecture Programmer's Manual, Volume 3: General-Purpose and System
13 * Instructions.
14 *
15 * Note: This is used by the x86-664 validator to decide what instructions
16 * can have the REP/REPE/REPZ (F3) and the REPNE/REPNZ (F2) prefix byte
17 * on an instruction.
18 */
19
20 #ifndef NACL_TRUSTED_BUT_NOT_TCB
21 #error("This file is not meant for use in the TCB")
22 #endif
23
24 #include "native_client/src/trusted/validator/x86/decoder/generator/nc_rep_prefi x.h"
25
26 #include "native_client/src/include/nacl_macros.h"
27 #include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_for ms.h"
28 #include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_tab legen.h"
29
30 /* List of instruction mnemonics that always can have a REP/REPE/REPZ (F3)
31 * prefix associated with the instruction.
32 */
33 static const NaClMnemonic kAllowableRepMnemonic[] = {
34 InstInsb, /* 6c */
35 InstInsd, /* 6d */
36 InstInsw, /* 6d */
37 InstLodsb, /* ac */
38 InstLodsd, /* ad */
39 InstLodsq, /* ad */
40 InstLodsw, /* ad */
41 InstOutsb, /* 6e */
42 InstOutsd, /* 6f */
43 InstOutsw, /* 6f */
44 InstStosb, /* aa */
45 InstStosd, /* ab */
46 InstStosq, /* ab */
47 InstStosw, /* ab */
48 InstCmpsb, /* a6 */
49 InstCmpsd, /* a7 */
50 InstCmpsq, /* a7 */
51 InstCmpsw, /* a7 */
52 InstScasb, /* ae */
53 InstScasd, /* af */
54 InstScasq, /* af */
55 InstScasw, /* af */
56 };
57
58 /* List of instruction mnemonics that always can have a REPNE/REPNZ (F2) preix
59 * associated with the instruction.
60 */
61 static const NaClMnemonic kAllowableRepneMnemonic[] = {
62 InstCmpsb, /* a6 */
63 InstCmpsd, /* a7 */
64 InstCmpsq, /* a7 */
65 InstCmpsw, /* a7 */
66 InstScasb, /* ae */
67 InstScasd, /* af */
68 InstScasq, /* af */
69 InstScasw, /* af */
70 };
71
72 /* List of instruction opcode sequences that can have a REP/REPE/REPZ
73 * (F3) prefix associated with the opcode sequence.
74 */
75 static const NaClNameOpcodeSeq kAllowableRepMnemonicOpseq[] = {
76 { InstMovsb , { 0xa4 , END_OPCODE_SEQ } },
77 { InstMovsd , { 0xa5 , END_OPCODE_SEQ } },
78 { InstMovsq , { 0xa5 , END_OPCODE_SEQ } },
79 { InstMovsw , { 0xa5 , END_OPCODE_SEQ } },
80 };
81
82 void NaClAddRepPrefixFlagsIfApplicable(void) {
83 if (NaClInInstructionSet(kAllowableRepMnemonic,
84 NACL_ARRAY_SIZE(kAllowableRepMnemonic),
85 kAllowableRepMnemonicOpseq,
86 NACL_ARRAY_SIZE(kAllowableRepMnemonicOpseq))) {
87 NaClAddIFlags(NACL_IFLAG(OpcodeAllowsRep));
88 }
89 if (NaClInInstructionSet(kAllowableRepneMnemonic,
90 NACL_ARRAY_SIZE(kAllowableRepneMnemonic),
91 NULL, 0)) {
92 NaClAddIFlags(NACL_IFLAG(OpcodeAllowsRepne));
93 }
94 }
OLDNEW
« no previous file with comments | « src/trusted/validator/x86/decoder/generator/nc_rep_prefix.h ('k') | src/trusted/validator/x86/decoder/generator/ncdecodeX87.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698