1cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee/*
2cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * Copyright (C) 2012 The Android Open Source Project
3cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee *
4cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * Licensed under the Apache License, Version 2.0 (the "License");
5cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * you may not use this file except in compliance with the License.
6cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * You may obtain a copy of the License at
7cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee *
8cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee *      http://www.apache.org/licenses/LICENSE-2.0
9cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee *
10cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * Unless required by applicable law or agreed to in writing, software
11cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * distributed under the License is distributed on an "AS IS" BASIS,
12cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * See the License for the specific language governing permissions and
14cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * limitations under the License.
15cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee */
16cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_COMPILER_DEX_COMPILER_ENUMS_H_
18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_COMPILER_DEX_COMPILER_ENUMS_H_
19cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
20cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee#include "dex_instruction.h"
21cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
22cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeenamespace art {
23cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
24cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum RegisterClass {
25cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCoreReg,
26cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFPReg,
27cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kAnyReg,
28cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
29cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
30cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum SpecialTargetRegister {
3102031b185b4653e6c72e21f7a51238b903f6d638buzbee  kSelf,            // Thread pointer.
3202031b185b4653e6c72e21f7a51238b903f6d638buzbee  kSuspend,         // Used to reduce suspend checks for some targets.
33cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLr,
34cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPc,
35cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSp,
36cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArg0,
37cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArg1,
38cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArg2,
39cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArg3,
40cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFArg0,
41cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFArg1,
42cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFArg2,
43cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFArg3,
44cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kRet0,
45cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kRet1,
46cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kInvokeTgt,
47cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCount
48cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
49cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
50cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum RegLocationType {
517934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kLocDalvikFrame = 0,  // Normal Dalvik register
52cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLocPhysReg,
53cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLocCompilerTemp,
54cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLocInvalid
55cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
56cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
57cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum BBType {
58cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kEntryBlock,
59cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kDalvikByteCode,
60cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kExitBlock,
61cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kExceptionHandling,
62cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kDead,
63cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
64cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
65cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee/*
66fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee * Def/Use encoding in 64-bit use_mask/def_mask.  Low positions used for target-specific
67cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * registers (and typically use the register number as the position).  High positions
68cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee * reserved for common and abstract resources.
69cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee */
70cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
71cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum ResourceEncodingPos {
72cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMustNotAlias = 63,
7302031b185b4653e6c72e21f7a51238b903f6d638buzbee  kHeapRef = 62,          // Default memory reference type.
7402031b185b4653e6c72e21f7a51238b903f6d638buzbee  kLiteral = 61,          // Literal pool memory reference.
7502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kDalvikReg = 60,        // Dalvik v_reg memory reference.
76cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kFPStatus = 59,
77cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCCode = 58,
78cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLowestCommonResource = kCCode
79cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
80cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
8102031b185b4653e6c72e21f7a51238b903f6d638buzbee// Shared pseudo opcodes - must be < 0.
82cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum LIRPseudoOpcode {
83a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoExportedPC = -16,
84a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoSafepointPC = -15,
85a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoIntrinsicRetry = -14,
86a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoSuspendTarget = -13,
87a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoThrowTarget = -12,
88a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoCaseLabel = -11,
89a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoMethodEntry = -10,
90a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoMethodExit = -9,
91a169e1d8d968800380245cda450505d969ebff76buzbee  kPseudoBarrier = -8,
92cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoEntryBlock = -7,
93cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoExitBlock = -6,
94cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoTargetLabel = -5,
95cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoDalvikByteCodeBoundary = -4,
96cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoPseudoAlign4 = -3,
97cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoEHBlockLabel = -2,
98cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPseudoNormalBlockLabel = -1,
99cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
100cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
101cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum ExtendedMIROpcode {
102cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFirst = kNumPackedOpcodes,
103cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpPhi = kMirOpFirst,
104cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpCopy,
105cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFusedCmplFloat,
106cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFusedCmpgFloat,
107cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFusedCmplDouble,
108cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFusedCmpgDouble,
109cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpFusedCmpLong,
110cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpNop,
111cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpNullCheck,
112cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpRangeCheck,
113cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpDivZeroCheck,
114cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpCheck,
115a169e1d8d968800380245cda450505d969ebff76buzbee  kMirOpCheckPart2,
116f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee  kMirOpSelect,
117cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMirOpLast,
118cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
119cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
120cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum MIROptimizationFlagPositons {
121cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRIgnoreNullCheck = 0,
122cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRNullCheckOnly,
123cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRIgnoreRangeCheck,
124cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRRangeCheckOnly,
12502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMIRInlined,                        // Invoke is inlined (ie dead).
12602031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMIRInlinedPred,                    // Invoke is inlined via prediction.
12702031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMIRCallee,                         // Instruction is inlined from callee.
128cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRIgnoreSuspendCheck,
129cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kMIRDup,
13002031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMIRMark,                           // Temporary node mark.
131cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
132cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
13302031b185b4653e6c72e21f7a51238b903f6d638buzbee// For successor_block_list.
134cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum BlockListType {
135cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kNotUsed = 0,
136cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCatch,
137cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kPackedSwitch,
138cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSparseSwitch,
139cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
140cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
141cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum AssemblerStatus {
142cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSuccess,
143cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kRetryAll,
144cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
145cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
146cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum OpSize {
147cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kWord,
148cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kLong,
149cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSingle,
150cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kDouble,
151cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kUnsignedHalf,
152cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSignedHalf,
153cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kUnsignedByte,
154cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kSignedByte,
155cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
156cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
157cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const OpSize& kind);
158cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
159cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum OpKind {
160cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpMov,
161cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpMvn,
162cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpCmp,
163cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpLsl,
164cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpLsr,
165cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpAsr,
166cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpRor,
167cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpNot,
168cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpAnd,
169cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpOr,
170cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpXor,
171cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpNeg,
172cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpAdd,
173cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpAdc,
174cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpSub,
175cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpSbc,
176cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpRsub,
177cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpMul,
178cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpDiv,
179cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpRem,
180cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpBic,
181cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpCmn,
182cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpTst,
183cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpBkpt,
184cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpBlx,
185cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpPush,
186cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpPop,
187cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOp2Char,
188cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOp2Short,
189cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOp2Byte,
190cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpCondBr,
191cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpUncondBr,
192cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpBx,
193cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kOpInvalid,
194cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
195cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
196cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const OpKind& kind);
197cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
198cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum ConditionCode {
199cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondEq,  // equal
200cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondNe,  // not equal
201cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondCs,  // carry set (unsigned less than)
202cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondUlt = kCondCs,
203cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondCc,  // carry clear (unsigned greater than or same)
204cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondUge = kCondCc,
205cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondMi,  // minus
206cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondPl,  // plus, positive or zero
207cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondVs,  // overflow
208cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondVc,  // no overflow
209cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondHi,  // unsigned greater than
210cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondLs,  // unsigned lower or same
211cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondGe,  // signed greater than or equal
212cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondLt,  // signed less than
213cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondGt,  // signed greater than
214cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondLe,  // signed less than or equal
215cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondAl,  // always
216cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kCondNv,  // never
217cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
218cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
219cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const ConditionCode& kind);
220cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
221cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee// Target specific condition encodings
222cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum ArmConditionCode {
223cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondEq = 0x0,  // 0000
224cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondNe = 0x1,  // 0001
225cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondCs = 0x2,  // 0010
226cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondCc = 0x3,  // 0011
227cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondMi = 0x4,  // 0100
228cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondPl = 0x5,  // 0101
229cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondVs = 0x6,  // 0110
230cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondVc = 0x7,  // 0111
231cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondHi = 0x8,  // 1000
232cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondLs = 0x9,  // 1001
233cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondGe = 0xa,  // 1010
234cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondLt = 0xb,  // 1011
235cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondGt = 0xc,  // 1100
236cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondLe = 0xd,  // 1101
237cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondAl = 0xe,  // 1110
238cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kArmCondNv = 0xf,  // 1111
239cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
240cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
241cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const ArmConditionCode& kind);
242cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
243cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum X86ConditionCode {
244cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondO   = 0x0,    // overflow
245cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNo  = 0x1,    // not overflow
246cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
247cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondB   = 0x2,    // below
248cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNae = kX86CondB,  // not-above-equal
249cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondC   = kX86CondB,  // carry
250cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
251cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNb  = 0x3,    // not-below
2527934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondAe  = kX86CondNb,  // above-equal
2537934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondNc  = kX86CondNb,  // not-carry
254cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
255cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondZ   = 0x4,    // zero
256cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondEq  = kX86CondZ,  // equal
257cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
258cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNz  = 0x5,    // not-zero
2597934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondNe  = kX86CondNz,  // not-equal
260cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
261cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondBe  = 0x6,    // below-equal
2627934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondNa  = kX86CondBe,  // not-above
263cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
264cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNbe = 0x7,    // not-below-equal
2657934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondA   = kX86CondNbe,  // above
266cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
267cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondS   = 0x8,    // sign
268cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNs  = 0x9,    // not-sign
269cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
270cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondP   = 0xa,    // 8-bit parity even
271cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondPE  = kX86CondP,
272cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
273cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNp  = 0xb,    // 8-bit parity odd
274cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondPo  = kX86CondNp,
275cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
276cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondL   = 0xc,    // less-than
277cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNge = kX86CondL,  // not-greater-equal
278cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
279cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNl  = 0xd,    // not-less-than
2807934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondGe  = kX86CondNl,  // not-greater-equal
281cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
282cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondLe  = 0xe,    // less-than-equal
2837934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondNg  = kX86CondLe,  // not-greater
284cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
285cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kX86CondNle = 0xf,    // not-less-than
2867934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kX86CondG   = kX86CondNle,  // greater
287cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
288cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
289cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const X86ConditionCode& kind);
290cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
291cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum ThrowKind {
292cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kThrowNullPointer,
293cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kThrowDivZero,
294cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kThrowArrayBounds,
2954ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee  kThrowConstantArrayBounds,
296cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kThrowNoSuchMethod,
297cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kThrowStackOverflow,
298cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
299cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
300cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum SpecialCaseHandler {
301cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kNoHandler,
302cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kNullMethod,
303cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kConstFunction,
304cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGet,
305cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetBoolean,
306cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetObject,
307cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetByte,
308cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetChar,
309cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetShort,
310cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIGetWide,
311cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPut,
312cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutBoolean,
313cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutObject,
314cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutByte,
315cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutChar,
316cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutShort,
317cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIPutWide,
318cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  kIdentity,
319cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
320cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
321cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeeenum DividePattern {
322cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  DivideNone,
323cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  Divide3,
324cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  Divide5,
325cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee  Divide7,
326cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee};
327cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
328cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbeestd::ostream& operator<<(std::ostream& os, const DividePattern& pattern);
329cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
33002031b185b4653e6c72e21f7a51238b903f6d638buzbee// Memory barrier types (see "The JSR-133 Cookbook for Compiler Writers").
3311bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbeeenum MemBarrierKind {
3321bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee  kLoadStore,
3331bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee  kLoadLoad,
3341bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee  kStoreStore,
3351bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee  kStoreLoad
3361bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee};
3371bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee
3381bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbeestd::ostream& operator<<(std::ostream& os, const MemBarrierKind& kind);
3391bc37c60da71c923ea9a2e99d31ba1b3d76d79a8buzbee
34002031b185b4653e6c72e21f7a51238b903f6d638buzbeeenum OpFeatureFlags {
34102031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsBranch = 0,
34202031b185b4653e6c72e21f7a51238b903f6d638buzbee  kNoOperand,
34302031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsUnaryOp,
34402031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsBinaryOp,
34502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsTertiaryOp,
34602031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsQuadOp,
34702031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsQuinOp,
34802031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsSextupleOp,
34902031b185b4653e6c72e21f7a51238b903f6d638buzbee  kIsIT,
35002031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMemLoad,
35102031b185b4653e6c72e21f7a51238b903f6d638buzbee  kMemStore,
3527934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  kPCRelFixup,  // x86 FIXME: add NEEDS_FIXUP to instruction attributes.
35302031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDef0,
35402031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDef1,
35502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefA,
35602031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefD,
35702031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefFPCSList0,
35802031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefFPCSList2,
35902031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefList0,
36002031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefList1,
36102031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefList2,
36202031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefLR,
36302031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegDefSP,
36402031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUse0,
36502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUse1,
36602031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUse2,
36702031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUse3,
36802031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUse4,
36902031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseA,
37002031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseC,
37102031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseD,
37202031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseFPCSList0,
37302031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseFPCSList2,
37402031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseList0,
37502031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseList1,
37602031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseLR,
37702031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUsePC,
37802031b185b4653e6c72e21f7a51238b903f6d638buzbee  kRegUseSP,
37902031b185b4653e6c72e21f7a51238b903f6d638buzbee  kSetsCCodes,
38002031b185b4653e6c72e21f7a51238b903f6d638buzbee  kUsesCCodes
38102031b185b4653e6c72e21f7a51238b903f6d638buzbee};
38202031b185b4653e6c72e21f7a51238b903f6d638buzbee
383f662a7c625b1067f61b23c04459eba9b12bc027ebuzbeeenum SelectInstructionKind {
384f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee  kSelectNone,
385f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee  kSelectConst,
386f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee  kSelectMove,
387f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee  kSelectGoto
388f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee};
389f662a7c625b1067f61b23c04459eba9b12bc027ebuzbee
390a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbeestd::ostream& operator<<(std::ostream& os, const SelectInstructionKind& kind);
391a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee
392a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee// Type of growable bitmap for memory tuning.
393a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbeeenum OatBitMapKind {
394a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapMisc = 0,
395a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapUse,
396a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapDef,
397a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapLiveIn,
398a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapBMatrix,
399a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapDominators,
400a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapIDominated,
401a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapDomFrontier,
402a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapPhi,
403a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapTmpBlocks,
404a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapInputBlocks,
405a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapRegisterV,
406a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapTempSSARegisterV,
407a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapNullCheck,
408a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapTmpBlockV,
409a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kBitMapPredecessors,
410a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee  kNumBitMapKinds
411a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee};
412a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbee
413a5abf7091711eed1e9f1d0e1538fe9963ebdf31cbuzbeestd::ostream& operator<<(std::ostream& os, const OatBitMapKind& kind);
41402031b185b4653e6c72e21f7a51238b903f6d638buzbee
415cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee}  // namespace art
416cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee
417fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif  // ART_COMPILER_DEX_COMPILER_ENUMS_H_
418