1da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu/* 2da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * Copyright (C) 2016 The Android Open Source Project 3da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * 4da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * Licensed under the Apache License, Version 2.0 (the "License"); 5da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * you may not use this file except in compliance with the License. 6da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * You may obtain a copy of the License at 7da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * 8da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * http://www.apache.org/licenses/LICENSE-2.0 9da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * 10da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * Unless required by applicable law or agreed to in writing, software 11da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * distributed under the License is distributed on an "AS IS" BASIS, 12da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * See the License for the specific language governing permissions and 14da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu * limitations under the License. 15da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu */ 16da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu 17da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu#include "quick_entrypoints_enum.h" 18da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu 19da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescunamespace art { 20da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu 21da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescubool EntrypointRequiresStackMap(QuickEntrypointEnum trampoline) { 22da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu // Entrypoints that do not require a stackmap. In general leaf methods 23da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu // outside of the VM that are not safepoints. 24da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu switch (trampoline) { 25da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu // Listed in the same order as in quick_entrypoints_list.h. 2691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCmpgDouble: 2791a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCmpgFloat: 2891a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCmplDouble: 2991a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCmplFloat: 3091a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCos: 3191a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickSin: 3291a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickAcos: 3391a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickAsin: 3491a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickAtan: 3591a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickAtan2: 3691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCbrt: 3791a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickCosh: 3891a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickExp: 3991a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickExpm1: 4091a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickHypot: 4191a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickLog: 4291a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickLog10: 4391a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickNextAfter: 4491a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickSinh: 4591a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickTan: 4691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickTanh: 4791a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickFmod: 4891a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickL2d: 4991a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickFmodf: 5091a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickL2f: 5191a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickD2iz: 5291a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickF2iz: 5391a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickIdivmod: 5491a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickD2l: 5591a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickF2l: 5691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickLdiv: 5791a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickLmod: 5891a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickLmul: 5991a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickShlLong: 6091a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickShrLong: 6191a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickUshrLong: 6291a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames return false; 6391a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames 6491a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames /* Used by mips for 64bit volatile load/stores. */ 6591a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickA64Load: 6691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames case kQuickA64Store: 6791a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames return false; 6891a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames 6991a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames default: 7091a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames return true; 7191a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames } 7291a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames} 7391a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames 7491a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Ramesbool EntrypointCanTriggerGC(QuickEntrypointEnum entrypoint) { 7591a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames switch (entrypoint) { 7691a6516103b8bf8bb75c3a2840cbdec7521e74a7Alexandre Rames // Listed in the same order as in quick_entrypoints_list.h. 77da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCmpgDouble: 78da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCmpgFloat: 79da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCmplDouble: 80da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCmplFloat: 81da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCos: 82da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickSin: 83da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickAcos: 84da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickAsin: 85da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickAtan: 86da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickAtan2: 87da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCbrt: 88da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickCosh: 89da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickExp: 90da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickExpm1: 91da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickHypot: 92da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickLog: 93da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickLog10: 94da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickNextAfter: 95da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickSinh: 96da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickTan: 97da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickTanh: 98da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickFmod: 99da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickL2d: 100da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickFmodf: 101da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickL2f: 102da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickD2iz: 103da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickF2iz: 104da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickIdivmod: 105da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickD2l: 106da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickF2l: 107da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickLdiv: 108da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickLmod: 109da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickLmul: 110da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickShlLong: 111da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickShrLong: 112da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu case kQuickUshrLong: 113da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu return false; 114da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu 115fca16663334e5838790631d8eac95f4ffdb0cc2eSerban Constantinescu /* Used by mips for 64bit volatile load/stores. */ 116fca16663334e5838790631d8eac95f4ffdb0cc2eSerban Constantinescu case kQuickA64Load: 117fca16663334e5838790631d8eac95f4ffdb0cc2eSerban Constantinescu case kQuickA64Store: 118fca16663334e5838790631d8eac95f4ffdb0cc2eSerban Constantinescu return false; 119fca16663334e5838790631d8eac95f4ffdb0cc2eSerban Constantinescu 120da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu default: 121da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu return true; 122da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu } 123da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu} 124da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu 125da8ffec70e9019fe1208ac38444a7048958fc206Serban Constantinescu} // namespace art 126