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