diff options
author | 2023-10-24 11:57:00 +0200 | |
---|---|---|
committer | 2023-10-25 11:21:10 +0000 | |
commit | 4716b51ca0324f3a9e705e9accc8aa9fb4aaf5b5 (patch) | |
tree | 6419f31ce38f38f98155cd0f1c6f0bee39150a21 /runtime/arch/quick_field_entrypoints.S | |
parent | 02d6df67fa97d34236e96863b27aa260a9ea4244 (diff) |
Fix and clean up field get/set entrypoints.
Fix `is_ref` argument for `*get_obj*` deoptimization.
Test: m test-art-host-gtest # x86, x86-64
Test: testrunner.py --host --optimizing # x86, x86-64
Test: testrunner.py --target --optimizing # arm, arm64, riscv64
Bug: 283082089
Change-Id: I1f0c5e6233cb14c8b3c2149a756e8f72e84379e0
Diffstat (limited to 'runtime/arch/quick_field_entrypoints.S')
-rw-r--r-- | runtime/arch/quick_field_entrypoints.S | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/runtime/arch/quick_field_entrypoints.S b/runtime/arch/quick_field_entrypoints.S new file mode 100644 index 0000000000..0bea80340d --- /dev/null +++ b/runtime/arch/quick_field_entrypoints.S @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Note: Functions `art{Get,Set}<Kind>{Static,Instance}FromCompiledCode` are +// defined with a macro in runtime/entrypoints/quick/quick_field_entrypoints.cc. + +.macro GENERATE_STATIC_FIELD_GETTERS +ONE_ARG_DOWNCALL art_quick_get_boolean_static, \ + artGetBooleanStaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get_byte_static, \ + artGetByteStaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get_char_static, \ + artGetCharStaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get_short_static, \ + artGetShortStaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get32_static, \ + artGet32StaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get_obj_static, \ + artGetObjStaticFromCompiledCode, \ + RETURN_REF_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +ONE_ARG_DOWNCALL art_quick_get64_static, \ + artGet64StaticFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +.endm + +.macro GENERATE_INSTANCE_FIELD_GETTERS +TWO_ARG_DOWNCALL art_quick_get_boolean_instance, \ + artGetBooleanInstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get_byte_instance, \ + artGetByteInstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get_char_instance, \ + artGetCharInstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get_short_instance, \ + artGetShortInstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get32_instance, \ + artGet32InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get_obj_instance, \ + artGetObjInstanceFromCompiledCode, \ + RETURN_REF_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +TWO_ARG_DOWNCALL art_quick_get64_instance, \ + artGet64InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_OR_DELIVER_PENDING_EXCEPTION +.endm + +.macro GENERATE_STATIC_FIELD_SETTERS emit64 = 1 +TWO_ARG_DOWNCALL art_quick_set8_static, \ + artSet8StaticFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +TWO_ARG_DOWNCALL art_quick_set16_static, \ + artSet16StaticFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +TWO_ARG_DOWNCALL art_quick_set32_static, \ + artSet32StaticFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +TWO_ARG_DOWNCALL art_quick_set_obj_static, \ + artSetObjStaticFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +.if \emit64 +TWO_ARG_DOWNCALL art_quick_set64_static, \ + artSet64StaticFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +.endif +.endm + +.macro GENERATE_INSTANCE_FIELD_SETTERS emit64 = 1 +THREE_ARG_DOWNCALL art_quick_set8_instance, \ + artSet8InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +THREE_ARG_DOWNCALL art_quick_set16_instance, \ + artSet16InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +THREE_ARG_DOWNCALL art_quick_set32_instance, \ + artSet32InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +THREE_ARG_DOWNCALL art_quick_set_obj_instance, \ + artSetObjInstanceFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +.if \emit64 +THREE_ARG_DOWNCALL art_quick_set64_instance, \ + artSet64InstanceFromCompiledCode, \ + RETURN_OR_DEOPT_IF_INT_RESULT_IS_ZERO_OR_DELIVER +.endif +.endm + +.macro GENERATE_FIELD_ENTRYPOINTS + GENERATE_STATIC_FIELD_GETTERS + GENERATE_INSTANCE_FIELD_GETTERS + GENERATE_STATIC_FIELD_SETTERS + GENERATE_INSTANCE_FIELD_SETTERS +.endm |