diff options
author | 2022-02-04 16:10:05 -0800 | |
---|---|---|
committer | 2022-02-14 09:23:14 +0000 | |
commit | 4ef67d45b62c974faab601ed2dda4677c06f50c6 (patch) | |
tree | 9db749a9c643bdfedb78b4697e9e2ecbaaded7f0 | |
parent | 22b5fe062332f6b640a1022261b7f058ceaa184a (diff) |
Set types of quick entry points to void*.
The quick entry points are not intended to be called from C++, so let's
set their types to void* so that any attempt to call them will fail
to compile. Introduce accessors to make it easier to set the fields.
Change-Id: I7fae304100f55e96924c31a983ef0a705302d58d
-rw-r--r-- | runtime/arch/arm/entrypoints_init_arm.cc | 138 | ||||
-rw-r--r-- | runtime/arch/arm64/entrypoints_init_arm64.cc | 148 | ||||
-rw-r--r-- | runtime/arch/x86/entrypoints_init_x86.cc | 124 | ||||
-rw-r--r-- | runtime/arch/x86_64/entrypoints_init_x86_64.cc | 124 | ||||
-rw-r--r-- | runtime/entrypoints/quick/quick_alloc_entrypoints.cc | 48 | ||||
-rw-r--r-- | runtime/entrypoints/quick/quick_default_init_entrypoints.h | 148 | ||||
-rw-r--r-- | runtime/entrypoints/quick/quick_entrypoints.h | 4 | ||||
-rw-r--r-- | runtime/well_known_classes.cc | 2 |
8 files changed, 369 insertions, 367 deletions
diff --git a/runtime/arch/arm/entrypoints_init_arm.cc b/runtime/arch/arm/entrypoints_init_arm.cc index bc985d60f2..b0b0064643 100644 --- a/runtime/arch/arm/entrypoints_init_arm.cc +++ b/runtime/arch/arm/entrypoints_init_arm.cc @@ -78,18 +78,18 @@ extern "C" int __aeabi_idivmod(int32_t, int32_t); // [DIV|REM]_INT[_2ADDR|_LIT8 extern "C" int64_t __aeabi_ldivmod(int64_t, int64_t); void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { - qpoints->pReadBarrierMarkReg00 = is_active ? art_quick_read_barrier_mark_reg00 : nullptr; - qpoints->pReadBarrierMarkReg01 = is_active ? art_quick_read_barrier_mark_reg01 : nullptr; - qpoints->pReadBarrierMarkReg02 = is_active ? art_quick_read_barrier_mark_reg02 : nullptr; - qpoints->pReadBarrierMarkReg03 = is_active ? art_quick_read_barrier_mark_reg03 : nullptr; - qpoints->pReadBarrierMarkReg04 = is_active ? art_quick_read_barrier_mark_reg04 : nullptr; - qpoints->pReadBarrierMarkReg05 = is_active ? art_quick_read_barrier_mark_reg05 : nullptr; - qpoints->pReadBarrierMarkReg06 = is_active ? art_quick_read_barrier_mark_reg06 : nullptr; - qpoints->pReadBarrierMarkReg07 = is_active ? art_quick_read_barrier_mark_reg07 : nullptr; - qpoints->pReadBarrierMarkReg08 = is_active ? art_quick_read_barrier_mark_reg08 : nullptr; - qpoints->pReadBarrierMarkReg09 = is_active ? art_quick_read_barrier_mark_reg09 : nullptr; - qpoints->pReadBarrierMarkReg10 = is_active ? art_quick_read_barrier_mark_reg10 : nullptr; - qpoints->pReadBarrierMarkReg11 = is_active ? art_quick_read_barrier_mark_reg11 : nullptr; + qpoints->SetReadBarrierMarkReg00(is_active ? art_quick_read_barrier_mark_reg00 : nullptr); + qpoints->SetReadBarrierMarkReg01(is_active ? art_quick_read_barrier_mark_reg01 : nullptr); + qpoints->SetReadBarrierMarkReg02(is_active ? art_quick_read_barrier_mark_reg02 : nullptr); + qpoints->SetReadBarrierMarkReg03(is_active ? art_quick_read_barrier_mark_reg03 : nullptr); + qpoints->SetReadBarrierMarkReg04(is_active ? art_quick_read_barrier_mark_reg04 : nullptr); + qpoints->SetReadBarrierMarkReg05(is_active ? art_quick_read_barrier_mark_reg05 : nullptr); + qpoints->SetReadBarrierMarkReg06(is_active ? art_quick_read_barrier_mark_reg06 : nullptr); + qpoints->SetReadBarrierMarkReg07(is_active ? art_quick_read_barrier_mark_reg07 : nullptr); + qpoints->SetReadBarrierMarkReg08(is_active ? art_quick_read_barrier_mark_reg08 : nullptr); + qpoints->SetReadBarrierMarkReg09(is_active ? art_quick_read_barrier_mark_reg09 : nullptr); + qpoints->SetReadBarrierMarkReg10(is_active ? art_quick_read_barrier_mark_reg10 : nullptr); + qpoints->SetReadBarrierMarkReg11(is_active ? art_quick_read_barrier_mark_reg11 : nullptr); if (kUseReadBarrier && kUseBakerReadBarrier) { // For the alignment check, strip the Thumb mode bit. @@ -120,8 +120,8 @@ void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { DCHECK_EQ(BAKER_MARK_INTROSPECTION_INTRINSIC_CAS_ENTRYPOINT_OFFSET, intrinsic_cas_diff); // The register 12, i.e. IP, is reserved, so there is no art_quick_read_barrier_mark_reg12. // We're using the entry to hold a pointer to the introspection entrypoint instead. - qpoints->pReadBarrierMarkReg12 = - is_active ? art_quick_read_barrier_mark_introspection : nullptr; + qpoints->SetReadBarrierMarkReg12( + is_active ? art_quick_read_barrier_mark_introspection : nullptr); } } @@ -131,72 +131,72 @@ void InitEntryPoints(JniEntryPoints* jpoints, DefaultInitEntryPoints(jpoints, qpoints, monitor_jni_entry_exit); // Cast - qpoints->pInstanceofNonTrivial = artInstanceOfFromCode; - qpoints->pCheckInstanceOf = art_quick_check_instance_of; + qpoints->SetInstanceofNonTrivial(artInstanceOfFromCode); + qpoints->SetCheckInstanceOf(art_quick_check_instance_of); // Math - qpoints->pIdivmod = __aeabi_idivmod; - qpoints->pLdiv = __aeabi_ldivmod; - qpoints->pLmod = __aeabi_ldivmod; // result returned in r2:r3 - qpoints->pLmul = art_quick_mul_long; - qpoints->pShlLong = art_quick_shl_long; - qpoints->pShrLong = art_quick_shr_long; - qpoints->pUshrLong = art_quick_ushr_long; - qpoints->pFmod = art_quick_fmod; - qpoints->pFmodf = art_quick_fmodf; - qpoints->pD2l = art_quick_d2l; - qpoints->pF2l = art_quick_f2l; - qpoints->pL2f = art_quick_l2f; + qpoints->SetIdivmod(__aeabi_idivmod); + qpoints->SetLdiv(__aeabi_ldivmod); + qpoints->SetLmod(__aeabi_ldivmod); // result returned in r2:r3 + qpoints->SetLmul(art_quick_mul_long); + qpoints->SetShlLong(art_quick_shl_long); + qpoints->SetShrLong(art_quick_shr_long); + qpoints->SetUshrLong(art_quick_ushr_long); + qpoints->SetFmod(art_quick_fmod); + qpoints->SetFmodf(art_quick_fmodf); + qpoints->SetD2l(art_quick_d2l); + qpoints->SetF2l(art_quick_f2l); + qpoints->SetL2f(art_quick_l2f); // More math. - qpoints->pCos = cos; - qpoints->pSin = sin; - qpoints->pAcos = acos; - qpoints->pAsin = asin; - qpoints->pAtan = atan; - qpoints->pAtan2 = atan2; - qpoints->pPow = pow; - qpoints->pCbrt = cbrt; - qpoints->pCosh = cosh; - qpoints->pExp = exp; - qpoints->pExpm1 = expm1; - qpoints->pHypot = hypot; - qpoints->pLog = log; - qpoints->pLog10 = log10; - qpoints->pNextAfter = nextafter; - qpoints->pSinh = sinh; - qpoints->pTan = tan; - qpoints->pTanh = tanh; + qpoints->SetCos(cos); + qpoints->SetSin(sin); + qpoints->SetAcos(acos); + qpoints->SetAsin(asin); + qpoints->SetAtan(atan); + qpoints->SetAtan2(atan2); + qpoints->SetPow(pow); + qpoints->SetCbrt(cbrt); + qpoints->SetCosh(cosh); + qpoints->SetExp(exp); + qpoints->SetExpm1(expm1); + qpoints->SetHypot(hypot); + qpoints->SetLog(log); + qpoints->SetLog10(log10); + qpoints->SetNextAfter(nextafter); + qpoints->SetSinh(sinh); + qpoints->SetTan(tan); + qpoints->SetTanh(tanh); // Intrinsics - qpoints->pIndexOf = art_quick_indexof; + qpoints->SetIndexOf(art_quick_indexof); // The ARM StringCompareTo intrinsic does not call the runtime. - qpoints->pStringCompareTo = nullptr; - qpoints->pMemcpy = memcpy; + qpoints->SetStringCompareTo(nullptr); + qpoints->SetMemcpy(memcpy); // Read barrier. UpdateReadBarrierEntrypoints(qpoints, /*is_active=*/ false); - qpoints->pReadBarrierMarkReg12 = nullptr; // Cannot use register 12 (IP) to pass arguments. - qpoints->pReadBarrierMarkReg13 = nullptr; // Cannot use register 13 (SP) to pass arguments. - qpoints->pReadBarrierMarkReg14 = nullptr; // Cannot use register 14 (LR) to pass arguments. - qpoints->pReadBarrierMarkReg15 = nullptr; // Cannot use register 15 (PC) to pass arguments. + qpoints->SetReadBarrierMarkReg12(nullptr); // Cannot use register 12 (IP) to pass arguments. + qpoints->SetReadBarrierMarkReg13(nullptr); // Cannot use register 13 (SP) to pass arguments. + qpoints->SetReadBarrierMarkReg14(nullptr); // Cannot use register 14 (LR) to pass arguments. + qpoints->SetReadBarrierMarkReg15(nullptr); // Cannot use register 15 (PC) to pass arguments. // ARM has only 16 core registers. - qpoints->pReadBarrierMarkReg16 = nullptr; - qpoints->pReadBarrierMarkReg17 = nullptr; - qpoints->pReadBarrierMarkReg18 = nullptr; - qpoints->pReadBarrierMarkReg19 = nullptr; - qpoints->pReadBarrierMarkReg20 = nullptr; - qpoints->pReadBarrierMarkReg21 = nullptr; - qpoints->pReadBarrierMarkReg22 = nullptr; - qpoints->pReadBarrierMarkReg23 = nullptr; - qpoints->pReadBarrierMarkReg24 = nullptr; - qpoints->pReadBarrierMarkReg25 = nullptr; - qpoints->pReadBarrierMarkReg26 = nullptr; - qpoints->pReadBarrierMarkReg27 = nullptr; - qpoints->pReadBarrierMarkReg28 = nullptr; - qpoints->pReadBarrierMarkReg29 = nullptr; - qpoints->pReadBarrierSlow = artReadBarrierSlow; - qpoints->pReadBarrierForRootSlow = artReadBarrierForRootSlow; + qpoints->SetReadBarrierMarkReg16(nullptr); + qpoints->SetReadBarrierMarkReg17(nullptr); + qpoints->SetReadBarrierMarkReg18(nullptr); + qpoints->SetReadBarrierMarkReg19(nullptr); + qpoints->SetReadBarrierMarkReg20(nullptr); + qpoints->SetReadBarrierMarkReg21(nullptr); + qpoints->SetReadBarrierMarkReg22(nullptr); + qpoints->SetReadBarrierMarkReg23(nullptr); + qpoints->SetReadBarrierMarkReg24(nullptr); + qpoints->SetReadBarrierMarkReg25(nullptr); + qpoints->SetReadBarrierMarkReg26(nullptr); + qpoints->SetReadBarrierMarkReg27(nullptr); + qpoints->SetReadBarrierMarkReg28(nullptr); + qpoints->SetReadBarrierMarkReg29(nullptr); + qpoints->SetReadBarrierSlow(artReadBarrierSlow); + qpoints->SetReadBarrierForRootSlow(artReadBarrierForRootSlow); } } // namespace art diff --git a/runtime/arch/arm64/entrypoints_init_arm64.cc b/runtime/arch/arm64/entrypoints_init_arm64.cc index 29f6c4e4f0..7db2528a05 100644 --- a/runtime/arch/arm64/entrypoints_init_arm64.cc +++ b/runtime/arch/arm64/entrypoints_init_arm64.cc @@ -86,34 +86,34 @@ void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { // have less core registers (resp. 16, 8 and 16). // TODO: ARM/ARM64 now use introspection entrypoints. Consider // reducing the number of entrypoints to those needed by x86-64. - qpoints->pReadBarrierMarkReg00 = is_active ? art_quick_read_barrier_mark_reg00 : nullptr; - qpoints->pReadBarrierMarkReg01 = is_active ? art_quick_read_barrier_mark_reg01 : nullptr; - qpoints->pReadBarrierMarkReg02 = is_active ? art_quick_read_barrier_mark_reg02 : nullptr; - qpoints->pReadBarrierMarkReg03 = is_active ? art_quick_read_barrier_mark_reg03 : nullptr; - qpoints->pReadBarrierMarkReg04 = is_active ? art_quick_read_barrier_mark_reg04 : nullptr; - qpoints->pReadBarrierMarkReg05 = is_active ? art_quick_read_barrier_mark_reg05 : nullptr; - qpoints->pReadBarrierMarkReg06 = is_active ? art_quick_read_barrier_mark_reg06 : nullptr; - qpoints->pReadBarrierMarkReg07 = is_active ? art_quick_read_barrier_mark_reg07 : nullptr; - qpoints->pReadBarrierMarkReg08 = is_active ? art_quick_read_barrier_mark_reg08 : nullptr; - qpoints->pReadBarrierMarkReg09 = is_active ? art_quick_read_barrier_mark_reg09 : nullptr; - qpoints->pReadBarrierMarkReg10 = is_active ? art_quick_read_barrier_mark_reg10 : nullptr; - qpoints->pReadBarrierMarkReg11 = is_active ? art_quick_read_barrier_mark_reg11 : nullptr; - qpoints->pReadBarrierMarkReg12 = is_active ? art_quick_read_barrier_mark_reg12 : nullptr; - qpoints->pReadBarrierMarkReg13 = is_active ? art_quick_read_barrier_mark_reg13 : nullptr; - qpoints->pReadBarrierMarkReg14 = is_active ? art_quick_read_barrier_mark_reg14 : nullptr; - qpoints->pReadBarrierMarkReg15 = is_active ? art_quick_read_barrier_mark_reg15 : nullptr; - qpoints->pReadBarrierMarkReg17 = is_active ? art_quick_read_barrier_mark_reg17 : nullptr; - qpoints->pReadBarrierMarkReg19 = is_active ? art_quick_read_barrier_mark_reg19 : nullptr; - qpoints->pReadBarrierMarkReg20 = is_active ? art_quick_read_barrier_mark_reg20 : nullptr; - qpoints->pReadBarrierMarkReg21 = is_active ? art_quick_read_barrier_mark_reg21 : nullptr; - qpoints->pReadBarrierMarkReg22 = is_active ? art_quick_read_barrier_mark_reg22 : nullptr; - qpoints->pReadBarrierMarkReg23 = is_active ? art_quick_read_barrier_mark_reg23 : nullptr; - qpoints->pReadBarrierMarkReg24 = is_active ? art_quick_read_barrier_mark_reg24 : nullptr; - qpoints->pReadBarrierMarkReg25 = is_active ? art_quick_read_barrier_mark_reg25 : nullptr; - qpoints->pReadBarrierMarkReg26 = is_active ? art_quick_read_barrier_mark_reg26 : nullptr; - qpoints->pReadBarrierMarkReg27 = is_active ? art_quick_read_barrier_mark_reg27 : nullptr; - qpoints->pReadBarrierMarkReg28 = is_active ? art_quick_read_barrier_mark_reg28 : nullptr; - qpoints->pReadBarrierMarkReg29 = is_active ? art_quick_read_barrier_mark_reg29 : nullptr; + qpoints->SetReadBarrierMarkReg00(is_active ? art_quick_read_barrier_mark_reg00 : nullptr); + qpoints->SetReadBarrierMarkReg01(is_active ? art_quick_read_barrier_mark_reg01 : nullptr); + qpoints->SetReadBarrierMarkReg02(is_active ? art_quick_read_barrier_mark_reg02 : nullptr); + qpoints->SetReadBarrierMarkReg03(is_active ? art_quick_read_barrier_mark_reg03 : nullptr); + qpoints->SetReadBarrierMarkReg04(is_active ? art_quick_read_barrier_mark_reg04 : nullptr); + qpoints->SetReadBarrierMarkReg05(is_active ? art_quick_read_barrier_mark_reg05 : nullptr); + qpoints->SetReadBarrierMarkReg06(is_active ? art_quick_read_barrier_mark_reg06 : nullptr); + qpoints->SetReadBarrierMarkReg07(is_active ? art_quick_read_barrier_mark_reg07 : nullptr); + qpoints->SetReadBarrierMarkReg08(is_active ? art_quick_read_barrier_mark_reg08 : nullptr); + qpoints->SetReadBarrierMarkReg09(is_active ? art_quick_read_barrier_mark_reg09 : nullptr); + qpoints->SetReadBarrierMarkReg10(is_active ? art_quick_read_barrier_mark_reg10 : nullptr); + qpoints->SetReadBarrierMarkReg11(is_active ? art_quick_read_barrier_mark_reg11 : nullptr); + qpoints->SetReadBarrierMarkReg12(is_active ? art_quick_read_barrier_mark_reg12 : nullptr); + qpoints->SetReadBarrierMarkReg13(is_active ? art_quick_read_barrier_mark_reg13 : nullptr); + qpoints->SetReadBarrierMarkReg14(is_active ? art_quick_read_barrier_mark_reg14 : nullptr); + qpoints->SetReadBarrierMarkReg15(is_active ? art_quick_read_barrier_mark_reg15 : nullptr); + qpoints->SetReadBarrierMarkReg17(is_active ? art_quick_read_barrier_mark_reg17 : nullptr); + qpoints->SetReadBarrierMarkReg19(is_active ? art_quick_read_barrier_mark_reg19 : nullptr); + qpoints->SetReadBarrierMarkReg20(is_active ? art_quick_read_barrier_mark_reg20 : nullptr); + qpoints->SetReadBarrierMarkReg21(is_active ? art_quick_read_barrier_mark_reg21 : nullptr); + qpoints->SetReadBarrierMarkReg22(is_active ? art_quick_read_barrier_mark_reg22 : nullptr); + qpoints->SetReadBarrierMarkReg23(is_active ? art_quick_read_barrier_mark_reg23 : nullptr); + qpoints->SetReadBarrierMarkReg24(is_active ? art_quick_read_barrier_mark_reg24 : nullptr); + qpoints->SetReadBarrierMarkReg25(is_active ? art_quick_read_barrier_mark_reg25 : nullptr); + qpoints->SetReadBarrierMarkReg26(is_active ? art_quick_read_barrier_mark_reg26 : nullptr); + qpoints->SetReadBarrierMarkReg27(is_active ? art_quick_read_barrier_mark_reg27 : nullptr); + qpoints->SetReadBarrierMarkReg28(is_active ? art_quick_read_barrier_mark_reg28 : nullptr); + qpoints->SetReadBarrierMarkReg29(is_active ? art_quick_read_barrier_mark_reg29 : nullptr); // Check that array switch cases are at appropriate offsets from the introspection entrypoint. DCHECK_ALIGNED(art_quick_read_barrier_mark_introspection, 512u); @@ -128,7 +128,7 @@ void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { DCHECK_EQ(BAKER_MARK_INTROSPECTION_GC_ROOT_ENTRYPOINT_OFFSET, gc_roots_diff); // The register 16, i.e. IP0, is reserved, so there is no art_quick_read_barrier_mark_reg16. // We're using the entry to hold a pointer to the introspection entrypoint instead. - qpoints->pReadBarrierMarkReg16 = is_active ? art_quick_read_barrier_mark_introspection : nullptr; + qpoints->SetReadBarrierMarkReg16(is_active ? art_quick_read_barrier_mark_introspection : nullptr); } void InitEntryPoints(JniEntryPoints* jpoints, @@ -137,62 +137,62 @@ void InitEntryPoints(JniEntryPoints* jpoints, DefaultInitEntryPoints(jpoints, qpoints, monitor_jni_entry_exit); // Cast - qpoints->pInstanceofNonTrivial = artInstanceOfFromCode; - qpoints->pCheckInstanceOf = art_quick_check_instance_of; + qpoints->SetInstanceofNonTrivial(artInstanceOfFromCode); + qpoints->SetCheckInstanceOf(art_quick_check_instance_of); // Math // TODO null entrypoints not needed for ARM64 - generate inline. - qpoints->pCmpgDouble = nullptr; - qpoints->pCmpgFloat = nullptr; - qpoints->pCmplDouble = nullptr; - qpoints->pCmplFloat = nullptr; - qpoints->pFmod = fmod; - qpoints->pL2d = nullptr; - qpoints->pFmodf = fmodf; - qpoints->pL2f = nullptr; - qpoints->pD2iz = nullptr; - qpoints->pF2iz = nullptr; - qpoints->pIdivmod = nullptr; - qpoints->pD2l = nullptr; - qpoints->pF2l = nullptr; - qpoints->pLdiv = nullptr; - qpoints->pLmod = nullptr; - qpoints->pLmul = nullptr; - qpoints->pShlLong = nullptr; - qpoints->pShrLong = nullptr; - qpoints->pUshrLong = nullptr; + qpoints->SetCmpgDouble(nullptr); + qpoints->SetCmpgFloat(nullptr); + qpoints->SetCmplDouble(nullptr); + qpoints->SetCmplFloat(nullptr); + qpoints->SetFmod(fmod); + qpoints->SetL2d(nullptr); + qpoints->SetFmodf(fmodf); + qpoints->SetL2f(nullptr); + qpoints->SetD2iz(nullptr); + qpoints->SetF2iz(nullptr); + qpoints->SetIdivmod(nullptr); + qpoints->SetD2l(nullptr); + qpoints->SetF2l(nullptr); + qpoints->SetLdiv(nullptr); + qpoints->SetLmod(nullptr); + qpoints->SetLmul(nullptr); + qpoints->SetShlLong(nullptr); + qpoints->SetShrLong(nullptr); + qpoints->SetUshrLong(nullptr); // More math. - qpoints->pCos = cos; - qpoints->pSin = sin; - qpoints->pAcos = acos; - qpoints->pAsin = asin; - qpoints->pAtan = atan; - qpoints->pAtan2 = atan2; - qpoints->pPow = pow; - qpoints->pCbrt = cbrt; - qpoints->pCosh = cosh; - qpoints->pExp = exp; - qpoints->pExpm1 = expm1; - qpoints->pHypot = hypot; - qpoints->pLog = log; - qpoints->pLog10 = log10; - qpoints->pNextAfter = nextafter; - qpoints->pSinh = sinh; - qpoints->pTan = tan; - qpoints->pTanh = tanh; + qpoints->SetCos(cos); + qpoints->SetSin(sin); + qpoints->SetAcos(acos); + qpoints->SetAsin(asin); + qpoints->SetAtan(atan); + qpoints->SetAtan2(atan2); + qpoints->SetPow(pow); + qpoints->SetCbrt(cbrt); + qpoints->SetCosh(cosh); + qpoints->SetExp(exp); + qpoints->SetExpm1(expm1); + qpoints->SetHypot(hypot); + qpoints->SetLog(log); + qpoints->SetLog10(log10); + qpoints->SetNextAfter(nextafter); + qpoints->SetSinh(sinh); + qpoints->SetTan(tan); + qpoints->SetTanh(tanh); // Intrinsics - qpoints->pIndexOf = art_quick_indexof; + qpoints->SetIndexOf(art_quick_indexof); // The ARM64 StringCompareTo intrinsic does not call the runtime. - qpoints->pStringCompareTo = nullptr; - qpoints->pMemcpy = memcpy; + qpoints->SetStringCompareTo(nullptr); + qpoints->SetMemcpy(memcpy); // Read barrier. - qpoints->pReadBarrierMarkReg16 = nullptr; // IP0 is used as a temp by the asm stub. + qpoints->SetReadBarrierMarkReg16(nullptr); // IP0 is used as a temp by the asm stub. UpdateReadBarrierEntrypoints(qpoints, /*is_active=*/ false); - qpoints->pReadBarrierSlow = artReadBarrierSlow; - qpoints->pReadBarrierForRootSlow = artReadBarrierForRootSlow; + qpoints->SetReadBarrierSlow(artReadBarrierSlow); + qpoints->SetReadBarrierForRootSlow(artReadBarrierForRootSlow); } } // namespace art diff --git a/runtime/arch/x86/entrypoints_init_x86.cc b/runtime/arch/x86/entrypoints_init_x86.cc index 27c14c6c15..01853cce72 100644 --- a/runtime/arch/x86/entrypoints_init_x86.cc +++ b/runtime/arch/x86/entrypoints_init_x86.cc @@ -45,13 +45,13 @@ extern "C" mirror::Object* art_quick_read_barrier_slow(mirror::Object*, mirror:: extern "C" mirror::Object* art_quick_read_barrier_for_root_slow(GcRoot<mirror::Object>*); void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { - qpoints->pReadBarrierMarkReg00 = is_active ? art_quick_read_barrier_mark_reg00 : nullptr; - qpoints->pReadBarrierMarkReg01 = is_active ? art_quick_read_barrier_mark_reg01 : nullptr; - qpoints->pReadBarrierMarkReg02 = is_active ? art_quick_read_barrier_mark_reg02 : nullptr; - qpoints->pReadBarrierMarkReg03 = is_active ? art_quick_read_barrier_mark_reg03 : nullptr; - qpoints->pReadBarrierMarkReg05 = is_active ? art_quick_read_barrier_mark_reg05 : nullptr; - qpoints->pReadBarrierMarkReg06 = is_active ? art_quick_read_barrier_mark_reg06 : nullptr; - qpoints->pReadBarrierMarkReg07 = is_active ? art_quick_read_barrier_mark_reg07 : nullptr; + qpoints->SetReadBarrierMarkReg00(is_active ? art_quick_read_barrier_mark_reg00 : nullptr); + qpoints->SetReadBarrierMarkReg01(is_active ? art_quick_read_barrier_mark_reg01 : nullptr); + qpoints->SetReadBarrierMarkReg02(is_active ? art_quick_read_barrier_mark_reg02 : nullptr); + qpoints->SetReadBarrierMarkReg03(is_active ? art_quick_read_barrier_mark_reg03 : nullptr); + qpoints->SetReadBarrierMarkReg05(is_active ? art_quick_read_barrier_mark_reg05 : nullptr); + qpoints->SetReadBarrierMarkReg06(is_active ? art_quick_read_barrier_mark_reg06 : nullptr); + qpoints->SetReadBarrierMarkReg07(is_active ? art_quick_read_barrier_mark_reg07 : nullptr); } void InitEntryPoints(JniEntryPoints* jpoints, @@ -60,72 +60,72 @@ void InitEntryPoints(JniEntryPoints* jpoints, DefaultInitEntryPoints(jpoints, qpoints, monitor_jni_entry_exit); // Cast - qpoints->pInstanceofNonTrivial = art_quick_instance_of; - qpoints->pCheckInstanceOf = art_quick_check_instance_of; + qpoints->SetInstanceofNonTrivial(art_quick_instance_of); + qpoints->SetCheckInstanceOf(art_quick_check_instance_of); // More math. - qpoints->pCos = cos; - qpoints->pSin = sin; - qpoints->pAcos = acos; - qpoints->pAsin = asin; - qpoints->pAtan = atan; - qpoints->pAtan2 = atan2; - qpoints->pPow = pow; - qpoints->pCbrt = cbrt; - qpoints->pCosh = cosh; - qpoints->pExp = exp; - qpoints->pExpm1 = expm1; - qpoints->pHypot = hypot; - qpoints->pLog = log; - qpoints->pLog10 = log10; - qpoints->pNextAfter = nextafter; - qpoints->pSinh = sinh; - qpoints->pTan = tan; - qpoints->pTanh = tanh; + qpoints->SetCos(cos); + qpoints->SetSin(sin); + qpoints->SetAcos(acos); + qpoints->SetAsin(asin); + qpoints->SetAtan(atan); + qpoints->SetAtan2(atan2); + qpoints->SetPow(pow); + qpoints->SetCbrt(cbrt); + qpoints->SetCosh(cosh); + qpoints->SetExp(exp); + qpoints->SetExpm1(expm1); + qpoints->SetHypot(hypot); + qpoints->SetLog(log); + qpoints->SetLog10(log10); + qpoints->SetNextAfter(nextafter); + qpoints->SetSinh(sinh); + qpoints->SetTan(tan); + qpoints->SetTanh(tanh); // Math - qpoints->pD2l = art_quick_d2l; - qpoints->pF2l = art_quick_f2l; - qpoints->pLdiv = art_quick_ldiv; - qpoints->pLmod = art_quick_lmod; - qpoints->pLmul = art_quick_lmul; - qpoints->pShlLong = art_quick_lshl; - qpoints->pShrLong = art_quick_lshr; - qpoints->pUshrLong = art_quick_lushr; + qpoints->SetD2l(art_quick_d2l); + qpoints->SetF2l(art_quick_f2l); + qpoints->SetLdiv(art_quick_ldiv); + qpoints->SetLmod(art_quick_lmod); + qpoints->SetLmul(art_quick_lmul); + qpoints->SetShlLong(art_quick_lshl); + qpoints->SetShrLong(art_quick_lshr); + qpoints->SetUshrLong(art_quick_lushr); // Intrinsics // qpoints->pIndexOf = nullptr; // Not needed on x86 - qpoints->pStringCompareTo = art_quick_string_compareto; - qpoints->pMemcpy = art_quick_memcpy; + qpoints->SetStringCompareTo(art_quick_string_compareto); + qpoints->SetMemcpy(art_quick_memcpy); // Read barrier. UpdateReadBarrierEntrypoints(qpoints, /*is_active=*/ false); - qpoints->pReadBarrierMarkReg04 = nullptr; // Cannot use register 4 (ESP) to pass arguments. + qpoints->SetReadBarrierMarkReg04(nullptr); // Cannot use register 4 (ESP) to pass arguments. // x86 has only 8 core registers. - qpoints->pReadBarrierMarkReg08 = nullptr; - qpoints->pReadBarrierMarkReg09 = nullptr; - qpoints->pReadBarrierMarkReg10 = nullptr; - qpoints->pReadBarrierMarkReg11 = nullptr; - qpoints->pReadBarrierMarkReg12 = nullptr; - qpoints->pReadBarrierMarkReg13 = nullptr; - qpoints->pReadBarrierMarkReg14 = nullptr; - qpoints->pReadBarrierMarkReg15 = nullptr; - qpoints->pReadBarrierMarkReg16 = nullptr; - qpoints->pReadBarrierMarkReg17 = nullptr; - qpoints->pReadBarrierMarkReg18 = nullptr; - qpoints->pReadBarrierMarkReg19 = nullptr; - qpoints->pReadBarrierMarkReg20 = nullptr; - qpoints->pReadBarrierMarkReg21 = nullptr; - qpoints->pReadBarrierMarkReg22 = nullptr; - qpoints->pReadBarrierMarkReg23 = nullptr; - qpoints->pReadBarrierMarkReg24 = nullptr; - qpoints->pReadBarrierMarkReg25 = nullptr; - qpoints->pReadBarrierMarkReg26 = nullptr; - qpoints->pReadBarrierMarkReg27 = nullptr; - qpoints->pReadBarrierMarkReg28 = nullptr; - qpoints->pReadBarrierMarkReg29 = nullptr; - qpoints->pReadBarrierSlow = art_quick_read_barrier_slow; - qpoints->pReadBarrierForRootSlow = art_quick_read_barrier_for_root_slow; + qpoints->SetReadBarrierMarkReg08(nullptr); + qpoints->SetReadBarrierMarkReg09(nullptr); + qpoints->SetReadBarrierMarkReg10(nullptr); + qpoints->SetReadBarrierMarkReg11(nullptr); + qpoints->SetReadBarrierMarkReg12(nullptr); + qpoints->SetReadBarrierMarkReg13(nullptr); + qpoints->SetReadBarrierMarkReg14(nullptr); + qpoints->SetReadBarrierMarkReg15(nullptr); + qpoints->SetReadBarrierMarkReg16(nullptr); + qpoints->SetReadBarrierMarkReg17(nullptr); + qpoints->SetReadBarrierMarkReg18(nullptr); + qpoints->SetReadBarrierMarkReg19(nullptr); + qpoints->SetReadBarrierMarkReg20(nullptr); + qpoints->SetReadBarrierMarkReg21(nullptr); + qpoints->SetReadBarrierMarkReg22(nullptr); + qpoints->SetReadBarrierMarkReg23(nullptr); + qpoints->SetReadBarrierMarkReg24(nullptr); + qpoints->SetReadBarrierMarkReg25(nullptr); + qpoints->SetReadBarrierMarkReg26(nullptr); + qpoints->SetReadBarrierMarkReg27(nullptr); + qpoints->SetReadBarrierMarkReg28(nullptr); + qpoints->SetReadBarrierMarkReg29(nullptr); + qpoints->SetReadBarrierSlow(art_quick_read_barrier_slow); + qpoints->SetReadBarrierForRootSlow(art_quick_read_barrier_for_root_slow); } } // namespace art diff --git a/runtime/arch/x86_64/entrypoints_init_x86_64.cc b/runtime/arch/x86_64/entrypoints_init_x86_64.cc index 1359822984..bf98979754 100644 --- a/runtime/arch/x86_64/entrypoints_init_x86_64.cc +++ b/runtime/arch/x86_64/entrypoints_init_x86_64.cc @@ -56,21 +56,21 @@ extern "C" mirror::Object* art_quick_read_barrier_slow(mirror::Object*, mirror:: extern "C" mirror::Object* art_quick_read_barrier_for_root_slow(GcRoot<mirror::Object>*); void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_active) { - qpoints->pReadBarrierMarkReg00 = is_active ? art_quick_read_barrier_mark_reg00 : nullptr; - qpoints->pReadBarrierMarkReg01 = is_active ? art_quick_read_barrier_mark_reg01 : nullptr; - qpoints->pReadBarrierMarkReg02 = is_active ? art_quick_read_barrier_mark_reg02 : nullptr; - qpoints->pReadBarrierMarkReg03 = is_active ? art_quick_read_barrier_mark_reg03 : nullptr; - qpoints->pReadBarrierMarkReg05 = is_active ? art_quick_read_barrier_mark_reg05 : nullptr; - qpoints->pReadBarrierMarkReg06 = is_active ? art_quick_read_barrier_mark_reg06 : nullptr; - qpoints->pReadBarrierMarkReg07 = is_active ? art_quick_read_barrier_mark_reg07 : nullptr; - qpoints->pReadBarrierMarkReg08 = is_active ? art_quick_read_barrier_mark_reg08 : nullptr; - qpoints->pReadBarrierMarkReg09 = is_active ? art_quick_read_barrier_mark_reg09 : nullptr; - qpoints->pReadBarrierMarkReg10 = is_active ? art_quick_read_barrier_mark_reg10 : nullptr; - qpoints->pReadBarrierMarkReg11 = is_active ? art_quick_read_barrier_mark_reg11 : nullptr; - qpoints->pReadBarrierMarkReg12 = is_active ? art_quick_read_barrier_mark_reg12 : nullptr; - qpoints->pReadBarrierMarkReg13 = is_active ? art_quick_read_barrier_mark_reg13 : nullptr; - qpoints->pReadBarrierMarkReg14 = is_active ? art_quick_read_barrier_mark_reg14 : nullptr; - qpoints->pReadBarrierMarkReg15 = is_active ? art_quick_read_barrier_mark_reg15 : nullptr; + qpoints->SetReadBarrierMarkReg00(is_active ? art_quick_read_barrier_mark_reg00 : nullptr); + qpoints->SetReadBarrierMarkReg01(is_active ? art_quick_read_barrier_mark_reg01 : nullptr); + qpoints->SetReadBarrierMarkReg02(is_active ? art_quick_read_barrier_mark_reg02 : nullptr); + qpoints->SetReadBarrierMarkReg03(is_active ? art_quick_read_barrier_mark_reg03 : nullptr); + qpoints->SetReadBarrierMarkReg05(is_active ? art_quick_read_barrier_mark_reg05 : nullptr); + qpoints->SetReadBarrierMarkReg06(is_active ? art_quick_read_barrier_mark_reg06 : nullptr); + qpoints->SetReadBarrierMarkReg07(is_active ? art_quick_read_barrier_mark_reg07 : nullptr); + qpoints->SetReadBarrierMarkReg08(is_active ? art_quick_read_barrier_mark_reg08 : nullptr); + qpoints->SetReadBarrierMarkReg09(is_active ? art_quick_read_barrier_mark_reg09 : nullptr); + qpoints->SetReadBarrierMarkReg10(is_active ? art_quick_read_barrier_mark_reg10 : nullptr); + qpoints->SetReadBarrierMarkReg11(is_active ? art_quick_read_barrier_mark_reg11 : nullptr); + qpoints->SetReadBarrierMarkReg12(is_active ? art_quick_read_barrier_mark_reg12 : nullptr); + qpoints->SetReadBarrierMarkReg13(is_active ? art_quick_read_barrier_mark_reg13 : nullptr); + qpoints->SetReadBarrierMarkReg14(is_active ? art_quick_read_barrier_mark_reg14 : nullptr); + qpoints->SetReadBarrierMarkReg15(is_active ? art_quick_read_barrier_mark_reg15 : nullptr); } void InitEntryPoints(JniEntryPoints* jpoints, @@ -83,63 +83,63 @@ void InitEntryPoints(JniEntryPoints* jpoints, DefaultInitEntryPoints(jpoints, qpoints, monitor_jni_entry_exit); // Cast - qpoints->pInstanceofNonTrivial = art_quick_instance_of; - qpoints->pCheckInstanceOf = art_quick_check_instance_of; + qpoints->SetInstanceofNonTrivial(art_quick_instance_of); + qpoints->SetCheckInstanceOf(art_quick_check_instance_of); // More math. - qpoints->pCos = cos; - qpoints->pSin = sin; - qpoints->pAcos = acos; - qpoints->pAsin = asin; - qpoints->pAtan = atan; - qpoints->pAtan2 = atan2; - qpoints->pPow = pow; - qpoints->pCbrt = cbrt; - qpoints->pCosh = cosh; - qpoints->pExp = exp; - qpoints->pExpm1 = expm1; - qpoints->pHypot = hypot; - qpoints->pLog = log; - qpoints->pLog10 = log10; - qpoints->pNextAfter = nextafter; - qpoints->pSinh = sinh; - qpoints->pTan = tan; - qpoints->pTanh = tanh; + qpoints->SetCos(cos); + qpoints->SetSin(sin); + qpoints->SetAcos(acos); + qpoints->SetAsin(asin); + qpoints->SetAtan(atan); + qpoints->SetAtan2(atan2); + qpoints->SetPow(pow); + qpoints->SetCbrt(cbrt); + qpoints->SetCosh(cosh); + qpoints->SetExp(exp); + qpoints->SetExpm1(expm1); + qpoints->SetHypot(hypot); + qpoints->SetLog(log); + qpoints->SetLog10(log10); + qpoints->SetNextAfter(nextafter); + qpoints->SetSinh(sinh); + qpoints->SetTan(tan); + qpoints->SetTanh(tanh); // Math - qpoints->pD2l = art_d2l; - qpoints->pF2l = art_f2l; - qpoints->pLdiv = art_quick_ldiv; - qpoints->pLmod = art_quick_lmod; - qpoints->pLmul = art_quick_lmul; - qpoints->pShlLong = art_quick_lshl; - qpoints->pShrLong = art_quick_lshr; - qpoints->pUshrLong = art_quick_lushr; + qpoints->SetD2l(art_d2l); + qpoints->SetF2l(art_f2l); + qpoints->SetLdiv(art_quick_ldiv); + qpoints->SetLmod(art_quick_lmod); + qpoints->SetLmul(art_quick_lmul); + qpoints->SetShlLong(art_quick_lshl); + qpoints->SetShrLong(art_quick_lshr); + qpoints->SetUshrLong(art_quick_lushr); // Intrinsics - qpoints->pStringCompareTo = art_quick_string_compareto; - qpoints->pMemcpy = art_quick_memcpy; + qpoints->SetStringCompareTo(art_quick_string_compareto); + qpoints->SetMemcpy(art_quick_memcpy); // Read barrier. UpdateReadBarrierEntrypoints(qpoints, /*is_active=*/ false); - qpoints->pReadBarrierMarkReg04 = nullptr; // Cannot use register 4 (RSP) to pass arguments. + qpoints->SetReadBarrierMarkReg04(nullptr); // Cannot use register 4 (RSP) to pass arguments. // x86-64 has only 16 core registers. - qpoints->pReadBarrierMarkReg16 = nullptr; - qpoints->pReadBarrierMarkReg17 = nullptr; - qpoints->pReadBarrierMarkReg18 = nullptr; - qpoints->pReadBarrierMarkReg19 = nullptr; - qpoints->pReadBarrierMarkReg20 = nullptr; - qpoints->pReadBarrierMarkReg21 = nullptr; - qpoints->pReadBarrierMarkReg22 = nullptr; - qpoints->pReadBarrierMarkReg23 = nullptr; - qpoints->pReadBarrierMarkReg24 = nullptr; - qpoints->pReadBarrierMarkReg25 = nullptr; - qpoints->pReadBarrierMarkReg26 = nullptr; - qpoints->pReadBarrierMarkReg27 = nullptr; - qpoints->pReadBarrierMarkReg28 = nullptr; - qpoints->pReadBarrierMarkReg29 = nullptr; - qpoints->pReadBarrierSlow = art_quick_read_barrier_slow; - qpoints->pReadBarrierForRootSlow = art_quick_read_barrier_for_root_slow; + qpoints->SetReadBarrierMarkReg16(nullptr); + qpoints->SetReadBarrierMarkReg17(nullptr); + qpoints->SetReadBarrierMarkReg18(nullptr); + qpoints->SetReadBarrierMarkReg19(nullptr); + qpoints->SetReadBarrierMarkReg20(nullptr); + qpoints->SetReadBarrierMarkReg21(nullptr); + qpoints->SetReadBarrierMarkReg22(nullptr); + qpoints->SetReadBarrierMarkReg23(nullptr); + qpoints->SetReadBarrierMarkReg24(nullptr); + qpoints->SetReadBarrierMarkReg25(nullptr); + qpoints->SetReadBarrierMarkReg26(nullptr); + qpoints->SetReadBarrierMarkReg27(nullptr); + qpoints->SetReadBarrierMarkReg28(nullptr); + qpoints->SetReadBarrierMarkReg29(nullptr); + qpoints->SetReadBarrierSlow(art_quick_read_barrier_slow); + qpoints->SetReadBarrierForRootSlow(art_quick_read_barrier_for_root_slow); #endif // __APPLE__ } diff --git a/runtime/entrypoints/quick/quick_alloc_entrypoints.cc b/runtime/entrypoints/quick/quick_alloc_entrypoints.cc index c5b4be5982..7b3d84915a 100644 --- a/runtime/entrypoints/quick/quick_alloc_entrypoints.cc +++ b/runtime/entrypoints/quick/quick_alloc_entrypoints.cc @@ -165,31 +165,31 @@ extern "C" void* art_quick_alloc_string_from_chars##suffix##_instrumented(int32_ extern "C" void* art_quick_alloc_string_from_string##suffix##_instrumented(void*); \ void SetQuickAllocEntryPoints##suffix(QuickEntryPoints* qpoints, bool instrumented) { \ if (instrumented) { \ - qpoints->pAllocArrayResolved = art_quick_alloc_array_resolved##suffix##_instrumented; \ - qpoints->pAllocArrayResolved8 = art_quick_alloc_array_resolved8##suffix##_instrumented; \ - qpoints->pAllocArrayResolved16 = art_quick_alloc_array_resolved16##suffix##_instrumented; \ - qpoints->pAllocArrayResolved32 = art_quick_alloc_array_resolved32##suffix##_instrumented; \ - qpoints->pAllocArrayResolved64 = art_quick_alloc_array_resolved64##suffix##_instrumented; \ - qpoints->pAllocObjectResolved = art_quick_alloc_object_resolved##suffix##_instrumented; \ - qpoints->pAllocObjectInitialized = art_quick_alloc_object_initialized##suffix##_instrumented; \ - qpoints->pAllocObjectWithChecks = art_quick_alloc_object_with_checks##suffix##_instrumented; \ - qpoints->pAllocStringObject = art_quick_alloc_string_object##suffix##_instrumented; \ - qpoints->pAllocStringFromBytes = art_quick_alloc_string_from_bytes##suffix##_instrumented; \ - qpoints->pAllocStringFromChars = art_quick_alloc_string_from_chars##suffix##_instrumented; \ - qpoints->pAllocStringFromString = art_quick_alloc_string_from_string##suffix##_instrumented; \ + qpoints->SetAllocArrayResolved(art_quick_alloc_array_resolved##suffix##_instrumented); \ + qpoints->SetAllocArrayResolved8(art_quick_alloc_array_resolved8##suffix##_instrumented); \ + qpoints->SetAllocArrayResolved16(art_quick_alloc_array_resolved16##suffix##_instrumented); \ + qpoints->SetAllocArrayResolved32(art_quick_alloc_array_resolved32##suffix##_instrumented); \ + qpoints->SetAllocArrayResolved64(art_quick_alloc_array_resolved64##suffix##_instrumented); \ + qpoints->SetAllocObjectResolved(art_quick_alloc_object_resolved##suffix##_instrumented); \ + qpoints->SetAllocObjectInitialized(art_quick_alloc_object_initialized##suffix##_instrumented); \ + qpoints->SetAllocObjectWithChecks(art_quick_alloc_object_with_checks##suffix##_instrumented); \ + qpoints->SetAllocStringObject(art_quick_alloc_string_object##suffix##_instrumented); \ + qpoints->SetAllocStringFromBytes(art_quick_alloc_string_from_bytes##suffix##_instrumented); \ + qpoints->SetAllocStringFromChars(art_quick_alloc_string_from_chars##suffix##_instrumented); \ + qpoints->SetAllocStringFromString(art_quick_alloc_string_from_string##suffix##_instrumented); \ } else { \ - qpoints->pAllocArrayResolved = art_quick_alloc_array_resolved##suffix; \ - qpoints->pAllocArrayResolved8 = art_quick_alloc_array_resolved8##suffix; \ - qpoints->pAllocArrayResolved16 = art_quick_alloc_array_resolved16##suffix; \ - qpoints->pAllocArrayResolved32 = art_quick_alloc_array_resolved32##suffix; \ - qpoints->pAllocArrayResolved64 = art_quick_alloc_array_resolved64##suffix; \ - qpoints->pAllocObjectResolved = art_quick_alloc_object_resolved##suffix; \ - qpoints->pAllocObjectInitialized = art_quick_alloc_object_initialized##suffix; \ - qpoints->pAllocObjectWithChecks = art_quick_alloc_object_with_checks##suffix; \ - qpoints->pAllocStringObject = art_quick_alloc_string_object##suffix; \ - qpoints->pAllocStringFromBytes = art_quick_alloc_string_from_bytes##suffix; \ - qpoints->pAllocStringFromChars = art_quick_alloc_string_from_chars##suffix; \ - qpoints->pAllocStringFromString = art_quick_alloc_string_from_string##suffix; \ + qpoints->SetAllocArrayResolved(art_quick_alloc_array_resolved##suffix); \ + qpoints->SetAllocArrayResolved8(art_quick_alloc_array_resolved8##suffix); \ + qpoints->SetAllocArrayResolved16(art_quick_alloc_array_resolved16##suffix); \ + qpoints->SetAllocArrayResolved32(art_quick_alloc_array_resolved32##suffix); \ + qpoints->SetAllocArrayResolved64(art_quick_alloc_array_resolved64##suffix); \ + qpoints->SetAllocObjectResolved(art_quick_alloc_object_resolved##suffix); \ + qpoints->SetAllocObjectInitialized(art_quick_alloc_object_initialized##suffix); \ + qpoints->SetAllocObjectWithChecks(art_quick_alloc_object_with_checks##suffix); \ + qpoints->SetAllocStringObject(art_quick_alloc_string_object##suffix); \ + qpoints->SetAllocStringFromBytes(art_quick_alloc_string_from_bytes##suffix); \ + qpoints->SetAllocStringFromChars(art_quick_alloc_string_from_chars##suffix); \ + qpoints->SetAllocStringFromString(art_quick_alloc_string_from_string##suffix); \ } \ } diff --git a/runtime/entrypoints/quick/quick_default_init_entrypoints.h b/runtime/entrypoints/quick/quick_default_init_entrypoints.h index eec7ca9b0c..d1ce38bf04 100644 --- a/runtime/entrypoints/quick/quick_default_init_entrypoints.h +++ b/runtime/entrypoints/quick/quick_default_init_entrypoints.h @@ -37,107 +37,107 @@ static void DefaultInitEntryPoints(JniEntryPoints* jpoints, ResetQuickAllocEntryPoints(qpoints); // Resolution and initialization - qpoints->pInitializeStaticStorage = art_quick_initialize_static_storage; - qpoints->pResolveTypeAndVerifyAccess = art_quick_resolve_type_and_verify_access; - qpoints->pResolveType = art_quick_resolve_type; - qpoints->pResolveMethodHandle = art_quick_resolve_method_handle; - qpoints->pResolveMethodType = art_quick_resolve_method_type; - qpoints->pResolveString = art_quick_resolve_string; + qpoints->SetInitializeStaticStorage(art_quick_initialize_static_storage); + qpoints->SetResolveTypeAndVerifyAccess(art_quick_resolve_type_and_verify_access); + qpoints->SetResolveType(art_quick_resolve_type); + qpoints->SetResolveMethodHandle(art_quick_resolve_method_handle); + qpoints->SetResolveMethodType(art_quick_resolve_method_type); + qpoints->SetResolveString(art_quick_resolve_string); // Field - qpoints->pSet8Instance = art_quick_set8_instance; - qpoints->pSet8Static = art_quick_set8_static; - qpoints->pSet16Instance = art_quick_set16_instance; - qpoints->pSet16Static = art_quick_set16_static; - qpoints->pSet32Instance = art_quick_set32_instance; - qpoints->pSet32Static = art_quick_set32_static; - qpoints->pSet64Instance = art_quick_set64_instance; - qpoints->pSet64Static = art_quick_set64_static; - qpoints->pSetObjInstance = art_quick_set_obj_instance; - qpoints->pSetObjStatic = art_quick_set_obj_static; - qpoints->pGetByteInstance = art_quick_get_byte_instance; - qpoints->pGetBooleanInstance = art_quick_get_boolean_instance; - qpoints->pGetShortInstance = art_quick_get_short_instance; - qpoints->pGetCharInstance = art_quick_get_char_instance; - qpoints->pGet32Instance = art_quick_get32_instance; - qpoints->pGet64Instance = art_quick_get64_instance; - qpoints->pGetObjInstance = art_quick_get_obj_instance; - qpoints->pGetByteStatic = art_quick_get_byte_static; - qpoints->pGetBooleanStatic = art_quick_get_boolean_static; - qpoints->pGetShortStatic = art_quick_get_short_static; - qpoints->pGetCharStatic = art_quick_get_char_static; - qpoints->pGet32Static = art_quick_get32_static; - qpoints->pGet64Static = art_quick_get64_static; - qpoints->pGetObjStatic = art_quick_get_obj_static; + qpoints->SetSet8Instance(art_quick_set8_instance); + qpoints->SetSet8Static(art_quick_set8_static); + qpoints->SetSet16Instance(art_quick_set16_instance); + qpoints->SetSet16Static(art_quick_set16_static); + qpoints->SetSet32Instance(art_quick_set32_instance); + qpoints->SetSet32Static(art_quick_set32_static); + qpoints->SetSet64Instance(art_quick_set64_instance); + qpoints->SetSet64Static(art_quick_set64_static); + qpoints->SetSetObjInstance(art_quick_set_obj_instance); + qpoints->SetSetObjStatic(art_quick_set_obj_static); + qpoints->SetGetByteInstance(art_quick_get_byte_instance); + qpoints->SetGetBooleanInstance(art_quick_get_boolean_instance); + qpoints->SetGetShortInstance(art_quick_get_short_instance); + qpoints->SetGetCharInstance(art_quick_get_char_instance); + qpoints->SetGet32Instance(art_quick_get32_instance); + qpoints->SetGet64Instance(art_quick_get64_instance); + qpoints->SetGetObjInstance(art_quick_get_obj_instance); + qpoints->SetGetByteStatic(art_quick_get_byte_static); + qpoints->SetGetBooleanStatic(art_quick_get_boolean_static); + qpoints->SetGetShortStatic(art_quick_get_short_static); + qpoints->SetGetCharStatic(art_quick_get_char_static); + qpoints->SetGet32Static(art_quick_get32_static); + qpoints->SetGet64Static(art_quick_get64_static); + qpoints->SetGetObjStatic(art_quick_get_obj_static); // Array - qpoints->pAputObject = art_quick_aput_obj; + qpoints->SetAputObject(art_quick_aput_obj); // JNI - qpoints->pJniMethodStart = art_jni_method_start; - qpoints->pJniMethodEnd = art_jni_method_end; - qpoints->pQuickGenericJniTrampoline = art_quick_generic_jni_trampoline; - qpoints->pJniDecodeReferenceResult = JniDecodeReferenceResult; - qpoints->pJniReadBarrier = art_jni_read_barrier; + qpoints->SetJniMethodStart(art_jni_method_start); + qpoints->SetJniMethodEnd(art_jni_method_end); + qpoints->SetQuickGenericJniTrampoline(art_quick_generic_jni_trampoline); + qpoints->SetJniDecodeReferenceResult(JniDecodeReferenceResult); + qpoints->SetJniReadBarrier(art_jni_read_barrier); // Locks if (UNLIKELY(VLOG_IS_ON(systrace_lock_logging))) { - qpoints->pJniLockObject = art_jni_lock_object_no_inline; - qpoints->pJniUnlockObject = art_jni_unlock_object_no_inline; - qpoints->pLockObject = art_quick_lock_object_no_inline; - qpoints->pUnlockObject = art_quick_unlock_object_no_inline; + qpoints->SetJniLockObject(art_jni_lock_object_no_inline); + qpoints->SetJniUnlockObject(art_jni_unlock_object_no_inline); + qpoints->SetLockObject(art_quick_lock_object_no_inline); + qpoints->SetUnlockObject(art_quick_unlock_object_no_inline); } else { - qpoints->pJniLockObject = art_jni_lock_object; - qpoints->pJniUnlockObject = art_jni_unlock_object; - qpoints->pLockObject = art_quick_lock_object; - qpoints->pUnlockObject = art_quick_unlock_object; + qpoints->SetJniLockObject(art_jni_lock_object); + qpoints->SetJniUnlockObject(art_jni_unlock_object); + qpoints->SetLockObject(art_quick_lock_object); + qpoints->SetUnlockObject(art_quick_unlock_object); } // Invocation - qpoints->pQuickImtConflictTrampoline = art_quick_imt_conflict_trampoline; - qpoints->pQuickResolutionTrampoline = art_quick_resolution_trampoline; - qpoints->pQuickToInterpreterBridge = art_quick_to_interpreter_bridge; - qpoints->pInvokeDirectTrampolineWithAccessCheck = - art_quick_invoke_direct_trampoline_with_access_check; - qpoints->pInvokeInterfaceTrampolineWithAccessCheck = - art_quick_invoke_interface_trampoline_with_access_check; - qpoints->pInvokeStaticTrampolineWithAccessCheck = - art_quick_invoke_static_trampoline_with_access_check; - qpoints->pInvokeSuperTrampolineWithAccessCheck = - art_quick_invoke_super_trampoline_with_access_check; - qpoints->pInvokeVirtualTrampolineWithAccessCheck = - art_quick_invoke_virtual_trampoline_with_access_check; - qpoints->pInvokePolymorphic = art_quick_invoke_polymorphic; - qpoints->pInvokeCustom = art_quick_invoke_custom; + qpoints->SetQuickImtConflictTrampoline(art_quick_imt_conflict_trampoline); + qpoints->SetQuickResolutionTrampoline(art_quick_resolution_trampoline); + qpoints->SetQuickToInterpreterBridge(art_quick_to_interpreter_bridge); + qpoints->SetInvokeDirectTrampolineWithAccessCheck( + art_quick_invoke_direct_trampoline_with_access_check); + qpoints->SetInvokeInterfaceTrampolineWithAccessCheck( + art_quick_invoke_interface_trampoline_with_access_check); + qpoints->SetInvokeStaticTrampolineWithAccessCheck( + art_quick_invoke_static_trampoline_with_access_check); + qpoints->SetInvokeSuperTrampolineWithAccessCheck( + art_quick_invoke_super_trampoline_with_access_check); + qpoints->SetInvokeVirtualTrampolineWithAccessCheck( + art_quick_invoke_virtual_trampoline_with_access_check); + qpoints->SetInvokePolymorphic(art_quick_invoke_polymorphic); + qpoints->SetInvokeCustom(art_quick_invoke_custom); // Thread - qpoints->pTestSuspend = art_quick_test_suspend; + qpoints->SetTestSuspend(art_quick_test_suspend); // Throws - qpoints->pDeliverException = art_quick_deliver_exception; - qpoints->pThrowArrayBounds = art_quick_throw_array_bounds; - qpoints->pThrowDivZero = art_quick_throw_div_zero; - qpoints->pThrowNullPointer = art_quick_throw_null_pointer_exception; - qpoints->pThrowStackOverflow = art_quick_throw_stack_overflow; - qpoints->pThrowStringBounds = art_quick_throw_string_bounds; + qpoints->SetDeliverException(art_quick_deliver_exception); + qpoints->SetThrowArrayBounds(art_quick_throw_array_bounds); + qpoints->SetThrowDivZero(art_quick_throw_div_zero); + qpoints->SetThrowNullPointer(art_quick_throw_null_pointer_exception); + qpoints->SetThrowStackOverflow(art_quick_throw_stack_overflow); + qpoints->SetThrowStringBounds(art_quick_throw_string_bounds); // Deoptimize - qpoints->pDeoptimize = art_quick_deoptimize_from_compiled_code; + qpoints->SetDeoptimize(art_quick_deoptimize_from_compiled_code); // StringBuilder append - qpoints->pStringBuilderAppend = art_quick_string_builder_append; + qpoints->SetStringBuilderAppend(art_quick_string_builder_append); // Tiered JIT support - qpoints->pUpdateInlineCache = art_quick_update_inline_cache; - qpoints->pCompileOptimized = art_quick_compile_optimized; + qpoints->SetUpdateInlineCache(art_quick_update_inline_cache); + qpoints->SetCompileOptimized(art_quick_compile_optimized); // Tracing hooks - qpoints->pMethodEntryHook = art_quick_method_entry_hook; - qpoints->pMethodExitHook = art_quick_method_exit_hook; + qpoints->SetMethodEntryHook(art_quick_method_entry_hook); + qpoints->SetMethodExitHook(art_quick_method_exit_hook); if (monitor_jni_entry_exit) { - qpoints->pJniMethodStart = art_jni_monitored_method_start; - qpoints->pJniMethodEnd = art_jni_monitored_method_end; + qpoints->SetJniMethodStart(art_jni_monitored_method_start); + qpoints->SetJniMethodEnd(art_jni_monitored_method_end); } } diff --git a/runtime/entrypoints/quick/quick_entrypoints.h b/runtime/entrypoints/quick/quick_entrypoints.h index 26e540303e..7af1a0b14e 100644 --- a/runtime/entrypoints/quick/quick_entrypoints.h +++ b/runtime/entrypoints/quick/quick_entrypoints.h @@ -44,7 +44,9 @@ class Thread; // Pointers to functions that are called by quick compiler generated code via thread-local storage. struct QuickEntryPoints { -#define ENTRYPOINT_ENUM(name, rettype, ...) rettype ( * p ## name )( __VA_ARGS__ ); +#define ENTRYPOINT_ENUM(name, rettype, ...) \ + void* p##name; \ + void Set##name(rettype (*fn)(__VA_ARGS__)) { p##name = reinterpret_cast<void*>(fn); } #include "quick_entrypoints_list.h" QUICK_ENTRYPOINT_LIST(ENTRYPOINT_ENUM) #undef QUICK_ENTRYPOINT_LIST diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc index 62e405af61..4705741bb5 100644 --- a/runtime/well_known_classes.cc +++ b/runtime/well_known_classes.cc @@ -299,7 +299,7 @@ void Thread::InitStringEntryPoints() { #define SET_ENTRY_POINT(init_runtime_name, init_signature, new_runtime_name, \ new_java_name, new_signature, entry_point_name) \ DCHECK(!Runtime::Current()->IsStarted() || (new_runtime_name) != nullptr); \ - qpoints->p ## entry_point_name = reinterpret_cast<void(*)()>(new_runtime_name); + qpoints->p ## entry_point_name = reinterpret_cast<void*>(new_runtime_name); STRING_INIT_LIST(SET_ENTRY_POINT) #undef SET_ENTRY_POINT } |