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
177655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/portable/portable_entrypoints.h"
18166db04e259ca51838c311891598664deeed85adIan Rogers#include "entrypoints/quick/quick_entrypoints.h"
197655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/entrypoint_utils.h"
2057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
2157b86d47b66322693a070185fadfb43cb9c12eabIan Rogersnamespace art {
2257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
23848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers// Interpreter entrypoints.
24848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void artInterpreterToInterpreterBridge(Thread* self, MethodHelper& mh,
25848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers                                                  const DexFile::CodeItem* code_item,
26848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers                                                  ShadowFrame* shadow_frame, JValue* result);
2708bf1967611965b65ffd5de1aa603b60e7b2d6a8Dragos Sbirleaextern "C" void artInterpreterToCompiledCodeBridge(Thread* self, MethodHelper& mh,
28848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers                                           const DexFile::CodeItem* code_item,
29848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers                                           ShadowFrame* shadow_frame, JValue* result);
30848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
31848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers// Portable entrypoints.
32ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_portable_resolution_trampoline(mirror::ArtMethod*);
33ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_portable_to_interpreter_bridge(mirror::ArtMethod*);
34848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
3557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Alloc entrypoints.
36848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_alloc_array(uint32_t, void*, int32_t);
37848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_alloc_array_with_access_check(uint32_t, void*, int32_t);
38848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_alloc_object(uint32_t type_idx, void* method);
39848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_alloc_object_with_access_check(uint32_t type_idx, void* method);
40848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_check_and_alloc_array(uint32_t, void*, int32_t);
41848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_check_and_alloc_array_with_access_check(uint32_t, void*, int32_t);
4257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
4357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Cast entrypoints.
44848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" uint32_t art_quick_is_assignable(const mirror::Class* klass,
452dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers                                                const mirror::Class* ref_class);
46848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_can_put_array_element(void*, void*);
47848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_check_cast(void*, void*);
4857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
4957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// DexCache entrypoints.
50848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_static_storage(uint32_t, void*);
51848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_type(uint32_t, void*);
52848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_initialize_type_and_verify_access(uint32_t, void*);
53848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_resolve_string(void*, uint32_t);
5457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
5557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Field entrypoints.
56848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set32_instance(uint32_t, void*, int32_t);
57848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set32_static(uint32_t, int32_t);
58848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set64_instance(uint32_t, void*, int64_t);
59848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set64_static(uint32_t, int64_t);
60848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set_obj_instance(uint32_t, void*, void*);
61848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int art_quick_set_obj_static(uint32_t, void*);
62848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int32_t art_quick_get32_instance(uint32_t, void*);
63848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int32_t art_quick_get32_static(uint32_t);
64848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_get64_instance(uint32_t, void*);
65848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_get64_static(uint32_t);
66848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_get_obj_instance(uint32_t, void*);
67848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void* art_quick_get_obj_static(uint32_t);
6857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
6957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// FillArray entrypoint.
70848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_handle_fill_data(void*, void*);
7157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
7257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Lock entrypoints.
73848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_lock_object(void*);
74848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_unlock_object(void*);
7557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
7657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Math entrypoints.
77848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" double art_quick_fmod(double, double);
78848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" float art_quick_fmodf(float, float);
79848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" double art_quick_l2d(int64_t);
80848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" float art_quick_l2f(int64_t);
81848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_d2l(double);
82848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_f2l(float);
83848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int32_t art_quick_idivmod(int32_t, int32_t);
84848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_ldiv(int64_t, int64_t);
85848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_ldivmod(int64_t, int64_t);
86848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" int64_t art_quick_lmul(int64_t, int64_t);
87848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" uint64_t art_quick_lshl(uint64_t, uint32_t);
88848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" uint64_t art_quick_lshr(uint64_t, uint32_t);
89848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" uint64_t art_quick_lushr(uint64_t, uint32_t);
900aba0ba155bef7346bde19e53581200b89ae8a7aJeff Hao
9157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Intrinsic entrypoints.
928dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int32_t art_quick_memcmp16(void*, void*, int32_t);
938dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int32_t art_quick_indexof(void*, uint32_t, uint32_t, uint32_t);
948dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" int32_t art_quick_string_compareto(void*, void*);
958dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void* art_quick_memcpy(void*, const void*, size_t);
9657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
9757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Invoke entrypoints.
98ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_quick_resolution_trampoline(mirror::ArtMethod*);
99ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" void art_quick_to_interpreter_bridge(mirror::ArtMethod*);
1008dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_direct_trampoline_with_access_check(uint32_t, void*);
1018dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_interface_trampoline(uint32_t, void*);
1028dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_interface_trampoline_with_access_check(uint32_t, void*);
1038dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_static_trampoline_with_access_check(uint32_t, void*);
1048dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_super_trampoline_with_access_check(uint32_t, void*);
1058dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_invoke_virtual_trampoline_with_access_check(uint32_t, void*);
10657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
10757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Thread entrypoints.
10857b86d47b66322693a070185fadfb43cb9c12eabIan Rogersextern void CheckSuspendFromCode(Thread* thread);
1098dbb708c7dc05c786329eb5c3fff3194ab6472acLogan Chienextern "C" void art_quick_test_suspend();
11057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
11157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers// Throw entrypoints.
112848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_deliver_exception(void*);
113848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_array_bounds(int32_t index, int32_t limit);
114848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_div_zero();
115848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_no_such_method(int32_t method_idx);
116848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_null_pointer_exception();
117848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersextern "C" void art_quick_throw_stack_overflow(void*);
118848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
119848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogersvoid InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints,
120848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers                     PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) {
121848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  // Interpreter
122848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge;
12308bf1967611965b65ffd5de1aa603b60e7b2d6a8Dragos Sbirlea  ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge;
124848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
125848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  // JNI
126848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub;
127848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
128848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  // Portable
129848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline;
130848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge;
131848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers
13257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Alloc
133848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pAllocArray = art_quick_alloc_array;
134848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pAllocArrayWithAccessCheck = art_quick_alloc_array_with_access_check;
135848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pAllocObject = art_quick_alloc_object;
136848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pAllocObjectWithAccessCheck = art_quick_alloc_object_with_access_check;
137848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pCheckAndAllocArray = art_quick_check_and_alloc_array;
138848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pCheckAndAllocArrayWithAccessCheck = art_quick_check_and_alloc_array_with_access_check;
13957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
14057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Cast
141848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pInstanceofNonTrivial = art_quick_is_assignable;
142848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pCanPutArrayElement = art_quick_can_put_array_element;
143848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pCheckCast = art_quick_check_cast;
14457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
14557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // DexCache
146848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pInitializeStaticStorage = art_quick_initialize_static_storage;
147848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pInitializeTypeAndVerifyAccess = art_quick_initialize_type_and_verify_access;
148848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pInitializeType = art_quick_initialize_type;
149848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pResolveString = art_quick_resolve_string;
15057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
15157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Field
152848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSet32Instance = art_quick_set32_instance;
153848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSet32Static = art_quick_set32_static;
154848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSet64Instance = art_quick_set64_instance;
155848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSet64Static = art_quick_set64_static;
156848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSetObjInstance = art_quick_set_obj_instance;
157848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pSetObjStatic = art_quick_set_obj_static;
158848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGet32Instance = art_quick_get32_instance;
159848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGet64Instance = art_quick_get64_instance;
160848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGetObjInstance = art_quick_get_obj_instance;
161848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGet32Static = art_quick_get32_static;
162848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGet64Static = art_quick_get64_static;
163848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pGetObjStatic = art_quick_get_obj_static;
16457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
16557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // FillArray
166848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pHandleFillArrayData = art_quick_handle_fill_data;
16757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
16857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // JNI
1697655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodStart = JniMethodStart;
1707655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodStartSynchronized = JniMethodStartSynchronized;
1717655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodEnd = JniMethodEnd;
1727655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodEndSynchronized = JniMethodEndSynchronized;
1737655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodEndWithReference = JniMethodEndWithReference;
1747655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pJniMethodEndWithReferenceSynchronized = JniMethodEndWithReferenceSynchronized;
17557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
17657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Locks
177848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pLockObject = art_quick_lock_object;
178848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pUnlockObject = art_quick_unlock_object;
17957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
18057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Math
1817934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pCmpgDouble = NULL;  // Not needed on x86.
1827934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pCmpgFloat = NULL;  // Not needed on x86.
1837934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pCmplDouble = NULL;  // Not needed on x86.
1847934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pCmplFloat = NULL;  // Not needed on x86.
185848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pFmod = art_quick_fmod;
186848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pL2d = art_quick_l2d;
187848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pFmodf = art_quick_fmodf;
188848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pL2f = art_quick_l2f;
1897934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pD2iz = NULL;  // Not needed on x86.
1907934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom  // points->pF2iz = NULL;  // Not needed on x86.
191848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pIdivmod = art_quick_idivmod;
192848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pD2l = art_quick_d2l;
193848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pF2l = art_quick_f2l;
194848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pLdiv = art_quick_ldiv;
195848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pLdivmod = art_quick_ldivmod;
196848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pLmul = art_quick_lmul;
197848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pShlLong = art_quick_lshl;
198848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pShrLong = art_quick_lshr;
199848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pUshrLong = art_quick_lushr;
2000aba0ba155bef7346bde19e53581200b89ae8a7aJeff Hao
20157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Intrinsics
2027655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pIndexOf = art_quick_indexof;
2037655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pMemcmp16 = art_quick_memcmp16;
2047655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pStringCompareTo = art_quick_string_compareto;
2057655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pMemcpy = art_quick_memcpy;
20657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
20757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Invocation
208848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pQuickResolutionTrampoline = art_quick_resolution_trampoline;
209848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pQuickToInterpreterBridge = art_quick_to_interpreter_bridge;
2107655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeDirectTrampolineWithAccessCheck = art_quick_invoke_direct_trampoline_with_access_check;
2117655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeInterfaceTrampoline = art_quick_invoke_interface_trampoline;
2127655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeInterfaceTrampolineWithAccessCheck = art_quick_invoke_interface_trampoline_with_access_check;
2137655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeStaticTrampolineWithAccessCheck = art_quick_invoke_static_trampoline_with_access_check;
2147655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeSuperTrampolineWithAccessCheck = art_quick_invoke_super_trampoline_with_access_check;
2157655f29fabc0a12765de828914a18314382e5a35Ian Rogers  qpoints->pInvokeVirtualTrampolineWithAccessCheck = art_quick_invoke_virtual_trampoline_with_access_check;
21657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
21757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Thread
218848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pCheckSuspend = CheckSuspendFromCode;
219848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pTestSuspend = art_quick_test_suspend;
22057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
22157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers  // Throws
222848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pDeliverException = art_quick_deliver_exception;
223848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pThrowArrayBounds = art_quick_throw_array_bounds;
224848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pThrowDivZero = art_quick_throw_div_zero;
225848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pThrowNoSuchMethod = art_quick_throw_no_such_method;
226848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pThrowNullPointer = art_quick_throw_null_pointer_exception;
227848871b4d8481229c32e0d048a9856e5a9a17ef9Ian Rogers  qpoints->pThrowStackOverflow = art_quick_throw_stack_overflow;
22857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers};
22957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers
23057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers}  // namespace art
231