summaryrefslogtreecommitdiff
path: root/compiler/utils/jni_macro_assembler.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2024-02-09 10:10:18 +0100
committer VladimĂ­r Marko <vmarko@google.com> 2024-02-12 15:34:29 +0000
commit8e38dd55e9362fe3469d03268c8e7c231f68b316 (patch)
treee15ad54c5397e7c4daebcf5822563b747af1572f /compiler/utils/jni_macro_assembler.cc
parenta74f282bb65b838541fd1fb75f584f8a08a67b72 (diff)
JNI: Keep previous LRT state in callee-save reg.
Golem results for art-opt-cc (higher is better): linux-armv7 (Odroid-C2) before after NativeDowncallStaticFast 21.622 21.923 (+1.395%) NativeDowncallStaticFast6 18.491 18.719 (+1.236%) NativeDowncallStaticFastRefs6 15.347 15.504 (+1.025%) NativeDowncallVirtualFast 20.741 21.319 (+2.787%) NativeDowncallVirtualFast6 18.953 19.183 (+1.218%) NativeDowncallVirtualFastRefs6 15.500 15.663 (+1.053%) NativeDowncallStaticNormal 14.620 14.757 (0.9495%) NativeDowncallStaticNormal6 13.120 13.235 (+0.8823%) NativeDowncallStaticNormalRefs6 11.454 11.538 (+0.7258%) NativeDowncallVirtualNormal 14.216 14.486 (+1.898%) NativeDowncallVirtualNormal6 13.347 13.466 (+0.8978%) NativeDowncallVirtualNormalRefs6 11.538 11.628 (+0.7752%) linux-armv7 (Raspberry Pi 4) before after NativeDowncallStaticFast 43.305 42.331 (-2.250%) NativeDowncallStaticFast6 35.608 37.369 (+4.945%) NativeDowncallStaticFastRefs6 31.390 31.793 (+1.285%) NativeDowncallVirtualFast 33.814 31.825 (-5.882%) NativeDowncallVirtualFast6 34.311 36.445 (+6.220%) NativeDowncallVirtualFastRefs6 31.762 32.419 (+2.069%) NativeDowncallStaticNormal 13.848 14.244 (+2.859%) NativeDowncallStaticNormal6 13.592 13.725 (+0.9804%) NativeDowncallStaticNormalRefs6 12.671 12.536 (-1.061%) NativeDowncallVirtualNormal 13.979 13.848 (-0.9397%) NativeDowncallVirtualNormal6 13.242 13.592 (+2.647%) NativeDowncallVirtualNormalRefs6 12.364 12.358 (-0.094%) linux-armv8 (Odroid-C2) before after NativeDowncallStaticFast 24.752 25.160 (+1.648%) NativeDowncallStaticFast6 22.571 22.908 (+1.494%) NativeDowncallStaticFastRefs6 19.183 19.183 (unchanged) NativeDowncallVirtualFast 21.622 22.244 (+2.879%) NativeDowncallVirtualFast6 21.319 21.934 (+2.887%) NativeDowncallVirtualFastRefs6 17.448 17.848 (+2.296%) NativeDowncallStaticNormal 17.048 17.250 (+1.183%) NativeDowncallStaticNormal6 15.992 16.161 (+1.054%) NativeDowncallStaticNormalRefs6 14.085 14.216 (+0.9314%) NativeDowncallVirtualNormal 15.504 15.826 (+2.077%) NativeDowncallVirtualNormal6 15.347 15.663 (+2.064%) NativeDowncallVirtualNormalRefs6 13.466 13.586 (+0.8859%) linux-armv8 (Raspberry Pi 4) before after NativeDowncallStaticFast 38.366 40.796 (+6.335%) NativeDowncallStaticFast6 38.347 40.419 (+5.405%) NativeDowncallStaticFastRefs6 31.636 32.528 (+2.820%) NativeDowncallVirtualFast 35.201 37.406 (+6.266%) NativeDowncallVirtualFast6 34.000 35.626 (+4.782%) NativeDowncallVirtualFastRefs6 27.201 27.201 (unchanged) NativeDowncallStaticNormal 14.808 15.107 (+2.024%) NativeDowncallStaticNormal6 14.955 14.428 (-3.526%) NativeDowncallStaticNormalRefs6 14.174 13.855 (-2.254%) NativeDowncallVirtualNormal 14.735 14.307 (-2.904%) NativeDowncallVirtualNormal6 14.244 14.385 (+0.9921%) NativeDowncallVirtualNormalRefs6 14.105 14.244 (+0.9823%) linux-ia32 before after NativeDowncallStaticFast 223.66 233.77 (+4.516%) NativeDowncallStaticFast6 159.76 163.92 (+2.602%) NativeDowncallStaticFastRefs6 137.16 141.72 (+3.324%) NativeDowncallVirtualFast 211.79 224.05 (+5.791%) NativeDowncallVirtualFast6 149.85 154.00 (+2.769%) NativeDowncallVirtualFastRefs6 132.17 136.93 (+3.603%) NativeDowncallStaticNormal 51.091 51.091 (unchanged) NativeDowncallStaticNormal6 45.680 45.703 (+0.0497%) NativeDowncallStaticNormalRefs6 44.732 45.161 (+0.9606%) NativeDowncallVirtualNormal 50.450 50.450 (unchanged) NativeDowncallVirtualNormal6 45.161 45.161 (unchanged) NativeDowncallVirtualNormalRefs6 44.125 44.147 (+0.496%) linux-x64 before after NativeDowncallStaticFast 173.07 181.05 (+4.611%) NativeDowncallStaticFast6 156.50 161.34 (+3.092%) NativeDowncallStaticFastRefs6 130.37 131.61 (+0.9499%) NativeDowncallVirtualFast 169.00 174.83 (+3.447%) NativeDowncallVirtualFast6 148.13 149.35 (+0.8243%) NativeDowncallVirtualFastRefs6 127.31 130.11 (+2.200%) NativeDowncallStaticNormal 47.952 47.952 (unchanged) NativeDowncallStaticNormal6 46.789 46.789 (unchanged) NativeDowncallStaticNormalRefs6 44.643 44.643 (unchanged) NativeDowncallVirtualNormal 47.358 47.358 (unchanged) NativeDowncallVirtualNormal6 45.703 45.680 (-0.0497%) NativeDowncallVirtualNormalRefs6 44.643 44.643 (unchanged) Test: m test-art-host-gtest Test: testrunner.py --host Test: run-gtests.sh Test: testrunner.py --target --optimizing Bug: 172332525 Change-Id: I9606412c658cae8b7583308facf5ba095a982349
Diffstat (limited to 'compiler/utils/jni_macro_assembler.cc')
-rw-r--r--compiler/utils/jni_macro_assembler.cc66
1 files changed, 32 insertions, 34 deletions
diff --git a/compiler/utils/jni_macro_assembler.cc b/compiler/utils/jni_macro_assembler.cc
index e17d915ad7..1806180980 100644
--- a/compiler/utils/jni_macro_assembler.cc
+++ b/compiler/utils/jni_macro_assembler.cc
@@ -132,53 +132,51 @@ void JNIMacroAssembler<PointerSize::k64>::LoadStackReference(ManagedRegister des
FrameOffset offs);
template <PointerSize kPointerSize>
-void JNIMacroAssembler<kPointerSize>::PushLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg) {
+void JNIMacroAssembler<kPointerSize>::LoadLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg) {
constexpr size_t kLRTSegmentStateSize = sizeof(jni::LRTSegmentState);
- const MemberOffset jni_env_cookie_offset = JNIEnvExt::LocalRefCookieOffset(kPointerSize);
- const MemberOffset jni_env_segment_state_offset = JNIEnvExt::SegmentStateOffset(kPointerSize);
+ const MemberOffset previous_state_offset = JNIEnvExt::LrtPreviousStateOffset(kPointerSize);
+ const MemberOffset current_state_offset = JNIEnvExt::LrtSegmentStateOffset(kPointerSize);
- // Load the old cookie that we shall need to restore.
- Load(saved_cookie_reg, jni_env_reg, jni_env_cookie_offset, kLRTSegmentStateSize);
-
- // Set the cookie to the current segment state.
- Load(temp_reg, jni_env_reg, jni_env_segment_state_offset, kLRTSegmentStateSize);
- Store(jni_env_reg, jni_env_cookie_offset, temp_reg, kLRTSegmentStateSize);
+ Load(previous_state_reg, jni_env_reg, previous_state_offset, kLRTSegmentStateSize);
+ Load(current_state_reg, jni_env_reg, current_state_offset, kLRTSegmentStateSize);
}
template
-void JNIMacroAssembler<PointerSize::k32>::PushLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg);
+void JNIMacroAssembler<PointerSize::k32>::LoadLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg);
template
-void JNIMacroAssembler<PointerSize::k64>::PushLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg);
+void JNIMacroAssembler<PointerSize::k64>::LoadLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg);
template <PointerSize kPointerSize>
-void JNIMacroAssembler<kPointerSize>::PopLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg) {
+void JNIMacroAssembler<kPointerSize>::StoreLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg) {
constexpr size_t kLRTSegmentStateSize = sizeof(jni::LRTSegmentState);
- const MemberOffset jni_env_cookie_offset = JNIEnvExt::LocalRefCookieOffset(kPointerSize);
- const MemberOffset jni_env_segment_state_offset = JNIEnvExt::SegmentStateOffset(kPointerSize);
-
- // Set the current segment state to the current cookie.
- Load(temp_reg, jni_env_reg, jni_env_cookie_offset, kLRTSegmentStateSize);
- Store(jni_env_reg, jni_env_segment_state_offset, temp_reg, kLRTSegmentStateSize);
+ const MemberOffset previous_state_offset = JNIEnvExt::LrtPreviousStateOffset(kPointerSize);
+ const MemberOffset segment_state_offset = JNIEnvExt::LrtSegmentStateOffset(kPointerSize);
- // Restore the cookie to the saved value.
- Store(jni_env_reg, jni_env_cookie_offset, saved_cookie_reg, kLRTSegmentStateSize);
+ Store(jni_env_reg, previous_state_offset, previous_state_reg, kLRTSegmentStateSize);
+ Store(jni_env_reg, segment_state_offset, current_state_reg, kLRTSegmentStateSize);
}
template
-void JNIMacroAssembler<PointerSize::k32>::PopLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg);
+void JNIMacroAssembler<PointerSize::k32>::StoreLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg);
template
-void JNIMacroAssembler<PointerSize::k64>::PopLocalReferenceFrame(ManagedRegister jni_env_reg,
- ManagedRegister saved_cookie_reg,
- ManagedRegister temp_reg);
+void JNIMacroAssembler<PointerSize::k64>::StoreLocalReferenceTableStates(
+ ManagedRegister jni_env_reg,
+ ManagedRegister previous_state_reg,
+ ManagedRegister current_state_reg);
} // namespace art