1 /* 2 * Copyright (C) 2012 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 "entrypoints/jni/jni_entrypoints.h" 18 #include "entrypoints/quick/quick_alloc_entrypoints.h" 19 #include "entrypoints/quick/quick_default_externs.h" 20 #include "entrypoints/quick/quick_default_init_entrypoints.h" 21 #include "entrypoints/quick/quick_entrypoints.h" 22 #include "entrypoints/runtime_asm_entrypoints.h" 23 #include "interpreter/interpreter.h" 24 25 namespace art { 26 27 // Cast entrypoints. 28 extern "C" uint32_t art_quick_is_assignable(const mirror::Class* klass, 29 const mirror::Class* ref_class); 30 31 // Read barrier entrypoints. 32 extern "C" mirror::Object* art_quick_read_barrier_mark(mirror::Object*); 33 extern "C" mirror::Object* art_quick_read_barrier_slow(mirror::Object*, mirror::Object*, uint32_t); 34 extern "C" mirror::Object* art_quick_read_barrier_for_root_slow(GcRoot<mirror::Object>*); 35 36 void InitEntryPoints(JniEntryPoints* jpoints, QuickEntryPoints* qpoints) { 37 DefaultInitEntryPoints(jpoints, qpoints); 38 39 // Cast 40 qpoints->pInstanceofNonTrivial = art_quick_is_assignable; 41 qpoints->pCheckCast = art_quick_check_cast; 42 43 // More math. 44 qpoints->pCos = cos; 45 qpoints->pSin = sin; 46 qpoints->pAcos = acos; 47 qpoints->pAsin = asin; 48 qpoints->pAtan = atan; 49 qpoints->pAtan2 = atan2; 50 qpoints->pCbrt = cbrt; 51 qpoints->pCosh = cosh; 52 qpoints->pExp = exp; 53 qpoints->pExpm1 = expm1; 54 qpoints->pHypot = hypot; 55 qpoints->pLog = log; 56 qpoints->pLog10 = log10; 57 qpoints->pNextAfter = nextafter; 58 qpoints->pSinh = sinh; 59 qpoints->pTan = tan; 60 qpoints->pTanh = tanh; 61 62 // Math 63 qpoints->pD2l = art_quick_d2l; 64 qpoints->pF2l = art_quick_f2l; 65 qpoints->pLdiv = art_quick_ldiv; 66 qpoints->pLmod = art_quick_lmod; 67 qpoints->pLmul = art_quick_lmul; 68 qpoints->pShlLong = art_quick_lshl; 69 qpoints->pShrLong = art_quick_lshr; 70 qpoints->pUshrLong = art_quick_lushr; 71 72 // Intrinsics 73 // qpoints->pIndexOf = nullptr; // Not needed on x86 74 qpoints->pStringCompareTo = art_quick_string_compareto; 75 qpoints->pMemcpy = art_quick_memcpy; 76 77 // Read barrier. 78 qpoints->pReadBarrierJni = ReadBarrierJni; 79 qpoints->pReadBarrierMark = art_quick_read_barrier_mark; 80 qpoints->pReadBarrierSlow = art_quick_read_barrier_slow; 81 qpoints->pReadBarrierForRootSlow = art_quick_read_barrier_for_root_slow; 82 }; 83 84 } // namespace art 85