entrypoints_init_x86.cc revision 468532ea115657709bc32ee498e701a4c71762d4
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "entrypoints/portable/portable_entrypoints.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "entrypoints/quick/quick_entrypoints.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "entrypoints/entrypoint_utils.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace art {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interpreter entrypoints.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void artInterpreterToInterpreterBridge(Thread* self, MethodHelper& mh,
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                                  const DexFile::CodeItem* code_item,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ShadowFrame* shadow_frame, JValue* result);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void artInterperterToCompiledCodeBridge(Thread* self, MethodHelper& mh,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           const DexFile::CodeItem* code_item,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           ShadowFrame* shadow_frame, JValue* result);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Portable entrypoints.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_portable_resolution_trampoline(mirror::AbstractMethod*);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_portable_to_interpreter_bridge(mirror::AbstractMethod*);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Alloc entrypoints.
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_alloc_array(uint32_t, void*, int32_t);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_alloc_array_with_access_check(uint32_t, void*, int32_t);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_alloc_object(uint32_t type_idx, void* method);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_alloc_object_with_access_check(uint32_t type_idx, void* method);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void* art_quick_check_and_alloc_array(uint32_t, void*, int32_t);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void* art_quick_check_and_alloc_array_with_access_check(uint32_t, void*, int32_t);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cast entrypoints.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" uint32_t art_quick_is_assignable(const mirror::Class* klass,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                const mirror::Class* ref_class);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void art_quick_can_put_array_element(void*, void*);
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void art_quick_check_cast(void*, void*);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DexCache entrypoints.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_initialize_static_storage(uint32_t, void*);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void* art_quick_initialize_type(uint32_t, void*);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void* art_quick_initialize_type_and_verify_access(uint32_t, void*);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void* art_quick_resolve_string(void*, uint32_t);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Field entrypoints.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set32_instance(uint32_t, void*, int32_t);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set32_static(uint32_t, int32_t);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set64_instance(uint32_t, void*, int64_t);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set64_static(uint32_t, int64_t);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set_obj_instance(uint32_t, void*, void*);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int art_quick_set_obj_static(uint32_t, void*);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int32_t art_quick_get32_instance(uint32_t, void*);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int32_t art_quick_get32_static(uint32_t);
64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" int64_t art_quick_get64_instance(uint32_t, void*);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int64_t art_quick_get64_static(uint32_t);
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" void* art_quick_get_obj_instance(uint32_t, void*);
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" void* art_quick_get_obj_static(uint32_t);
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FillArray entrypoint.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" void art_quick_handle_fill_data(void*, void*);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Lock entrypoints.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_lock_object(void*);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_unlock_object(void*);
75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Math entrypoints.
77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" double art_quick_fmod(double, double);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" float art_quick_fmodf(float, float);
79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" double art_quick_l2d(int64_t);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" float art_quick_l2f(int64_t);
81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochextern "C" int64_t art_quick_d2l(double);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int64_t art_quick_f2l(float);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int32_t art_quick_idivmod(int32_t, int32_t);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" int64_t art_quick_ldiv(int64_t, int64_t);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int64_t art_quick_ldivmod(int64_t, int64_t);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int64_t art_quick_lmul(int64_t, int64_t);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" uint64_t art_quick_lshl(uint64_t, uint32_t);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" uint64_t art_quick_lshr(uint64_t, uint32_t);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" uint64_t art_quick_lushr(uint64_t, uint32_t);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Intrinsic entrypoints.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int32_t art_quick_memcmp16(void*, void*, int32_t);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int32_t art_quick_indexof(void*, uint32_t, uint32_t, uint32_t);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" int32_t art_quick_string_compareto(void*, void*);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void* art_quick_memcpy(void*, const void*, size_t);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Invoke entrypoints.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_resolution_trampoline(mirror::AbstractMethod*);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_to_interpreter_bridge(mirror::AbstractMethod*);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_direct_trampoline_with_access_check(uint32_t, void*);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_interface_trampoline(uint32_t, void*);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_interface_trampoline_with_access_check(uint32_t, void*);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_static_trampoline_with_access_check(uint32_t, void*);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_super_trampoline_with_access_check(uint32_t, void*);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_invoke_virtual_trampoline_with_access_check(uint32_t, void*);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Thread entrypoints.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void CheckSuspendFromCode(Thread* thread);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_test_suspend();
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Throw entrypoints.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_deliver_exception(void*);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_throw_array_bounds(int32_t index, int32_t limit);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_throw_div_zero();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_throw_no_such_method(int32_t method_idx);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_throw_null_pointer_exception();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" void art_quick_throw_stack_overflow(void*);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints,
120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                     PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) {
121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Interpreter
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge;
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ipoints->pInterpreterToCompiledCodeBridge = artInterperterToCompiledCodeBridge;
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // JNI
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Portable
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline;
130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Alloc
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  qpoints->pAllocArray = art_quick_alloc_array;
134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  qpoints->pAllocArrayWithAccessCheck = art_quick_alloc_array_with_access_check;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pAllocObject = art_quick_alloc_object;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pAllocObjectWithAccessCheck = art_quick_alloc_object_with_access_check;
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  qpoints->pCheckAndAllocArray = art_quick_check_and_alloc_array;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pCheckAndAllocArrayWithAccessCheck = art_quick_check_and_alloc_array_with_access_check;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cast
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInstanceofNonTrivial = art_quick_is_assignable;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pCanPutArrayElement = art_quick_can_put_array_element;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pCheckCast = art_quick_check_cast;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DexCache
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInitializeStaticStorage = art_quick_initialize_static_storage;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInitializeTypeAndVerifyAccess = art_quick_initialize_type_and_verify_access;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInitializeType = art_quick_initialize_type;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pResolveString = art_quick_resolve_string;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Field
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSet32Instance = art_quick_set32_instance;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSet32Static = art_quick_set32_static;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSet64Instance = art_quick_set64_instance;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSet64Static = art_quick_set64_static;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSetObjInstance = art_quick_set_obj_instance;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pSetObjStatic = art_quick_set_obj_static;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGet32Instance = art_quick_get32_instance;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGet64Instance = art_quick_get64_instance;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGetObjInstance = art_quick_get_obj_instance;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGet32Static = art_quick_get32_static;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGet64Static = art_quick_get64_static;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pGetObjStatic = art_quick_get_obj_static;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FillArray
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pHandleFillArrayData = art_quick_handle_fill_data;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // JNI
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodStart = JniMethodStart;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodStartSynchronized = JniMethodStartSynchronized;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodEnd = JniMethodEnd;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodEndSynchronized = JniMethodEndSynchronized;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodEndWithReference = JniMethodEndWithReference;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pJniMethodEndWithReferenceSynchronized = JniMethodEndWithReferenceSynchronized;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Locks
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pLockObject = art_quick_lock_object;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pUnlockObject = art_quick_unlock_object;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
180ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Math
181ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // points->pCmpgDouble = NULL;  // Not needed on x86.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // points->pCmpgFloat = NULL;  // Not needed on x86.
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // points->pCmplDouble = NULL;  // Not needed on x86.
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // points->pCmplFloat = NULL;  // Not needed on x86.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pFmod = art_quick_fmod;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pL2d = art_quick_l2d;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pFmodf = art_quick_fmodf;
188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  qpoints->pL2f = art_quick_l2f;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // points->pD2iz = NULL;  // Not needed on x86.
190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // points->pF2iz = NULL;  // Not needed on x86.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pIdivmod = art_quick_idivmod;
192ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  qpoints->pD2l = art_quick_d2l;
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  qpoints->pF2l = art_quick_f2l;
194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  qpoints->pLdiv = art_quick_ldiv;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pLdivmod = art_quick_ldivmod;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pLmul = art_quick_lmul;
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  qpoints->pShlLong = art_quick_lshl;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pShrLong = art_quick_lshr;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pUshrLong = art_quick_lushr;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Intrinsics
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pIndexOf = art_quick_indexof;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pMemcmp16 = art_quick_memcmp16;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pStringCompareTo = art_quick_string_compareto;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pMemcpy = art_quick_memcpy;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invocation
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pQuickResolutionTrampoline = art_quick_resolution_trampoline;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pQuickToInterpreterBridge = art_quick_to_interpreter_bridge;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeDirectTrampolineWithAccessCheck = art_quick_invoke_direct_trampoline_with_access_check;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeInterfaceTrampoline = art_quick_invoke_interface_trampoline;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeInterfaceTrampolineWithAccessCheck = art_quick_invoke_interface_trampoline_with_access_check;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeStaticTrampolineWithAccessCheck = art_quick_invoke_static_trampoline_with_access_check;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeSuperTrampolineWithAccessCheck = art_quick_invoke_super_trampoline_with_access_check;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pInvokeVirtualTrampolineWithAccessCheck = art_quick_invoke_virtual_trampoline_with_access_check;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Thread
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pCheckSuspend = CheckSuspendFromCode;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pTestSuspend = art_quick_test_suspend;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Throws
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pDeliverException = art_quick_deliver_exception;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pThrowArrayBounds = art_quick_throw_array_bounds;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pThrowDivZero = art_quick_throw_div_zero;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pThrowNoSuchMethod = art_quick_throw_no_such_method;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pThrowNullPointer = art_quick_throw_null_pointer_exception;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  qpoints->pThrowStackOverflow = art_quick_throw_stack_overflow;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace art
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)