157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers/* 257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Copyright (C) 2012 The Android Open Source Project 357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * you may not use this file except in compliance with the License. 657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * You may obtain a copy of the License at 757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * http://www.apache.org/licenses/LICENSE-2.0 957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 1057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Unless required by applicable law or agreed to in writing, software 1157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * distributed under the License is distributed on an "AS IS" BASIS, 1257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * See the License for the specific language governing permissions and 1457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * limitations under the License. 1557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers */ 1657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 17848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers#include "entrypoints/interpreter/interpreter_entrypoints.h" 1898d1cc8033251c93786e2fa8c59a2e555a9493beMingyao Yang#include "entrypoints/jni/jni_entrypoints.h" 197655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/portable/portable_entrypoints.h" 20d889178ec78930538d9d6a66c3df9ee9afaffbb4Mathieu Chartier#include "entrypoints/quick/quick_alloc_entrypoints.h" 21166db04e259ca51838c311891598664deeed85adIan Rogers#include "entrypoints/quick/quick_entrypoints.h" 227655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/entrypoint_utils.h" 237655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/math_entrypoints.h" 2457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 2557b86d47b66322693a070185fadfb43cb9c12eabIan Rogersnamespace art { 2657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 27848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers// Interpreter entrypoints. 28848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void artInterpreterToInterpreterBridge(Thread* self, MethodHelper& mh, 29e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers const DexFile::CodeItem* code_item, 30e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers ShadowFrame* shadow_frame, JValue* result); 3108bf1967611965b65ffd5de1aa603b60e7b2d6a8Dragos Sbirleaextern "C" void artInterpreterToCompiledCodeBridge(Thread* self, MethodHelper& mh, 32e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers const DexFile::CodeItem* code_item, 33e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers ShadowFrame* shadow_frame, JValue* result); 34848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 35848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers// Portable entrypoints. 36ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_portable_resolution_trampoline(mirror::ArtMethod*); 37ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_portable_to_interpreter_bridge(mirror::ArtMethod*); 38848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 3957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Cast entrypoints. 402dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersextern "C" uint32_t artIsAssignableFromCode(const mirror::Class* klass, 412dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers const mirror::Class* ref_class); 42848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_check_cast(void*, void*); 4357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 4457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// DexCache entrypoints. 45848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_static_storage(uint32_t, void*); 46848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_type(uint32_t, void*); 47848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_type_and_verify_access(uint32_t, void*); 48848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_resolve_string(void*, uint32_t); 4957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 5057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Field entrypoints. 51848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set32_instance(uint32_t, void*, int32_t); 52848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set32_static(uint32_t, int32_t); 53848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set64_instance(uint32_t, void*, int64_t); 54848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set64_static(uint32_t, int64_t); 55848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set_obj_instance(uint32_t, void*, void*); 56848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set_obj_static(uint32_t, void*); 57848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int32_t art_quick_get32_instance(uint32_t, void*); 58848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int32_t art_quick_get32_static(uint32_t); 59848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_get64_instance(uint32_t, void*); 60848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_get64_static(uint32_t); 61848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_get_obj_instance(uint32_t, void*); 62848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_get_obj_static(uint32_t); 6357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 64a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers// Array entrypoints. 65a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogersextern "C" void art_quick_aput_obj_with_null_and_bound_check(void*, uint32_t, void*); 66a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogersextern "C" void art_quick_aput_obj_with_bound_check(void*, uint32_t, void*); 67a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogersextern "C" void art_quick_aput_obj(void*, uint32_t, void*); 68848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_handle_fill_data(void*, void*); 6957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 7057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Lock entrypoints. 71848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_lock_object(void*); 72848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_unlock_object(void*); 7357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 7457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Math entrypoints. 7557b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern int32_t CmpgDouble(double a, double b); 7657b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern int32_t CmplDouble(double a, double b); 7757b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern int32_t CmpgFloat(float a, float b); 7857b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern int32_t CmplFloat(float a, float b); 7957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 8057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Math conversions. 8157b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" int32_t __aeabi_f2iz(float op1); // FLOAT_TO_INT 8257b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" int32_t __aeabi_d2iz(double op1); // DOUBLE_TO_INT 8357b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" float __aeabi_l2f(int64_t op1); // LONG_TO_FLOAT 8457b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" double __aeabi_l2d(int64_t op1); // LONG_TO_DOUBLE 8557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 8657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Single-precision FP arithmetics. 8757b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" float fmodf(float a, float b); // REM_FLOAT[_2ADDR] 8857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 8957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Double-precision FP arithmetics. 9057b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern "C" double fmod(double a, double b); // REM_DOUBLE[_2ADDR] 9157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 9257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Integer arithmetics. 93a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughesextern "C" int __aeabi_idivmod(int32_t, int32_t); // [DIV|REM]_INT[_2ADDR|_LIT8|_LIT16] 9457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 9557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Long long arithmetics - REM_LONG[_2ADDR] and DIV_LONG[_2ADDR] 96a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughesextern "C" int64_t __aeabi_ldivmod(int64_t, int64_t); 978dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int64_t art_quick_mul_long(int64_t, int64_t); 988dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" uint64_t art_quick_shl_long(uint64_t, uint32_t); 998dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" uint64_t art_quick_shr_long(uint64_t, uint32_t); 1008dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" uint64_t art_quick_ushr_long(uint64_t, uint32_t); 10157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 10257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Intrinsic entrypoints. 1038dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int32_t art_quick_indexof(void*, uint32_t, uint32_t, uint32_t); 1048dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int32_t art_quick_string_compareto(void*, void*); 10557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 10657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Invoke entrypoints. 10788474b416eb257078e590bf9bc7957cee604a186Jeff Haoextern "C" void art_quick_imt_conflict_trampoline(mirror::ArtMethod*); 108ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_quick_resolution_trampoline(mirror::ArtMethod*); 109ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_quick_to_interpreter_bridge(mirror::ArtMethod*); 1108dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_direct_trampoline_with_access_check(uint32_t, void*); 1118dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_interface_trampoline_with_access_check(uint32_t, void*); 1128dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_static_trampoline_with_access_check(uint32_t, void*); 1138dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_super_trampoline_with_access_check(uint32_t, void*); 1148dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_virtual_trampoline_with_access_check(uint32_t, void*); 11557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 11657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Thread entrypoints. 1178dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_test_suspend(); 11857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 11957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Throw entrypoints. 120848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_deliver_exception(void*); 121848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_array_bounds(int32_t index, int32_t limit); 122848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_div_zero(); 123848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_no_such_method(int32_t method_idx); 124848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_null_pointer_exception(); 125848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_stack_overflow(void*); 126848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 1272da882315a61072664f7ce3c212307342e907207Andreas Gampe// Generic JNI downcall 1282da882315a61072664f7ce3c212307342e907207Andreas Gampeextern "C" void art_quick_generic_jni_trampoline(mirror::ArtMethod*); 1292da882315a61072664f7ce3c212307342e907207Andreas Gampe 130848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersvoid InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, 131848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { 132848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers // Interpreter 133848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge; 13408bf1967611965b65ffd5de1aa603b60e7b2d6a8Dragos Sbirlea ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge; 135848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 136848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers // JNI 137848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; 138848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 139848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers // Portable 140848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; 141848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; 142848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers 14357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Alloc 1443b4c18933c24b8a33f38573c2ebcdb9aa16efeb5Hiroshi Yamauchi ResetQuickAllocEntryPoints(qpoints); 14557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 14657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Cast 147848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pInstanceofNonTrivial = artIsAssignableFromCode; 148848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pCheckCast = art_quick_check_cast; 14957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 15057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // DexCache 151848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pInitializeStaticStorage = art_quick_initialize_static_storage; 152848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pInitializeTypeAndVerifyAccess = art_quick_initialize_type_and_verify_access; 153848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pInitializeType = art_quick_initialize_type; 154848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pResolveString = art_quick_resolve_string; 15557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 15657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Field 157848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSet32Instance = art_quick_set32_instance; 158848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSet32Static = art_quick_set32_static; 159848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSet64Instance = art_quick_set64_instance; 160848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSet64Static = art_quick_set64_static; 161848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSetObjInstance = art_quick_set_obj_instance; 162848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pSetObjStatic = art_quick_set_obj_static; 163848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGet32Instance = art_quick_get32_instance; 164848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGet64Instance = art_quick_get64_instance; 165848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGetObjInstance = art_quick_get_obj_instance; 166848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGet32Static = art_quick_get32_static; 167848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGet64Static = art_quick_get64_static; 168848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pGetObjStatic = art_quick_get_obj_static; 16957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 170a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers // Array 171a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers qpoints->pAputObjectWithNullAndBoundCheck = art_quick_aput_obj_with_null_and_bound_check; 172a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers qpoints->pAputObjectWithBoundCheck = art_quick_aput_obj_with_bound_check; 173a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers qpoints->pAputObject = art_quick_aput_obj; 174848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pHandleFillArrayData = art_quick_handle_fill_data; 17557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 17657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // JNI 1777655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodStart = JniMethodStart; 1787655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodStartSynchronized = JniMethodStartSynchronized; 1797655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodEnd = JniMethodEnd; 1807655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodEndSynchronized = JniMethodEndSynchronized; 1817655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodEndWithReference = JniMethodEndWithReference; 1827655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pJniMethodEndWithReferenceSynchronized = JniMethodEndWithReferenceSynchronized; 1832da882315a61072664f7ce3c212307342e907207Andreas Gampe qpoints->pQuickGenericJniTrampoline = art_quick_generic_jni_trampoline; 18457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 18557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Locks 186848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pLockObject = art_quick_lock_object; 187848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pUnlockObject = art_quick_unlock_object; 18857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 18957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Math 1907655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pCmpgDouble = CmpgDouble; 1917655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pCmpgFloat = CmpgFloat; 1927655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pCmplDouble = CmplDouble; 1937655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pCmplFloat = CmplFloat; 1947655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pFmod = fmod; 1957655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pL2d = __aeabi_l2d; 1967655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pFmodf = fmodf; 1977655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pL2f = __aeabi_l2f; 1987655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pD2iz = __aeabi_d2iz; 1997655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pF2iz = __aeabi_f2iz; 2007655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pIdivmod = __aeabi_idivmod; 2017655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pD2l = art_d2l; 2027655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pF2l = art_f2l; 2037655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pLdiv = __aeabi_ldivmod; 204a9a8254c920ce8e22210abfc16c9842ce0aea28fIan Rogers qpoints->pLmod = __aeabi_ldivmod; // result returned in r2:r3 2057655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pLmul = art_quick_mul_long; 2067655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pShlLong = art_quick_shl_long; 2077655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pShrLong = art_quick_shr_long; 2087655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pUshrLong = art_quick_ushr_long; 20957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 21057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Intrinsics 2117655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pIndexOf = art_quick_indexof; 2127655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pStringCompareTo = art_quick_string_compareto; 2137655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pMemcpy = memcpy; 21457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 21557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Invocation 21688474b416eb257078e590bf9bc7957cee604a186Jeff Hao qpoints->pQuickImtConflictTrampoline = art_quick_imt_conflict_trampoline; 217848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pQuickResolutionTrampoline = art_quick_resolution_trampoline; 218848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pQuickToInterpreterBridge = art_quick_to_interpreter_bridge; 2197655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pInvokeDirectTrampolineWithAccessCheck = art_quick_invoke_direct_trampoline_with_access_check; 2207655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pInvokeInterfaceTrampolineWithAccessCheck = art_quick_invoke_interface_trampoline_with_access_check; 2217655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pInvokeStaticTrampolineWithAccessCheck = art_quick_invoke_static_trampoline_with_access_check; 2227655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pInvokeSuperTrampolineWithAccessCheck = art_quick_invoke_super_trampoline_with_access_check; 2237655f29fabc0a12765de828914a18314382e5a35Ian Rogers qpoints->pInvokeVirtualTrampolineWithAccessCheck = art_quick_invoke_virtual_trampoline_with_access_check; 22457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 22557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Thread 226848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pTestSuspend = art_quick_test_suspend; 22757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 22857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Throws 229848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pDeliverException = art_quick_deliver_exception; 230848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pThrowArrayBounds = art_quick_throw_array_bounds; 231848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pThrowDivZero = art_quick_throw_div_zero; 232848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pThrowNoSuchMethod = art_quick_throw_no_such_method; 233848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pThrowNullPointer = art_quick_throw_null_pointer_exception; 234848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers qpoints->pThrowStackOverflow = art_quick_throw_stack_overflow; 23557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers}; 23657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 23757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} // namespace art 238