/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "quick_entrypoints_enum.h" namespace art { bool EntrypointRequiresStackMap(QuickEntrypointEnum trampoline) { // Entrypoints that do not require a stackmap. In general leaf methods // outside of the VM that are not safepoints. switch (trampoline) { // Listed in the same order as in quick_entrypoints_list.h. case kQuickCmpgDouble: case kQuickCmpgFloat: case kQuickCmplDouble: case kQuickCmplFloat: case kQuickCos: case kQuickSin: case kQuickAcos: case kQuickAsin: case kQuickAtan: case kQuickAtan2: case kQuickCbrt: case kQuickCosh: case kQuickExp: case kQuickExpm1: case kQuickHypot: case kQuickLog: case kQuickLog10: case kQuickNextAfter: case kQuickSinh: case kQuickTan: case kQuickTanh: case kQuickFmod: case kQuickL2d: case kQuickFmodf: case kQuickL2f: case kQuickD2iz: case kQuickF2iz: case kQuickIdivmod: case kQuickD2l: case kQuickF2l: case kQuickLdiv: case kQuickLmod: case kQuickLmul: case kQuickShlLong: case kQuickShrLong: case kQuickUshrLong: return false; /* Used by mips for 64bit volatile load/stores. */ case kQuickA64Load: case kQuickA64Store: return false; default: return true; } } bool EntrypointCanTriggerGC(QuickEntrypointEnum entrypoint) { switch (entrypoint) { // Listed in the same order as in quick_entrypoints_list.h. case kQuickCmpgDouble: case kQuickCmpgFloat: case kQuickCmplDouble: case kQuickCmplFloat: case kQuickCos: case kQuickSin: case kQuickAcos: case kQuickAsin: case kQuickAtan: case kQuickAtan2: case kQuickCbrt: case kQuickCosh: case kQuickExp: case kQuickExpm1: case kQuickHypot: case kQuickLog: case kQuickLog10: case kQuickNextAfter: case kQuickSinh: case kQuickTan: case kQuickTanh: case kQuickFmod: case kQuickL2d: case kQuickFmodf: case kQuickL2f: case kQuickD2iz: case kQuickF2iz: case kQuickIdivmod: case kQuickD2l: case kQuickF2l: case kQuickLdiv: case kQuickLmod: case kQuickLmul: case kQuickShlLong: case kQuickShrLong: case kQuickUshrLong: return false; /* Used by mips for 64bit volatile load/stores. */ case kQuickA64Load: case kQuickA64Store: return false; default: return true; } } } // namespace art