1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "quick_entrypoints_enum.h" 18 19 namespace art { 20 EntrypointRequiresStackMap(QuickEntrypointEnum trampoline)21bool EntrypointRequiresStackMap(QuickEntrypointEnum trampoline) { 22 // Entrypoints that do not require a stackmap. In general leaf methods 23 // outside of the VM that are not safepoints. 24 switch (trampoline) { 25 // Listed in the same order as in quick_entrypoints_list.h. 26 case kQuickCmpgDouble: 27 case kQuickCmpgFloat: 28 case kQuickCmplDouble: 29 case kQuickCmplFloat: 30 case kQuickCos: 31 case kQuickSin: 32 case kQuickAcos: 33 case kQuickAsin: 34 case kQuickAtan: 35 case kQuickAtan2: 36 case kQuickCbrt: 37 case kQuickCosh: 38 case kQuickExp: 39 case kQuickExpm1: 40 case kQuickHypot: 41 case kQuickLog: 42 case kQuickLog10: 43 case kQuickNextAfter: 44 case kQuickSinh: 45 case kQuickTan: 46 case kQuickTanh: 47 case kQuickFmod: 48 case kQuickL2d: 49 case kQuickFmodf: 50 case kQuickL2f: 51 case kQuickD2iz: 52 case kQuickF2iz: 53 case kQuickIdivmod: 54 case kQuickD2l: 55 case kQuickF2l: 56 case kQuickLdiv: 57 case kQuickLmod: 58 case kQuickLmul: 59 case kQuickShlLong: 60 case kQuickShrLong: 61 case kQuickUshrLong: 62 return false; 63 64 /* Used by mips for 64bit volatile load/stores. */ 65 case kQuickA64Load: 66 case kQuickA64Store: 67 return false; 68 69 default: 70 return true; 71 } 72 } 73 EntrypointCanTriggerGC(QuickEntrypointEnum entrypoint)74bool EntrypointCanTriggerGC(QuickEntrypointEnum entrypoint) { 75 switch (entrypoint) { 76 // Listed in the same order as in quick_entrypoints_list.h. 77 case kQuickCmpgDouble: 78 case kQuickCmpgFloat: 79 case kQuickCmplDouble: 80 case kQuickCmplFloat: 81 case kQuickCos: 82 case kQuickSin: 83 case kQuickAcos: 84 case kQuickAsin: 85 case kQuickAtan: 86 case kQuickAtan2: 87 case kQuickCbrt: 88 case kQuickCosh: 89 case kQuickExp: 90 case kQuickExpm1: 91 case kQuickHypot: 92 case kQuickLog: 93 case kQuickLog10: 94 case kQuickNextAfter: 95 case kQuickSinh: 96 case kQuickTan: 97 case kQuickTanh: 98 case kQuickFmod: 99 case kQuickL2d: 100 case kQuickFmodf: 101 case kQuickL2f: 102 case kQuickD2iz: 103 case kQuickF2iz: 104 case kQuickIdivmod: 105 case kQuickD2l: 106 case kQuickF2l: 107 case kQuickLdiv: 108 case kQuickLmod: 109 case kQuickLmul: 110 case kQuickShlLong: 111 case kQuickShrLong: 112 case kQuickUshrLong: 113 return false; 114 115 /* Used by mips for 64bit volatile load/stores. */ 116 case kQuickA64Load: 117 case kQuickA64Store: 118 return false; 119 120 default: 121 return true; 122 } 123 } 124 125 } // namespace art 126