Home | History | Annotate | Download | only in quick
      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 
     21 bool 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 
     74 bool 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