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