diff options
author | 2016-08-03 18:49:58 +0100 | |
---|---|---|
committer | 2016-08-10 14:19:49 +0100 | |
commit | fd36f1f927c138575184a1f4c7ea4e7abb3e2dbf (patch) | |
tree | 2debb35c9193ac019071e0625986698ccbcaabb8 | |
parent | c218427ab96e521e0c4e9a3ffeb87e6c57eea0a5 (diff) |
Rename callee save enumerators.
And related image method enumerators, macros, etc.
Clean up some entrypoint assembly comments.
This is a follow-up to
https://android-review.googlesource.com/252348
Test: Run ART test suite on host and Nexus 9.
Bug: 30212852
Change-Id: I2707342d4255c88c547655be83ed97a67e12ae9e
35 files changed, 932 insertions, 956 deletions
diff --git a/compiler/exception_test.cc b/compiler/exception_test.cc index e2235345b7..86f91c5ac4 100644 --- a/compiler/exception_test.cc +++ b/compiler/exception_test.cc @@ -170,7 +170,7 @@ TEST_F(ExceptionTest, StackTraceElement) { Runtime* r = Runtime::Current(); r->SetInstructionSet(kRuntimeISA); ArtMethod* save_method = r->CreateCalleeSaveMethod(); - r->SetCalleeSaveMethod(save_method, Runtime::kSaveAll); + r->SetCalleeSaveMethod(save_method, Runtime::kSaveAllCalleeSaves); QuickMethodFrameInfo frame_info = r->GetRuntimeMethodFrameInfo(save_method); ASSERT_EQ(kStackAlignment, 16U); diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index 7c87a60084..efae4d0583 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -1373,11 +1373,12 @@ void ImageWriter::CalculateNewObjectOffsets() { image_methods_[ImageHeader::kResolutionMethod] = runtime->GetResolutionMethod(); image_methods_[ImageHeader::kImtConflictMethod] = runtime->GetImtConflictMethod(); image_methods_[ImageHeader::kImtUnimplementedMethod] = runtime->GetImtUnimplementedMethod(); - image_methods_[ImageHeader::kCalleeSaveMethod] = runtime->GetCalleeSaveMethod(Runtime::kSaveAll); - image_methods_[ImageHeader::kRefsOnlySaveMethod] = - runtime->GetCalleeSaveMethod(Runtime::kRefsOnly); - image_methods_[ImageHeader::kRefsAndArgsSaveMethod] = - runtime->GetCalleeSaveMethod(Runtime::kRefsAndArgs); + image_methods_[ImageHeader::kSaveAllCalleeSavesMethod] = + runtime->GetCalleeSaveMethod(Runtime::kSaveAllCalleeSaves); + image_methods_[ImageHeader::kSaveRefsOnlyMethod] = + runtime->GetCalleeSaveMethod(Runtime::kSaveRefsOnly); + image_methods_[ImageHeader::kSaveRefsAndArgsMethod] = + runtime->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs); image_methods_[ImageHeader::kSaveEverythingMethod] = runtime->GetCalleeSaveMethod(Runtime::kSaveEverything); // Visit image methods first to have the main runtime methods in the first image. diff --git a/oatdump/oatdump.cc b/oatdump/oatdump.cc index a0def615b0..77730b9255 100644 --- a/oatdump/oatdump.cc +++ b/oatdump/oatdump.cc @@ -73,9 +73,9 @@ const char* image_methods_descriptions_[] = { "kResolutionMethod", "kImtConflictMethod", "kImtUnimplementedMethod", - "kCalleeSaveMethod", - "kRefsOnlySaveMethod", - "kRefsAndArgsSaveMethod", + "kSaveAllCalleeSavesMethod", + "kSaveRefsOnlyMethod", + "kSaveRefsAndArgsMethod", "kSaveEverythingMethod", }; diff --git a/runtime/arch/arch_test.cc b/runtime/arch/arch_test.cc index 6d80eb6198..a857976021 100644 --- a/runtime/arch/arch_test.cc +++ b/runtime/arch/arch_test.cc @@ -63,137 +63,97 @@ TEST_F(ArchTest, CheckCommonOffsetsAndSizes) { // Grab architecture specific constants. namespace arm { #include "arch/arm/asm_support_arm.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace arm namespace arm64 { #include "arch/arm64/asm_support_arm64.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace arm64 namespace mips { #include "arch/mips/asm_support_mips.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace mips namespace mips64 { #include "arch/mips64/asm_support_mips64.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace mips64 namespace x86 { #include "arch/x86/asm_support_x86.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace x86 namespace x86_64 { #include "arch/x86_64/asm_support_x86_64.h" -static constexpr size_t kFrameSizeSaveAllCalleeSave = FRAME_SIZE_SAVE_ALL_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsOnlyCalleeSave = FRAME_SIZE_REFS_ONLY_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_ONLY_CALLEE_SAVE -static constexpr size_t kFrameSizeRefsAndArgsCalleeSave = FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE; -#undef FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE -static constexpr size_t kFrameSizeSaveEverythingCalleeSave = FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE; -#undef FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE +static constexpr size_t kFrameSizeSaveAllCalleeSaves = FRAME_SIZE_SAVE_ALL_CALLEE_SAVES; +#undef FRAME_SIZE_SAVE_ALL_CALLEE_SAVES +static constexpr size_t kFrameSizeSaveRefsOnly = FRAME_SIZE_SAVE_REFS_ONLY; +#undef FRAME_SIZE_SAVE_REFS_ONLY +static constexpr size_t kFrameSizeSaveRefsAndArgs = FRAME_SIZE_SAVE_REFS_AND_ARGS; +#undef FRAME_SIZE_SAVE_REFS_AND_ARGS +static constexpr size_t kFrameSizeSaveEverything = FRAME_SIZE_SAVE_EVERYTHING; +#undef FRAME_SIZE_SAVE_EVERYTHING } // namespace x86_64 // Check architecture specific constants are sound. -TEST_F(ArchTest, ARM) { - CheckFrameSize(InstructionSet::kArm, Runtime::kSaveAll, arm::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kArm, Runtime::kRefsOnly, arm::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kArm, Runtime::kRefsAndArgs, arm::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kArm, - Runtime::kSaveEverything, - arm::kFrameSizeSaveEverythingCalleeSave); -} - - -TEST_F(ArchTest, ARM64) { - CheckFrameSize(InstructionSet::kArm64, Runtime::kSaveAll, arm64::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kArm64, Runtime::kRefsOnly, arm64::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kArm64, Runtime::kRefsAndArgs, - arm64::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kArm64, - Runtime::kSaveEverything, - arm64::kFrameSizeSaveEverythingCalleeSave); -} - -TEST_F(ArchTest, MIPS) { - CheckFrameSize(InstructionSet::kMips, Runtime::kSaveAll, mips::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kMips, Runtime::kRefsOnly, mips::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kMips, - Runtime::kRefsAndArgs, - mips::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kMips, - Runtime::kSaveEverything, - mips::kFrameSizeSaveEverythingCalleeSave); -} - -TEST_F(ArchTest, MIPS64) { - CheckFrameSize(InstructionSet::kMips64, Runtime::kSaveAll, mips64::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kMips64, Runtime::kRefsOnly, mips64::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kMips64, - Runtime::kRefsAndArgs, - mips64::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kMips64, - Runtime::kSaveEverything, - mips64::kFrameSizeSaveEverythingCalleeSave); -} - -TEST_F(ArchTest, X86) { - CheckFrameSize(InstructionSet::kX86, Runtime::kSaveAll, x86::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kX86, Runtime::kRefsOnly, x86::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kX86, Runtime::kRefsAndArgs, x86::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kX86, - Runtime::kSaveEverything, - x86::kFrameSizeSaveEverythingCalleeSave); -} - -TEST_F(ArchTest, X86_64) { - CheckFrameSize(InstructionSet::kX86_64, Runtime::kSaveAll, x86_64::kFrameSizeSaveAllCalleeSave); - CheckFrameSize(InstructionSet::kX86_64, Runtime::kRefsOnly, x86_64::kFrameSizeRefsOnlyCalleeSave); - CheckFrameSize(InstructionSet::kX86_64, - Runtime::kRefsAndArgs, - x86_64::kFrameSizeRefsAndArgsCalleeSave); - CheckFrameSize(InstructionSet::kX86_64, - Runtime::kSaveEverything, - x86_64::kFrameSizeSaveEverythingCalleeSave); -} +#define TEST_ARCH(Arch, arch) \ + TEST_F(ArchTest, Arch) { \ + CheckFrameSize(InstructionSet::k##Arch, \ + Runtime::kSaveAllCalleeSaves, \ + arch::kFrameSizeSaveAllCalleeSaves); \ + CheckFrameSize(InstructionSet::k##Arch, \ + Runtime::kSaveRefsOnly, \ + arch::kFrameSizeSaveRefsOnly); \ + CheckFrameSize(InstructionSet::k##Arch, \ + Runtime::kSaveRefsAndArgs, \ + arch::kFrameSizeSaveRefsAndArgs); \ + CheckFrameSize(InstructionSet::k##Arch, \ + Runtime::kSaveEverything, \ + arch::kFrameSizeSaveEverything); \ + } +TEST_ARCH(Arm, arm) +TEST_ARCH(Arm64, arm64) +TEST_ARCH(Mips, mips) +TEST_ARCH(Mips64, mips64) +TEST_ARCH(X86, x86) +TEST_ARCH(X86_64, x86_64) } // namespace art diff --git a/runtime/arch/arm/asm_support_arm.h b/runtime/arch/arm/asm_support_arm.h index 67f6f7a4c4..c03bcae526 100644 --- a/runtime/arch/arm/asm_support_arm.h +++ b/runtime/arch/arm/asm_support_arm.h @@ -19,10 +19,10 @@ #include "asm_support.h" -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE 112 -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE 32 -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE 112 -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE 192 +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES 112 +#define FRAME_SIZE_SAVE_REFS_ONLY 32 +#define FRAME_SIZE_SAVE_REFS_AND_ARGS 112 +#define FRAME_SIZE_SAVE_EVERYTHING 192 // Flag for enabling R4 optimization in arm runtime // #define ARM_R4_SUSPEND_FLAG diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S index 42418ad2ff..0fcf866e18 100644 --- a/runtime/arch/arm/quick_entrypoints_arm.S +++ b/runtime/arch/arm/quick_entrypoints_arm.S @@ -42,30 +42,31 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) */ -.macro SETUP_SAVE_ALL_CALLEE_SAVE_FRAME rTemp +.macro SETUP_SAVE_ALL_CALLEE_SAVES_FRAME rTemp SPILL_ALL_CALLEE_SAVE_GPRS @ 9 words (36 bytes) of callee saves. vpush {s16-s31} @ 16 words (64 bytes) of floats. .cfi_adjust_cfa_offset 64 sub sp, #12 @ 3 words of space, bottom word will hold Method* .cfi_adjust_cfa_offset 12 RUNTIME_CURRENT1 \rTemp @ Load Runtime::Current into rTemp. - ldr \rTemp, [\rTemp, #RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET] @ rTemp is kSaveAll Method*. + @ Load kSaveAllCalleeSaves Method* into rTemp. + ldr \rTemp, [\rTemp, #RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET] str \rTemp, [sp, #0] @ Place Method* at bottom of stack. str sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @ Place sp in Thread::Current()->top_quick_frame. // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 36 + 64 + 12) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(ARM) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 36 + 64 + 12) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(ARM) size not as expected." #endif .endm /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly). + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly). */ -.macro SETUP_REFS_ONLY_CALLEE_SAVE_FRAME rTemp +.macro SETUP_SAVE_REFS_ONLY_FRAME rTemp push {r5-r8, r10-r11, lr} @ 7 words of callee saves .cfi_adjust_cfa_offset 28 .cfi_rel_offset r5, 0 @@ -78,17 +79,18 @@ sub sp, #4 @ bottom word will hold Method* .cfi_adjust_cfa_offset 4 RUNTIME_CURRENT2 \rTemp @ Load Runtime::Current into rTemp. - ldr \rTemp, [\rTemp, #RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET] @ rTemp is kRefsOnly Method*. + @ Load kSaveRefsOnly Method* into rTemp. + ldr \rTemp, [\rTemp, #RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET] str \rTemp, [sp, #0] @ Place Method* at bottom of stack. str sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @ Place sp in Thread::Current()->top_quick_frame. // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 28 + 4) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(ARM) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 28 + 4) +#error "FRAME_SIZE_SAVE_REFS_ONLY(ARM) size not as expected." #endif .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME add sp, #4 @ bottom word holds Method* .cfi_adjust_cfa_offset -4 pop {r5-r8, r10-r11, lr} @ 7 words of callee saves @@ -102,16 +104,16 @@ .cfi_adjust_cfa_offset -28 .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN + RESTORE_SAVE_REFS_ONLY_FRAME bx lr @ return .endm /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY push {r1-r3, r5-r8, r10-r11, lr} @ 10 words of callee saves and args. .cfi_adjust_cfa_offset 40 .cfi_rel_offset r1, 0 @@ -126,30 +128,30 @@ .cfi_rel_offset lr, 36 vpush {s0-s15} @ 16 words of float args. .cfi_adjust_cfa_offset 64 - sub sp, #8 @ 2 words of space, bottom word will hold Method* + sub sp, #8 @ 2 words of space, alignment padding and Method* .cfi_adjust_cfa_offset 8 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 40 + 64 + 8) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(ARM) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 40 + 64 + 8) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(ARM) size not as expected." #endif .endm -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME rTemp - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME rTemp + SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY RUNTIME_CURRENT3 \rTemp @ Load Runtime::Current into rTemp. - @ rTemp is kRefsAndArgs Method*. - ldr \rTemp, [\rTemp, #RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET] + @ Load kSaveRefsAndArgs Method* into rTemp. + ldr \rTemp, [\rTemp, #RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET] str \rTemp, [sp, #0] @ Place Method* at bottom of stack. str sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @ Place sp in Thread::Current()->top_quick_frame. .endm -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_R0 - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY - str r0, [sp, #0] @ Store ArtMethod* to bottom of stack. +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_R0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY + str r0, [sp, #0] @ Store ArtMethod* to bottom of stack. str sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @ Place sp in Thread::Current()->top_quick_frame. .endm -.macro RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_AND_ARGS_FRAME add sp, #8 @ rewind sp .cfi_adjust_cfa_offset -8 vpop {s0-s15} @@ -172,7 +174,7 @@ * Macro that sets up the callee save frame to conform with * Runtime::CreateCalleeSaveMethod(kSaveEverything) */ -.macro SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME rTemp +.macro SETUP_SAVE_EVERYTHING_FRAME rTemp push {r0-r12, lr} @ 14 words of callee saves and args. .cfi_adjust_cfa_offset 56 .cfi_rel_offset r0, 0 @@ -194,18 +196,18 @@ sub sp, #8 @ 2 words of space, alignment padding and Method* .cfi_adjust_cfa_offset 8 RUNTIME_CURRENT1 \rTemp @ Load Runtime::Current into rTemp. - @ Load kSaveEverything Method* to rTemp. - ldr \rTemp, [\rTemp, #RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET] - str \rTemp, [sp, #0] @ Store kSaveEverything Method* to the bottom of the stack. + @ Load kSaveEverything Method* into rTemp. + ldr \rTemp, [\rTemp, #RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET] + str \rTemp, [sp, #0] @ Place Method* at bottom of stack. str sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @ Place sp in Thread::Current()->top_quick_frame. // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 56 + 128 + 8) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(ARM) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 56 + 128 + 8) +#error "FRAME_SIZE_SAVE_EVERYTHING(ARM) size not as expected." #endif .endm -.macro RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_EVERYTHING_FRAME add sp, #8 @ rewind sp .cfi_adjust_cfa_offset -8 vpop {s0-s31} @@ -246,7 +248,7 @@ .macro DELIVER_PENDING_EXCEPTION .fnend .fnstart - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r0 @ save callee saves for throw + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 @ save callee saves for throw mov r0, r9 @ pass Thread::Current b artDeliverPendingExceptionFromCode @ artDeliverPendingExceptionFromCode(Thread*) .endm @@ -254,7 +256,7 @@ .macro NO_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r0 @ save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 @ save all registers as basis for long jump context mov r0, r9 @ pass Thread::Current b \cxx_name @ \cxx_name(Thread*) END \c_name @@ -263,7 +265,7 @@ END \c_name .macro ONE_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r1 @ save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r1 @ save all registers as basis for long jump context mov r1, r9 @ pass Thread::Current b \cxx_name @ \cxx_name(Thread*) END \c_name @@ -272,7 +274,7 @@ END \c_name .macro TWO_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r2 @ save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r2 @ save all registers as basis for long jump context mov r2, r9 @ pass Thread::Current b \cxx_name @ \cxx_name(Thread*) END \c_name @@ -304,11 +306,11 @@ END \c_name .macro ONE_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves in case of GC - ldr r1, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves in case of GC + ldr r1, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer mov r2, r9 @ pass Thread::Current bl \entrypoint @ (uint32_t field_idx, const Method* referrer, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -316,11 +318,11 @@ END \name .macro TWO_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ save callee saves in case of GC - ldr r2, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC + ldr r2, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer mov r3, r9 @ pass Thread::Current bl \entrypoint @ (field_idx, Object*, referrer, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -328,14 +330,14 @@ END \name .macro THREE_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r3 @ save callee saves in case of GC - ldr r3, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + SETUP_SAVE_REFS_ONLY_FRAME r3 @ save callee saves in case of GC + ldr r3, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer str r9, [sp, #-16]! @ expand the frame and pass Thread::Current .cfi_adjust_cfa_offset 16 bl \entrypoint @ (field_idx, Object*, new_val, referrer, Thread*) add sp, #16 @ release out args .cfi_adjust_cfa_offset -16 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME @ TODO: we can clearly save an add here + RESTORE_SAVE_REFS_ONLY_FRAME @ TODO: we can clearly save an add here \return END \name .endm @@ -400,12 +402,12 @@ ONE_ARG_RUNTIME_EXCEPTION art_quick_throw_no_such_method, artThrowNoSuchMethodFr */ .macro INVOKE_TRAMPOLINE_BODY cxx_name .extern \cxx_name - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME r2 @ save callee saves in case allocation triggers GC + SETUP_SAVE_REFS_AND_ARGS_FRAME r2 @ save callee saves in case allocation triggers GC mov r2, r9 @ pass Thread::Current mov r3, sp bl \cxx_name @ (method_idx, this, Thread*, SP) mov r12, r1 @ save Method*->code_ - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME cbz r0, 1f @ did we find the target? if not go to exception delivery bx r12 @ tail call to target 1: @@ -606,19 +608,19 @@ ENTRY art_quick_lock_object .Llock_strex_fail: b .Lretry_lock @ retry .Lslow_lock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves in case we block mov r1, r9 @ pass Thread::Current bl artLockObjectFromCode @ (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_lock_object ENTRY art_quick_lock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves in case we block mov r1, r9 @ pass Thread::Current bl artLockObjectFromCode @ (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_lock_object_no_inline @@ -672,20 +674,20 @@ ENTRY art_quick_unlock_object b .Lretry_unlock @ retry .Lslow_unlock: @ save callee saves in case exception allocation triggers GC - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 + SETUP_SAVE_REFS_ONLY_FRAME r1 mov r1, r9 @ pass Thread::Current bl artUnlockObjectFromCode @ (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_unlock_object ENTRY art_quick_unlock_object_no_inline @ save callee saves in case exception allocation triggers GC - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 + SETUP_SAVE_REFS_ONLY_FRAME r1 mov r1, r9 @ pass Thread::Current bl artUnlockObjectFromCode @ (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_unlock_object_no_inline @@ -717,7 +719,7 @@ ENTRY art_quick_check_cast .cfi_restore r0 .cfi_restore r1 .cfi_restore lr - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r2 @ save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r2 @ save all registers as basis for long jump context mov r2, r9 @ pass Thread::Current b artThrowClassCastException @ (Class*, Class*, Thread*) bkpt @@ -859,7 +861,7 @@ ENTRY art_quick_aput_obj .Lthrow_array_store_exception: pop {r0-r2, lr} /* No need to repeat restore cfi directives, the ones above apply here. */ - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r3 + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r3 mov r1, r2 mov r2, r9 @ pass Thread::Current b artThrowArrayStoreException @ (Class*, Class*, Thread*) @@ -870,10 +872,10 @@ END art_quick_aput_obj .macro ONE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves in case of GC mov r1, r9 @ pass Thread::Current bl \entrypoint @ (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -882,10 +884,10 @@ END \name .macro TWO_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC mov r2, r9 @ pass Thread::Current bl \entrypoint @ (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -894,11 +896,11 @@ END \name .macro THREE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r3 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r3 @ save callee saves in case of GC mov r3, r9 @ pass Thread::Current @ (uint32_t type_idx, Method* method, int32_t component_count, Thread*) bl \entrypoint - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -907,13 +909,13 @@ END \name .macro FOUR_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r12 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r12 @ save callee saves in case of GC str r9, [sp, #-16]! @ expand the frame and pass Thread::Current .cfi_adjust_cfa_offset 16 bl \entrypoint add sp, #16 @ strip the extra frame .cfi_adjust_cfa_offset -16 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -936,12 +938,12 @@ ONE_ARG_REF_DOWNCALL art_quick_get_obj_static, artGetObjStaticFromCode, RETURN_O */ .extern artGet64StaticFromCode ENTRY art_quick_get64_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ save callee saves in case of GC - ldr r1, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC + ldr r1, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer mov r2, r9 @ pass Thread::Current bl artGet64StaticFromCode @ (uint32_t field_idx, const Method* referrer, Thread*) ldr r2, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_ - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME cbnz r2, 1f @ success if no exception pending bx lr @ return on success 1: @@ -962,12 +964,12 @@ TWO_ARG_REF_DOWNCALL art_quick_get_obj_instance, artGetObjInstanceFromCode, RETU */ .extern artGet64InstanceFromCode ENTRY art_quick_get64_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ save callee saves in case of GC - ldr r2, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC + ldr r2, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer mov r3, r9 @ pass Thread::Current bl artGet64InstanceFromCode @ (field_idx, Object*, referrer, Thread*) ldr r2, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_ - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME cbnz r2, 1f @ success if no exception pending bx lr @ return on success 1: @@ -987,15 +989,15 @@ TWO_ARG_REF_DOWNCALL art_quick_set_obj_static, artSetObjStaticFromCode, RETURN_I */ .extern artSet64StaticFromCode ENTRY art_quick_set64_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves in case of GC @ r2:r3 contain the wide argument - ldr r1, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + ldr r1, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer str r9, [sp, #-16]! @ expand the frame and pass Thread::Current .cfi_adjust_cfa_offset 16 bl artSet64StaticFromCode @ (field_idx, referrer, new_val, Thread*) add sp, #16 @ release out args .cfi_adjust_cfa_offset -16 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME @ TODO: we can clearly save an add here + RESTORE_SAVE_REFS_ONLY_FRAME @ TODO: we can clearly save an add here RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_set64_static @@ -1012,9 +1014,9 @@ THREE_ARG_REF_DOWNCALL art_quick_set_obj_instance, artSetObjInstanceFromCode, RE */ .extern artSet64InstanceFromCode ENTRY art_quick_set64_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r12 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r12 @ save callee saves in case of GC @ r2:r3 contain the wide argument - ldr r12, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] @ pass referrer + ldr r12, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] @ pass referrer str r9, [sp, #-12]! @ expand the frame and pass Thread::Current .cfi_adjust_cfa_offset 12 str r12, [sp, #-4]! @ expand the frame and pass the referrer @@ -1022,7 +1024,7 @@ ENTRY art_quick_set64_instance bl artSet64InstanceFromCode @ (field_idx, Object*, new_val, Method* referrer, Thread*) add sp, #16 @ release out args .cfi_adjust_cfa_offset -16 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME @ TODO: we can clearly save an add here + RESTORE_SAVE_REFS_ONLY_FRAME @ TODO: we can clearly save an add here RETURN_IF_RESULT_IS_ZERO DELIVER_PENDING_EXCEPTION END art_quick_set64_instance @@ -1138,10 +1140,10 @@ ENTRY art_quick_alloc_object_rosalloc bx lr .Lart_quick_alloc_object_rosalloc_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME r2 @ save callee saves in case of GC mov r2, r9 @ pass Thread::Current bl artAllocObjectFromCodeRosAlloc @ (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END art_quick_alloc_object_rosalloc @@ -1223,10 +1225,10 @@ ENTRY art_quick_alloc_object_tlab ldr r2, [r2, r0, lsl #COMPRESSED_REFERENCE_SIZE_SHIFT] ALLOC_OBJECT_TLAB_FAST_PATH .Lart_quick_alloc_object_tlab_slow_path .Lart_quick_alloc_object_tlab_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 // Save callee saves in case of GC. + SETUP_SAVE_REFS_ONLY_FRAME r2 // Save callee saves in case of GC. mov r2, r9 // Pass Thread::Current. bl artAllocObjectFromCodeTLAB // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END art_quick_alloc_object_tlab @@ -1258,10 +1260,10 @@ ENTRY art_quick_alloc_object_region_tlab pop {r0, r1, r3, lr} b .Lart_quick_alloc_object_region_tlab_class_load_read_barrier_slow_path_exit .Lart_quick_alloc_object_region_tlab_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 // Save callee saves in case of GC. + SETUP_SAVE_REFS_ONLY_FRAME r2 // Save callee saves in case of GC. mov r2, r9 // Pass Thread::Current. bl artAllocObjectFromCodeRegionTLAB // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END art_quick_alloc_object_region_tlab @@ -1278,18 +1280,18 @@ ENTRY art_quick_test_suspend 1: mov rSUSPEND, #SUSPEND_CHECK_INTERVAL @ reset rSUSPEND to SUSPEND_CHECK_INTERVAL #endif - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME r0 @ save everything for GC stack crawl + SETUP_SAVE_EVERYTHING_FRAME r0 @ save everything for GC stack crawl mov r0, rSELF bl artTestSuspendFromCode @ (Thread*) - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME + RESTORE_SAVE_EVERYTHING_FRAME bx lr END art_quick_test_suspend ENTRY art_quick_implicit_suspend mov r0, rSELF - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r1 @ save callee saves for stack crawl + SETUP_SAVE_REFS_ONLY_FRAME r1 @ save callee saves for stack crawl bl artTestSuspendFromCode @ (Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN + RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN END art_quick_implicit_suspend /* @@ -1299,15 +1301,15 @@ END art_quick_implicit_suspend */ .extern artQuickProxyInvokeHandler ENTRY art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_R0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_R0 mov r2, r9 @ pass Thread::Current mov r3, sp @ pass SP blx artQuickProxyInvokeHandler @ (Method* proxy method, receiver, Thread*, SP) ldr r2, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_ // Tear down the callee-save frame. Skip arg registers. - add sp, #(FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) - .cfi_adjust_cfa_offset -(FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + add sp, #(FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY) + .cfi_adjust_cfa_offset -(FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY) + RESTORE_SAVE_REFS_ONLY_FRAME cbnz r2, 1f @ success if no exception is pending vmov d0, r0, r1 @ store into fpr, for when it's a fpr return... bx lr @ return on success @@ -1350,17 +1352,17 @@ END art_quick_imt_conflict_trampoline .extern artQuickResolutionTrampoline ENTRY art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME r2 + SETUP_SAVE_REFS_AND_ARGS_FRAME r2 mov r2, r9 @ pass Thread::Current mov r3, sp @ pass SP blx artQuickResolutionTrampoline @ (Method* called, receiver, Thread*, SP) cbz r0, 1f @ is code pointer null? goto exception mov r12, r0 ldr r0, [sp, #0] @ load resolved method in r0 - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME bx r12 @ tail-call into actual code 1: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END art_quick_resolution_trampoline @@ -1368,7 +1370,7 @@ END art_quick_resolution_trampoline * Called to do a generic JNI down-call */ ENTRY art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_R0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_R0 // Save rSELF mov r11, rSELF @@ -1435,16 +1437,16 @@ ENTRY art_quick_generic_jni_trampoline .cfi_def_cfa_register sp // Tear down the callee-save frame. Skip arg registers. - add sp, #FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-FRAME_SIZE_REFS_ONLY_CALLEE_SAVE - .cfi_adjust_cfa_offset -(FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + add sp, #FRAME_SIZE_SAVE_REFS_AND_ARGS-FRAME_SIZE_SAVE_REFS_ONLY + .cfi_adjust_cfa_offset -(FRAME_SIZE_SAVE_REFS_AND_ARGS-FRAME_SIZE_SAVE_REFS_ONLY) + RESTORE_SAVE_REFS_ONLY_FRAME // store into fpr, for when it's a fpr return... vmov d0, r0, r1 bx lr // ret // Undo the unwinding information from above since it doesn't apply below. .cfi_def_cfa_register r10 - .cfi_adjust_cfa_offset FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-FRAME_SIZE_REFS_ONLY_CALLEE_SAVE + .cfi_adjust_cfa_offset FRAME_SIZE_SAVE_REFS_AND_ARGS-FRAME_SIZE_SAVE_REFS_ONLY .Lexception_in_native: ldr sp, [r9, #THREAD_TOP_QUICK_FRAME_OFFSET] @@ -1455,15 +1457,15 @@ END art_quick_generic_jni_trampoline .extern artQuickToInterpreterBridge ENTRY art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME r1 + SETUP_SAVE_REFS_AND_ARGS_FRAME r1 mov r1, r9 @ pass Thread::Current mov r2, sp @ pass SP blx artQuickToInterpreterBridge @ (Method* method, Thread*, SP) ldr r2, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_ // Tear down the callee-save frame. Skip arg registers. - add sp, #(FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) - .cfi_adjust_cfa_offset -(FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + add sp, #(FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY) + .cfi_adjust_cfa_offset -(FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY) + RESTORE_SAVE_REFS_ONLY_FRAME cbnz r2, 1f @ success if no exception is pending vmov d0, r0, r1 @ store into fpr, for when it's a fpr return... bx lr @ return on success @@ -1478,22 +1480,22 @@ END art_quick_to_interpreter_bridge .extern artInstrumentationMethodExitFromCode ENTRY art_quick_instrumentation_entry @ Make stack crawlable and clobber r2 and r3 (post saving) - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME r2 - @ preserve r0 (not normally an arg) knowing there is a spare slot in kRefsAndArgs. + SETUP_SAVE_REFS_AND_ARGS_FRAME r2 + @ preserve r0 (not normally an arg) knowing there is a spare slot in kSaveRefsAndArgs. str r0, [sp, #4] mov r2, r9 @ pass Thread::Current mov r3, lr @ pass LR blx artInstrumentationMethodEntryFromCode @ (Method*, Object*, Thread*, LR) mov r12, r0 @ r12 holds reference to code ldr r0, [sp, #4] @ restore r0 - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME blx r12 @ call method with lr set to art_quick_instrumentation_exit @ Deliberate fall-through into art_quick_instrumentation_exit. .type art_quick_instrumentation_exit, #function .global art_quick_instrumentation_exit art_quick_instrumentation_exit: mov lr, #0 @ link register is to here, so clobber with 0 for later checks - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME r2 @ set up frame knowing r2 and r3 must be dead on exit + SETUP_SAVE_REFS_ONLY_FRAME r2 @ set up frame knowing r2 and r3 must be dead on exit mov r12, sp @ remember bottom of caller's frame push {r0-r1} @ save return value .cfi_adjust_cfa_offset 8 @@ -1532,7 +1534,7 @@ END art_quick_instrumentation_entry */ .extern artDeoptimize ENTRY art_quick_deoptimize - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r0 + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 mov r0, r9 @ Set up args. blx artDeoptimize @ artDeoptimize(Thread*) END art_quick_deoptimize @@ -1543,7 +1545,7 @@ END art_quick_deoptimize */ .extern artDeoptimizeFromCompiledCode ENTRY art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME r0 + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 mov r0, r9 @ Set up args. blx artDeoptimizeFromCompiledCode @ artDeoptimizeFromCompiledCode(Thread*) END art_quick_deoptimize_from_compiled_code diff --git a/runtime/arch/arm/quick_method_frame_info_arm.h b/runtime/arch/arm/quick_method_frame_info_arm.h index c474d2ee1c..4b23c77bc5 100644 --- a/runtime/arch/arm/quick_method_frame_info_arm.h +++ b/runtime/arch/arm/quick_method_frame_info_arm.h @@ -55,15 +55,15 @@ static constexpr uint32_t kArmCalleeSaveFpEverythingSpills = constexpr uint32_t ArmCalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kArmCalleeSaveAlwaysSpills | kArmCalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kArmCalleeSaveArgSpills : 0) | - (type == Runtime::kSaveAll ? kArmCalleeSaveAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kArmCalleeSaveArgSpills : 0) | + (type == Runtime::kSaveAllCalleeSaves ? kArmCalleeSaveAllSpills : 0) | (type == Runtime::kSaveEverything ? kArmCalleeSaveEverythingSpills : 0); } constexpr uint32_t ArmCalleeSaveFpSpills(Runtime::CalleeSaveType type) { return kArmCalleeSaveFpAlwaysSpills | kArmCalleeSaveFpRefSpills | - (type == Runtime::kRefsAndArgs ? kArmCalleeSaveFpArgSpills: 0) | - (type == Runtime::kSaveAll ? kArmCalleeSaveFpAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kArmCalleeSaveFpArgSpills: 0) | + (type == Runtime::kSaveAllCalleeSaves ? kArmCalleeSaveFpAllSpills : 0) | (type == Runtime::kSaveEverything ? kArmCalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/arch/arm64/asm_support_arm64.h b/runtime/arch/arm64/asm_support_arm64.h index 68d12e9306..5e7b51d02e 100644 --- a/runtime/arch/arm64/asm_support_arm64.h +++ b/runtime/arch/arm64/asm_support_arm64.h @@ -19,9 +19,9 @@ #include "asm_support.h" -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE 176 -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE 96 -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE 224 -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE 512 +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES 176 +#define FRAME_SIZE_SAVE_REFS_ONLY 96 +#define FRAME_SIZE_SAVE_REFS_AND_ARGS 224 +#define FRAME_SIZE_SAVE_EVERYTHING 512 #endif // ART_RUNTIME_ARCH_ARM64_ASM_SUPPORT_ARM64_H_ diff --git a/runtime/arch/arm64/quick_entrypoints_arm64.S b/runtime/arch/arm64/quick_entrypoints_arm64.S index 439f8d46b8..bdad966496 100644 --- a/runtime/arch/arm64/quick_entrypoints_arm64.S +++ b/runtime/arch/arm64/quick_entrypoints_arm64.S @@ -21,25 +21,25 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) */ -.macro SETUP_SAVE_ALL_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_ALL_CALLEE_SAVES_FRAME + // art::Runtime** xIP0 = &art::Runtime::instance_ adrp xIP0, :got:_ZN3art7Runtime9instance_E ldr xIP0, [xIP0, #:got_lo12:_ZN3art7Runtime9instance_E] // Our registers aren't intermixed - just spill in order. - ldr xIP0, [xIP0] // xIP0 = & (art::Runtime * art::Runtime.instance_) . + ldr xIP0, [xIP0] // art::Runtime* xIP0 = art::Runtime::instance_; - // xIP0 = (ArtMethod*) Runtime.instance_.callee_save_methods[kRefAndArgs] . - // Loads appropriate callee-save-method. - ldr xIP0, [xIP0, RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET ] + // ArtMethod* xIP0 = Runtime::instance_->callee_save_methods_[kSaveAllCalleeSaves]; + ldr xIP0, [xIP0, RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET] sub sp, sp, #176 .cfi_adjust_cfa_offset 176 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 176) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(ARM64) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 176) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(ARM64) size not as expected." #endif // Stack alignment filler [sp, #8]. @@ -74,7 +74,7 @@ .cfi_rel_offset x29, 160 .cfi_rel_offset x30, 168 - // Store ArtMethod* Runtime::callee_save_methods_[kRefsAndArgs]. + // Store ArtMethod* Runtime::callee_save_methods_[kSaveAllCalleeSaves]. str xIP0, [sp] // Place sp in Thread::Current()->top_quick_frame. mov xIP0, sp @@ -83,25 +83,25 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly). + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly). */ -.macro SETUP_REFS_ONLY_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_REFS_ONLY_FRAME + // art::Runtime** xIP0 = &art::Runtime::instance_ adrp xIP0, :got:_ZN3art7Runtime9instance_E ldr xIP0, [xIP0, #:got_lo12:_ZN3art7Runtime9instance_E] // Our registers aren't intermixed - just spill in order. - ldr xIP0, [xIP0] // xIP0 = & (art::Runtime * art::Runtime.instance_) . + ldr xIP0, [xIP0] // art::Runtime* xIP0 = art::Runtime::instance_; - // xIP0 = (ArtMethod*) Runtime.instance_.callee_save_methods[kRefOnly] . - // Loads appropriate callee-save-method. - ldr xIP0, [xIP0, RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET ] + // ArtMethod* xIP0 = Runtime::instance_->callee_save_methods_[kSaveRefOnly]; + ldr xIP0, [xIP0, RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET] sub sp, sp, #96 .cfi_adjust_cfa_offset 96 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 96) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(ARM64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 96) +#error "FRAME_SIZE_SAVE_REFS_ONLY(ARM64) size not as expected." #endif // GP callee-saves. @@ -126,7 +126,7 @@ .cfi_rel_offset x29, 80 .cfi_rel_offset x30, 88 - // Store ArtMethod* Runtime::callee_save_methods_[kRefsOnly]. + // Store ArtMethod* Runtime::callee_save_methods_[kSaveRefsOnly]. stp xIP0, x20, [sp] .cfi_rel_offset x20, 8 @@ -136,7 +136,7 @@ .endm // TODO: Probably no need to restore registers preserved by aapcs64. -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME // Callee-saves. ldr x20, [sp, #8] .cfi_restore x20 @@ -165,24 +165,24 @@ .cfi_adjust_cfa_offset -96 .endm -.macro POP_REFS_ONLY_CALLEE_SAVE_FRAME +.macro POP_SAVE_REFS_ONLY_FRAME add sp, sp, #96 .cfi_adjust_cfa_offset - 96 .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN + RESTORE_SAVE_REFS_ONLY_FRAME ret .endm -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL sub sp, sp, #224 .cfi_adjust_cfa_offset 224 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 224) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(ARM64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 224) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(ARM64) size not as expected." #endif // Stack alignment filler [sp, #8]. @@ -235,30 +235,31 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). * * TODO This is probably too conservative - saving FP & LR. */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME + // art::Runtime** xIP0 = &art::Runtime::instance_ adrp xIP0, :got:_ZN3art7Runtime9instance_E ldr xIP0, [xIP0, #:got_lo12:_ZN3art7Runtime9instance_E] // Our registers aren't intermixed - just spill in order. - ldr xIP0, [xIP0] // xIP0 = & (art::Runtime * art::Runtime.instance_) . + ldr xIP0, [xIP0] // art::Runtime* xIP0 = art::Runtime::instance_; - // xIP0 = (ArtMethod*) Runtime.instance_.callee_save_methods[kRefAndArgs] . - ldr xIP0, [xIP0, RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET ] + // ArtMethod* xIP0 = Runtime::instance_->callee_save_methods_[kSaveRefAndArgs]; + ldr xIP0, [xIP0, RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET] - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL + SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL - str xIP0, [sp] // Store ArtMethod* Runtime::callee_save_methods_[kRefsAndArgs] + str xIP0, [sp] // Store ArtMethod* Runtime::callee_save_methods_[kSaveRefsAndArgs]. // Place sp in Thread::Current()->top_quick_frame. mov xIP0, sp str xIP0, [xSELF, # THREAD_TOP_QUICK_FRAME_OFFSET] .endm -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_X0 - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_X0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL str x0, [sp, #0] // Store ArtMethod* to bottom of stack. // Place sp in Thread::Current()->top_quick_frame. mov xIP0, sp @@ -266,7 +267,7 @@ .endm // TODO: Probably no need to restore registers preserved by aapcs64. -.macro RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_AND_ARGS_FRAME // FP args. ldp d0, d1, [sp, #16] ldp d2, d3, [sp, #32] @@ -320,13 +321,13 @@ * Macro that sets up the callee save frame to conform with * Runtime::CreateCalleeSaveMethod(kSaveEverything) */ -.macro SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_EVERYTHING_FRAME sub sp, sp, #512 .cfi_adjust_cfa_offset 512 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 512) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(ARM64) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 512) +#error "FRAME_SIZE_SAVE_EVERYTHING(ARM64) size not as expected." #endif // Save FP registers. @@ -411,14 +412,14 @@ .cfi_rel_offset x29, 496 .cfi_rel_offset x30, 504 + // art::Runtime** xIP0 = &art::Runtime::instance_ adrp xIP0, :got:_ZN3art7Runtime9instance_E ldr xIP0, [xIP0, #:got_lo12:_ZN3art7Runtime9instance_E] - ldr xIP0, [xIP0] // xIP0 = & (art::Runtime * art::Runtime.instance_) . + ldr xIP0, [xIP0] // art::Runtime* xIP0 = art::Runtime::instance_; - // xIP0 = (ArtMethod*) Runtime.instance_.callee_save_methods[kSaveEverything] . - // Loads appropriate callee-save-method. - ldr xIP0, [xIP0, RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET ] + // ArtMethod* xIP0 = Runtime::instance_->callee_save_methods_[kSaveEverything]; + ldr xIP0, [xIP0, RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET] // Store ArtMethod* Runtime::callee_save_methods_[kSaveEverything]. str xIP0, [sp] @@ -427,7 +428,7 @@ str xIP0, [xSELF, # THREAD_TOP_QUICK_FRAME_OFFSET] .endm -.macro RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_EVERYTHING_FRAME // Restore FP registers. ldp d0, d1, [sp, #8] ldp d2, d3, [sp, #24] @@ -531,7 +532,7 @@ * exception is Thread::Current()->exception_ */ .macro DELIVER_PENDING_EXCEPTION - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME mov x0, xSELF // Point of no return. @@ -566,7 +567,7 @@ .macro NO_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context mov x0, xSELF // pass Thread::Current b \cxx_name // \cxx_name(Thread*) END \c_name @@ -575,7 +576,7 @@ END \c_name .macro ONE_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context. + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context. mov x1, xSELF // pass Thread::Current. b \cxx_name // \cxx_name(arg, Thread*). brk 0 @@ -585,7 +586,7 @@ END \c_name .macro TWO_ARG_RUNTIME_EXCEPTION c_name, cxx_name .extern \cxx_name ENTRY \c_name - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context mov x2, xSELF // pass Thread::Current b \cxx_name // \cxx_name(arg1, arg2, Thread*) brk 0 @@ -656,7 +657,7 @@ ONE_ARG_RUNTIME_EXCEPTION art_quick_throw_no_such_method, artThrowNoSuchMethodFr */ .macro INVOKE_TRAMPOLINE_BODY cxx_name .extern \cxx_name - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME // save callee saves in case allocation triggers GC + SETUP_SAVE_REFS_AND_ARGS_FRAME // save callee saves in case allocation triggers GC // Helper signature is always // (method_idx, *this_object, *caller_method, *self, sp) @@ -664,7 +665,7 @@ ONE_ARG_RUNTIME_EXCEPTION art_quick_throw_no_such_method, artThrowNoSuchMethodFr mov x3, sp bl \cxx_name // (method_idx, this, Thread*, SP) mov xIP0, x1 // save Method*->code_ - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME cbz x0, 1f // did we find the target? if not go to exception delivery br xIP0 // tail call to target 1: @@ -1315,18 +1316,18 @@ ENTRY art_quick_lock_object .Llock_stxr_fail: b .Lretry_lock // retry .Lslow_lock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case we block mov x1, xSELF // pass Thread::Current bl artLockObjectFromCode // (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_W0_IS_ZERO_OR_DELIVER END art_quick_lock_object ENTRY art_quick_lock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case we block mov x1, xSELF // pass Thread::Current bl artLockObjectFromCode // (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_W0_IS_ZERO_OR_DELIVER END art_quick_lock_object_no_inline @@ -1381,18 +1382,18 @@ ENTRY art_quick_unlock_object .Lunlock_stxr_fail: b .Lretry_unlock // retry .Lslow_unlock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case exception allocation triggers GC mov x1, xSELF // pass Thread::Current bl artUnlockObjectFromCode // (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_W0_IS_ZERO_OR_DELIVER END art_quick_unlock_object ENTRY art_quick_unlock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case exception allocation triggers GC mov x1, xSELF // pass Thread::Current bl artUnlockObjectFromCode // (Object* obj, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_W0_IS_ZERO_OR_DELIVER END art_quick_unlock_object_no_inline @@ -1437,7 +1438,7 @@ ENTRY art_quick_check_cast .cfi_restore x1 .cfi_adjust_cfa_offset -32 - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context mov x2, xSELF // pass Thread::Current b artThrowClassCastException // (Class*, Class*, Thread*) brk 0 // We should not return here... @@ -1625,7 +1626,7 @@ ENTRY art_quick_aput_obj .cfi_restore x1 .cfi_adjust_cfa_offset -32 - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME mov x1, x2 // Pass value. mov x2, xSELF // Pass Thread::Current. b artThrowArrayStoreException // (Object*, Object*, Thread*). @@ -1636,10 +1637,10 @@ END art_quick_aput_obj .macro ONE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x1, xSELF // pass Thread::Current bl \entrypoint // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1648,10 +1649,10 @@ END \name .macro TWO_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x2, xSELF // pass Thread::Current bl \entrypoint // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1660,10 +1661,10 @@ END \name .macro THREE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x3, xSELF // pass Thread::Current bl \entrypoint - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1672,10 +1673,10 @@ END \name .macro FOUR_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x4, xSELF // pass Thread::Current bl \entrypoint // - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return DELIVER_PENDING_EXCEPTION END \name @@ -1685,11 +1686,11 @@ END \name .macro ONE_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC - ldr x1, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] // Load referrer + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC + ldr x1, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] // Load referrer mov x2, xSELF // pass Thread::Current bl \entrypoint // (uint32_t type_idx, Method* method, Thread*, SP) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1697,11 +1698,11 @@ END \name .macro TWO_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC - ldr x2, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] // Load referrer + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC + ldr x2, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] // Load referrer mov x3, xSELF // pass Thread::Current bl \entrypoint - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1709,11 +1710,11 @@ END \name .macro THREE_ARG_REF_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC - ldr x3, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] // Load referrer + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC + ldr x3, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] // Load referrer mov x4, xSELF // pass Thread::Current bl \entrypoint - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME \return END \name .endm @@ -1771,12 +1772,12 @@ THREE_ARG_REF_DOWNCALL art_quick_set_obj_instance, artSetObjInstanceFromCode, RE // This is separated out as the argument order is different. .extern artSet64StaticFromCode ENTRY art_quick_set64_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC - ldr x1, [sp, #FRAME_SIZE_REFS_ONLY_CALLEE_SAVE] // Load referrer + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC + ldr x1, [sp, #FRAME_SIZE_SAVE_REFS_ONLY] // Load referrer // x2 contains the parameter mov x3, xSELF // pass Thread::Current bl artSet64StaticFromCode - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_W0_IS_ZERO_OR_DELIVER END art_quick_set64_static @@ -1901,10 +1902,10 @@ ENTRY art_quick_alloc_object_rosalloc mov x0, x3 // Set the return value and return. ret .Lart_quick_alloc_object_rosalloc_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x2, xSELF // pass Thread::Current bl artAllocObjectFromCodeRosAlloc // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END art_quick_alloc_object_rosalloc @@ -2055,10 +2056,10 @@ ENTRY art_quick_alloc_object_tlab ldr w2, [x2, x0, lsl #COMPRESSED_REFERENCE_SIZE_SHIFT] ALLOC_OBJECT_TLAB_FAST_PATH .Lart_quick_alloc_object_tlab_slow_path .Lart_quick_alloc_object_tlab_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // Save callee saves in case of GC. + SETUP_SAVE_REFS_ONLY_FRAME // Save callee saves in case of GC. mov x2, xSELF // Pass Thread::Current. bl artAllocObjectFromCodeTLAB // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END art_quick_alloc_object_tlab @@ -2105,10 +2106,10 @@ ENTRY \name add sp, sp, #32 b .Ldo_allocation\name .Lslow_path\name: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // Save callee saves in case of GC. + SETUP_SAVE_REFS_ONLY_FRAME // Save callee saves in case of GC. mov x2, xSELF // Pass Thread::Current. - bl \entrypoint // (uint32_t type_idx, Method* method, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + bl \entrypoint // (uint32_t type_idx, Method* method, Thread*) + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END \name .endm @@ -2165,10 +2166,10 @@ ENTRY \name // x1: int32_t component_count // x2: ArtMethod* method // x3: Thread* self - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves in case of GC mov x3, xSELF // pass Thread::Current bl \entrypoint - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER END \name .endm @@ -2182,18 +2183,18 @@ GENERATE_ALLOC_ARRAY_REGION_TLAB art_quick_alloc_array_resolved_region_tlab, art */ .extern artTestSuspendFromCode ENTRY art_quick_test_suspend - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME // save callee saves for stack crawl + SETUP_SAVE_EVERYTHING_FRAME // save callee saves for stack crawl mov x0, xSELF bl artTestSuspendFromCode // (Thread*) - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME + RESTORE_SAVE_EVERYTHING_FRAME ret END art_quick_test_suspend ENTRY art_quick_implicit_suspend mov x0, xSELF - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save callee saves for stack crawl + SETUP_SAVE_REFS_ONLY_FRAME // save callee saves for stack crawl bl artTestSuspendFromCode // (Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN + RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN END art_quick_implicit_suspend /* @@ -2203,17 +2204,17 @@ END art_quick_implicit_suspend */ .extern artQuickProxyInvokeHandler ENTRY art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_X0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_X0 mov x2, xSELF // pass Thread::Current mov x3, sp // pass SP bl artQuickProxyInvokeHandler // (Method* proxy method, receiver, Thread*, SP) ldr x2, [xSELF, THREAD_EXCEPTION_OFFSET] cbnz x2, .Lexception_in_proxy // success if no exception is pending - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME // Restore frame + RESTORE_SAVE_REFS_AND_ARGS_FRAME // Restore frame fmov d0, x0 // Store result in d0 in case it was float or double ret // return on success .Lexception_in_proxy: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END art_quick_proxy_invoke_handler @@ -2253,17 +2254,17 @@ ENTRY art_quick_imt_conflict_trampoline END art_quick_imt_conflict_trampoline ENTRY art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME mov x2, xSELF mov x3, sp bl artQuickResolutionTrampoline // (called, receiver, Thread*, SP) cbz x0, 1f mov xIP0, x0 // Remember returned code pointer in xIP0. ldr x0, [sp, #0] // artQuickResolutionTrampoline puts called method in *SP. - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME br xIP0 1: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END art_quick_resolution_trampoline @@ -2323,7 +2324,7 @@ END art_quick_resolution_trampoline * Called to do a generic JNI down-call */ ENTRY art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_X0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_X0 // Save SP , so we can have static CFI info. mov x28, sp @@ -2395,7 +2396,7 @@ ENTRY art_quick_generic_jni_trampoline .cfi_def_cfa_register sp // Tear down the callee-save frame. - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME // store into fpr, for when it's a fpr return... fmov d0, x0 @@ -2417,7 +2418,7 @@ END art_quick_generic_jni_trampoline * x1..x7, d0..d7 = arguments to that method. */ ENTRY art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME // Set up frame and save arguments. + SETUP_SAVE_REFS_AND_ARGS_FRAME // Set up frame and save arguments. // x0 will contain mirror::ArtMethod* method. mov x1, xSELF // How to get Thread::Current() ??? @@ -2427,7 +2428,7 @@ ENTRY art_quick_to_interpreter_bridge // mirror::ArtMethod** sp) bl artQuickToInterpreterBridge - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME // TODO: no need to restore arguments in this case. + RESTORE_SAVE_REFS_AND_ARGS_FRAME // TODO: no need to restore arguments in this case. fmov d0, x0 @@ -2440,7 +2441,7 @@ END art_quick_to_interpreter_bridge // .extern artInstrumentationMethodEntryFromCode ENTRY art_quick_instrumentation_entry - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME mov x20, x0 // Preserve method reference in a callee-save. @@ -2451,7 +2452,7 @@ ENTRY art_quick_instrumentation_entry mov xIP0, x0 // x0 = result of call. mov x0, x20 // Reload method reference. - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME // Note: will restore xSELF + RESTORE_SAVE_REFS_AND_ARGS_FRAME // Note: will restore xSELF adr xLR, art_quick_instrumentation_exit br xIP0 // Tail-call method with lr set to art_quick_instrumentation_exit. END art_quick_instrumentation_entry @@ -2460,7 +2461,7 @@ END art_quick_instrumentation_entry ENTRY art_quick_instrumentation_exit mov xLR, #0 // Clobber LR for later checks. - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // We need to save x0 and d0. We could use a callee-save from SETUP_REF_ONLY, but then // we would need to fully restore it. As there are a lot of callee-save registers, it seems @@ -2483,7 +2484,7 @@ ENTRY art_quick_instrumentation_exit ldr x0, [sp], 16 // Restore integer result, and drop stack area. .cfi_adjust_cfa_offset 16 - POP_REFS_ONLY_CALLEE_SAVE_FRAME + POP_SAVE_REFS_ONLY_FRAME br xIP0 // Tail-call out. END art_quick_instrumentation_exit @@ -2494,7 +2495,7 @@ END art_quick_instrumentation_exit */ .extern artDeoptimize ENTRY art_quick_deoptimize - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME mov x0, xSELF // Pass thread. bl artDeoptimize // artDeoptimize(Thread*) brk 0 @@ -2506,7 +2507,7 @@ END art_quick_deoptimize */ .extern artDeoptimizeFromCompiledCode ENTRY art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME mov x0, xSELF // Pass thread. bl artDeoptimizeFromCompiledCode // artDeoptimizeFromCompiledCode(Thread*) brk 0 diff --git a/runtime/arch/arm64/quick_method_frame_info_arm64.h b/runtime/arch/arm64/quick_method_frame_info_arm64.h index 188e46e72d..36f283bc91 100644 --- a/runtime/arch/arm64/quick_method_frame_info_arm64.h +++ b/runtime/arch/arm64/quick_method_frame_info_arm64.h @@ -78,15 +78,15 @@ static constexpr uint32_t kArm64CalleeSaveFpEverythingSpills = constexpr uint32_t Arm64CalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kArm64CalleeSaveAlwaysSpills | kArm64CalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kArm64CalleeSaveArgSpills : 0) | - (type == Runtime::kSaveAll ? kArm64CalleeSaveAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kArm64CalleeSaveArgSpills : 0) | + (type == Runtime::kSaveAllCalleeSaves ? kArm64CalleeSaveAllSpills : 0) | (type == Runtime::kSaveEverything ? kArm64CalleeSaveEverythingSpills : 0); } constexpr uint32_t Arm64CalleeSaveFpSpills(Runtime::CalleeSaveType type) { return kArm64CalleeSaveFpAlwaysSpills | kArm64CalleeSaveFpRefSpills | - (type == Runtime::kRefsAndArgs ? kArm64CalleeSaveFpArgSpills: 0) | - (type == Runtime::kSaveAll ? kArm64CalleeSaveFpAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kArm64CalleeSaveFpArgSpills: 0) | + (type == Runtime::kSaveAllCalleeSaves ? kArm64CalleeSaveFpAllSpills : 0) | (type == Runtime::kSaveEverything ? kArm64CalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/arch/mips/asm_support_mips.h b/runtime/arch/mips/asm_support_mips.h index 2ef45f5679..135b074c99 100644 --- a/runtime/arch/mips/asm_support_mips.h +++ b/runtime/arch/mips/asm_support_mips.h @@ -19,9 +19,9 @@ #include "asm_support.h" -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE 96 -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE 48 -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE 80 -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE 256 +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES 96 +#define FRAME_SIZE_SAVE_REFS_ONLY 48 +#define FRAME_SIZE_SAVE_REFS_AND_ARGS 80 +#define FRAME_SIZE_SAVE_EVERYTHING 256 #endif // ART_RUNTIME_ARCH_MIPS_ASM_SUPPORT_MIPS_H_ diff --git a/runtime/arch/mips/quick_entrypoints_mips.S b/runtime/arch/mips/quick_entrypoints_mips.S index 9b241285c9..3d393f69ce 100644 --- a/runtime/arch/mips/quick_entrypoints_mips.S +++ b/runtime/arch/mips/quick_entrypoints_mips.S @@ -30,19 +30,19 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) * Callee-save: $s0-$s8 + $gp + $ra, 11 total + 1 word for Method* * Clobbers $t0 and $sp * Allocates ARG_SLOT_SIZE bytes at the bottom of the stack for arg slots. - * Reserves FRAME_SIZE_SAVE_ALL_CALLEE_SAVE + ARG_SLOT_SIZE bytes on the stack + * Reserves FRAME_SIZE_SAVE_ALL_CALLEE_SAVES + ARG_SLOT_SIZE bytes on the stack */ -.macro SETUP_SAVE_ALL_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_ALL_CALLEE_SAVES_FRAME addiu $sp, $sp, -96 .cfi_adjust_cfa_offset 96 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 96) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(MIPS) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 96) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(MIPS) size not as expected." #endif sw $ra, 92($sp) @@ -79,7 +79,7 @@ lw $t0, %got(_ZN3art7Runtime9instance_E)($gp) lw $t0, 0($t0) - lw $t0, RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET($t0) + lw $t0, RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET($t0) sw $t0, 0($sp) # Place Method* at bottom of stack. sw $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. addiu $sp, $sp, -ARG_SLOT_SIZE # reserve argument slots on the stack @@ -88,20 +88,20 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly). Restoration assumes non-moving GC. + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly). Restoration assumes non-moving GC. * Does not include rSUSPEND or rSELF * callee-save: $s2-$s8 + $gp + $ra, 9 total + 2 words padding + 1 word to hold Method* * Clobbers $t0 and $sp * Allocates ARG_SLOT_SIZE bytes at the bottom of the stack for arg slots. - * Reserves FRAME_SIZE_REFS_ONLY_CALLEE_SAVE + ARG_SLOT_SIZE bytes on the stack + * Reserves FRAME_SIZE_SAVE_REFS_ONLY + ARG_SLOT_SIZE bytes on the stack */ -.macro SETUP_REFS_ONLY_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_REFS_ONLY_FRAME addiu $sp, $sp, -48 .cfi_adjust_cfa_offset 48 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 48) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(MIPS) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 48) +#error "FRAME_SIZE_SAVE_REFS_ONLY(MIPS) size not as expected." #endif sw $ra, 44($sp) @@ -126,14 +126,14 @@ lw $t0, %got(_ZN3art7Runtime9instance_E)($gp) lw $t0, 0($t0) - lw $t0, RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET($t0) + lw $t0, RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET($t0) sw $t0, 0($sp) # Place Method* at bottom of stack. sw $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. addiu $sp, $sp, -ARG_SLOT_SIZE # reserve argument slots on the stack .cfi_adjust_cfa_offset ARG_SLOT_SIZE .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME addiu $sp, $sp, ARG_SLOT_SIZE # remove argument slots on the stack .cfi_adjust_cfa_offset -ARG_SLOT_SIZE lw $ra, 44($sp) @@ -158,24 +158,24 @@ .cfi_adjust_cfa_offset -48 .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN + RESTORE_SAVE_REFS_ONLY_FRAME jalr $zero, $ra nop .endm /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). * callee-save: $a1-$a3, $s2-$s8 + $gp + $ra, 12 total + 3 words padding + method* */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY addiu $sp, $sp, -80 .cfi_adjust_cfa_offset 80 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 80) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(MIPS) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 80) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(MIPS) size not as expected." #endif sw $ra, 76($sp) @@ -209,17 +209,17 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). Restoration assumes non-moving GC. + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). Restoration assumes non-moving GC. * callee-save: $a1-$a3, $f12-$f15, $s2-$s8 + $gp + $ra, 12 total + 3 words padding + method* * Clobbers $t0 and $sp * Allocates ARG_SLOT_SIZE bytes at the bottom of the stack for arg slots. - * Reserves FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE + ARG_SLOT_SIZE bytes on the stack + * Reserves FRAME_SIZE_SAVE_REFS_AND_ARGS + ARG_SLOT_SIZE bytes on the stack */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY lw $t0, %got(_ZN3art7Runtime9instance_E)($gp) lw $t0, 0($t0) - lw $t0, RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET($t0) + lw $t0, RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET($t0) sw $t0, 0($sp) # Place Method* at bottom of stack. sw $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. addiu $sp, $sp, -ARG_SLOT_SIZE # reserve argument slots on the stack @@ -228,22 +228,22 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). Restoration assumes non-moving GC. + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). Restoration assumes non-moving GC. * callee-save: $a1-$a3, $f12-$f15, $s2-$s8 + $gp + $ra, 12 total + 3 words padding + method* * Clobbers $sp * Use $a0 as the Method* and loads it into bottom of stack. * Allocates ARG_SLOT_SIZE bytes at the bottom of the stack for arg slots. - * Reserves FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE + ARG_SLOT_SIZE bytes on the stack + * Reserves FRAME_SIZE_SAVE_REFS_AND_ARGS + ARG_SLOT_SIZE bytes on the stack */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_REGISTERS_ONLY +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_REGISTERS_ONLY sw $a0, 0($sp) # Place Method* at bottom of stack. sw $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. addiu $sp, $sp, -ARG_SLOT_SIZE # reserve argument slots on the stack .cfi_adjust_cfa_offset ARG_SLOT_SIZE .endm -.macro RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_AND_ARGS_FRAME addiu $sp, $sp, ARG_SLOT_SIZE # remove argument slots on the stack .cfi_adjust_cfa_offset -ARG_SLOT_SIZE lw $ra, 76($sp) @@ -283,16 +283,16 @@ * 28(GPR)+ 32(FPR) + 3 words for padding and 1 word for Method* * Clobbers $t0 and $t1. * Allocates ARG_SLOT_SIZE bytes at the bottom of the stack for arg slots. - * Reserves FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE + ARG_SLOT_SIZE bytes on the stack. + * Reserves FRAME_SIZE_SAVE_EVERYTHING + ARG_SLOT_SIZE bytes on the stack. * This macro sets up $gp; entrypoints using it should start with ENTRY_NO_GP. */ -.macro SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_EVERYTHING_FRAME addiu $sp, $sp, -256 .cfi_adjust_cfa_offset 256 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 256) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(MIPS) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 256) +#error "FRAME_SIZE_SAVE_EVERYTHING(MIPS) size not as expected." #endif sw $ra, 252($sp) @@ -381,14 +381,14 @@ lw $t0, %got(_ZN3art7Runtime9instance_E)($gp) lw $t0, 0($t0) - lw $t0, RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET($t0) + lw $t0, RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET($t0) sw $t0, 0($sp) # Place Method* at bottom of stack. sw $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. addiu $sp, $sp, -ARG_SLOT_SIZE # reserve argument slots on the stack .cfi_adjust_cfa_offset ARG_SLOT_SIZE .endm -.macro RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_EVERYTHING_FRAME addiu $sp, $sp, ARG_SLOT_SIZE # remove argument slots on the stack .cfi_adjust_cfa_offset -ARG_SLOT_SIZE @@ -478,7 +478,7 @@ * exception is Thread::Current()->exception_ */ .macro DELIVER_PENDING_EXCEPTION - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME # save callee saves for throw + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME # save callee saves for throw la $t9, artDeliverPendingExceptionFromCode jalr $zero, $t9 # artDeliverPendingExceptionFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -486,7 +486,7 @@ .macro RETURN_IF_NO_EXCEPTION lw $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bnez $t0, 1f # success if no exception is pending nop jalr $zero, $ra @@ -496,7 +496,7 @@ .endm .macro RETURN_IF_ZERO - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bnez $v0, 1f # success? nop jalr $zero, $ra # return on success @@ -506,7 +506,7 @@ .endm .macro RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME beqz $v0, 1f # success? nop jalr $zero, $ra # return on success @@ -686,7 +686,7 @@ END art_quick_do_long_jump * the bottom of the thread. On entry a0 holds Throwable* */ ENTRY art_quick_deliver_exception - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artDeliverExceptionFromCode jalr $zero, $t9 # artDeliverExceptionFromCode(Throwable*, Thread*) move $a1, rSELF # pass Thread::Current @@ -697,7 +697,7 @@ END art_quick_deliver_exception */ .extern artThrowNullPointerExceptionFromCode ENTRY art_quick_throw_null_pointer_exception - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowNullPointerExceptionFromCode jalr $zero, $t9 # artThrowNullPointerExceptionFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -709,7 +709,7 @@ END art_quick_throw_null_pointer_exception */ .extern artThrowNullPointerExceptionFromSignal ENTRY art_quick_throw_null_pointer_exception_from_signal - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowNullPointerExceptionFromSignal jalr $zero, $t9 # artThrowNullPointerExceptionFromSignal(uintptr_t, Thread*) move $a1, rSELF # pass Thread::Current @@ -720,7 +720,7 @@ END art_quick_throw_null_pointer_exception_from_signal */ .extern artThrowDivZeroFromCode ENTRY art_quick_throw_div_zero - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowDivZeroFromCode jalr $zero, $t9 # artThrowDivZeroFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -731,7 +731,7 @@ END art_quick_throw_div_zero */ .extern artThrowArrayBoundsFromCode ENTRY art_quick_throw_array_bounds - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowArrayBoundsFromCode jalr $zero, $t9 # artThrowArrayBoundsFromCode(index, limit, Thread*) move $a2, rSELF # pass Thread::Current @@ -743,7 +743,7 @@ END art_quick_throw_array_bounds */ .extern artThrowStringBoundsFromCode ENTRY art_quick_throw_string_bounds - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowStringBoundsFromCode jalr $zero, $t9 # artThrowStringBoundsFromCode(index, limit, Thread*) move $a2, rSELF # pass Thread::Current @@ -754,7 +754,7 @@ END art_quick_throw_string_bounds */ .extern artThrowStackOverflowFromCode ENTRY art_quick_throw_stack_overflow - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowStackOverflowFromCode jalr $zero, $t9 # artThrowStackOverflowFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -765,7 +765,7 @@ END art_quick_throw_stack_overflow */ .extern artThrowNoSuchMethodFromCode ENTRY art_quick_throw_no_such_method - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowNoSuchMethodFromCode jalr $zero, $t9 # artThrowNoSuchMethodFromCode(method_idx, Thread*) move $a1, rSELF # pass Thread::Current @@ -788,13 +788,13 @@ END art_quick_throw_no_such_method */ .macro INVOKE_TRAMPOLINE_BODY cxx_name .extern \cxx_name - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME # save callee saves in case allocation triggers GC + SETUP_SAVE_REFS_AND_ARGS_FRAME # save callee saves in case allocation triggers GC move $a2, rSELF # pass Thread::Current la $t9, \cxx_name jalr $t9 # (method_idx, this, Thread*, $sp) addiu $a3, $sp, ARG_SLOT_SIZE # pass $sp (remove arg slots) move $a0, $v0 # save target Method* - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME beqz $v0, 1f move $t9, $v1 # save $v0->code_ jalr $zero, $t9 @@ -1105,11 +1105,11 @@ END art_quick_invoke_static_stub */ .extern artHandleFillArrayDataFromCode ENTRY art_quick_handle_fill_data - lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC + lw $a2, 0($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC la $t9, artHandleFillArrayDataFromCode - jalr $t9 # (payload offset, Array*, method, Thread*) - move $a3, rSELF # pass Thread::Current + jalr $t9 # (payload offset, Array*, method, Thread*) + move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO END art_quick_handle_fill_data @@ -1120,7 +1120,7 @@ END art_quick_handle_fill_data ENTRY art_quick_lock_object beqz $a0, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case we block la $t9, artLockObjectFromCode jalr $t9 # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current @@ -1130,7 +1130,7 @@ END art_quick_lock_object ENTRY art_quick_lock_object_no_inline beqz $a0, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case we block la $t9, artLockObjectFromCode jalr $t9 # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current @@ -1144,7 +1144,7 @@ END art_quick_lock_object_no_inline ENTRY art_quick_unlock_object beqz $a0, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC la $t9, artUnlockObjectFromCode jalr $t9 # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current @@ -1154,7 +1154,7 @@ END art_quick_unlock_object ENTRY art_quick_unlock_object_no_inline beqz $a0, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC la $t9, artUnlockObjectFromCode jalr $t9 # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current @@ -1190,7 +1190,7 @@ ENTRY art_quick_check_cast lw $a0, 0($sp) addiu $sp, $sp, 32 .cfi_adjust_cfa_offset -32 - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artThrowClassCastException jalr $zero, $t9 # artThrowClassCastException (Class*, Class*, Thread*) move $a2, rSELF # pass Thread::Current @@ -1343,7 +1343,7 @@ ENTRY art_quick_aput_obj .cfi_adjust_cfa_offset -32 bnez $v0, .Ldo_aput nop - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME move $a1, $a2 la $t9, artThrowArrayStoreException jalr $zero, $t9 # artThrowArrayStoreException(Class*, Class*, Thread*) @@ -1356,7 +1356,7 @@ END art_quick_aput_obj .extern artGetBooleanStaticFromCode ENTRY art_quick_get_boolean_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetBooleanStaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1368,7 +1368,7 @@ END art_quick_get_boolean_static .extern artGetByteStaticFromCode ENTRY art_quick_get_byte_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetByteStaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1381,7 +1381,7 @@ END art_quick_get_byte_static .extern artGetCharStaticFromCode ENTRY art_quick_get_char_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetCharStaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1393,7 +1393,7 @@ END art_quick_get_char_static .extern artGetShortStaticFromCode ENTRY art_quick_get_short_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetShortStaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1406,7 +1406,7 @@ END art_quick_get_short_static .extern artGet32StaticFromCode ENTRY art_quick_get32_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGet32StaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1419,7 +1419,7 @@ END art_quick_get32_static .extern artGet64StaticFromCode ENTRY art_quick_get64_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGet64StaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1432,7 +1432,7 @@ END art_quick_get64_static .extern artGetObjStaticFromCode ENTRY art_quick_get_obj_static lw $a1, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetObjStaticFromCode jalr $t9 # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current @@ -1445,7 +1445,7 @@ END art_quick_get_obj_static .extern artGetBooleanInstanceFromCode ENTRY art_quick_get_boolean_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetBooleanInstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1457,7 +1457,7 @@ END art_quick_get_boolean_instance .extern artGetByteInstanceFromCode ENTRY art_quick_get_byte_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetByteInstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1470,7 +1470,7 @@ END art_quick_get_byte_instance .extern artGetCharInstanceFromCode ENTRY art_quick_get_char_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetCharInstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1482,7 +1482,7 @@ END art_quick_get_char_instance .extern artGetShortInstanceFromCode ENTRY art_quick_get_short_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetShortInstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1495,7 +1495,7 @@ END art_quick_get_short_instance .extern artGet32InstanceFromCode ENTRY art_quick_get32_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGet32InstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1508,7 +1508,7 @@ END art_quick_get32_instance .extern artGet64InstanceFromCode ENTRY art_quick_get64_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGet64InstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1521,7 +1521,7 @@ END art_quick_get64_instance .extern artGetObjInstanceFromCode ENTRY art_quick_get_obj_instance lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artGetObjInstanceFromCode jalr $t9 # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1534,7 +1534,7 @@ END art_quick_get_obj_instance .extern artSet8StaticFromCode ENTRY art_quick_set8_static lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet8StaticFromCode jalr $t9 # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1547,7 +1547,7 @@ END art_quick_set8_static .extern artSet16StaticFromCode ENTRY art_quick_set16_static lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet16StaticFromCode jalr $t9 # (field_idx, new_val, referrer, Thread*, $sp) move $a3, rSELF # pass Thread::Current @@ -1560,7 +1560,7 @@ END art_quick_set16_static .extern artSet32StaticFromCode ENTRY art_quick_set32_static lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet32StaticFromCode jalr $t9 # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1574,7 +1574,7 @@ END art_quick_set32_static ENTRY art_quick_set64_static lw $a1, 0($sp) # pass referrer's Method* # 64 bit new_val is in a2:a3 pair - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet64StaticFromCode jalr $t9 # (field_idx, referrer, new_val, Thread*) sw rSELF, 16($sp) # pass Thread::Current @@ -1587,7 +1587,7 @@ END art_quick_set64_static .extern artSetObjStaticFromCode ENTRY art_quick_set_obj_static lw $a2, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSetObjStaticFromCode jalr $t9 # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current @@ -1600,7 +1600,7 @@ END art_quick_set_obj_static .extern artSet8InstanceFromCode ENTRY art_quick_set8_instance lw $a3, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet8InstanceFromCode jalr $t9 # (field_idx, Object*, new_val, referrer, Thread*) sw rSELF, 16($sp) # pass Thread::Current @@ -1613,7 +1613,7 @@ END art_quick_set8_instance .extern artSet16InstanceFromCode ENTRY art_quick_set16_instance lw $a3, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet16InstanceFromCode jalr $t9 # (field_idx, Object*, new_val, referrer, Thread*) sw rSELF, 16($sp) # pass Thread::Current @@ -1626,7 +1626,7 @@ END art_quick_set16_instance .extern artSet32InstanceFromCode ENTRY art_quick_set32_instance lw $a3, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSet32InstanceFromCode jalr $t9 # (field_idx, Object*, new_val, referrer, Thread*) sw rSELF, 16($sp) # pass Thread::Current @@ -1640,7 +1640,7 @@ END art_quick_set32_instance ENTRY art_quick_set64_instance lw $t1, 0($sp) # load referrer's Method* # 64 bit new_val is in a2:a3 pair - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC sw rSELF, 20($sp) # pass Thread::Current la $t9, artSet64InstanceFromCode jalr $t9 # (field_idx, Object*, new_val, referrer, Thread*) @@ -1654,7 +1654,7 @@ END art_quick_set64_instance .extern artSetObjInstanceFromCode ENTRY art_quick_set_obj_instance lw $a3, 0($sp) # pass referrer's Method* - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, artSetObjInstanceFromCode jalr $t9 # (field_idx, Object*, new_val, referrer, Thread*) sw rSELF, 16($sp) # pass Thread::Current @@ -1665,7 +1665,7 @@ END art_quick_set_obj_instance .macro ONE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, \entrypoint jalr $t9 move $a1, rSELF # pass Thread::Current @@ -1676,7 +1676,7 @@ END \name .macro TWO_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, \entrypoint jalr $t9 move $a2, rSELF # pass Thread::Current @@ -1687,7 +1687,7 @@ END \name .macro THREE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, \entrypoint jalr $t9 move $a3, rSELF # pass Thread::Current @@ -1698,7 +1698,7 @@ END \name .macro FOUR_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC la $t9, \entrypoint jalr $t9 sw rSELF, 16($sp) # pass Thread::Current @@ -1809,7 +1809,7 @@ ENTRY art_quick_alloc_object_rosalloc .Lart_quick_alloc_object_rosalloc_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME la $t9, artAllocObjectFromCodeRosAlloc jalr $t9 move $a2, $s1 # Pass self as argument. @@ -1856,11 +1856,11 @@ ENTRY_NO_GP art_quick_test_suspend jalr $zero, $ra nop 1: - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME # save everything for stack crawl + SETUP_SAVE_EVERYTHING_FRAME # save everything for stack crawl la $t9, artTestSuspendFromCode jalr $t9 # (Thread*) move $a0, rSELF - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME + RESTORE_SAVE_EVERYTHING_FRAME jalr $zero, $ra nop END art_quick_test_suspend @@ -1871,13 +1871,13 @@ END art_quick_test_suspend */ .extern artQuickProxyInvokeHandler ENTRY art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 move $a2, rSELF # pass Thread::Current la $t9, artQuickProxyInvokeHandler jalr $t9 # (Method* proxy method, receiver, Thread*, SP) addiu $a3, $sp, ARG_SLOT_SIZE # pass $sp (remove arg slots) lw $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME bnez $t0, 1f # don't care if $v0 and/or $v1 are modified, when exception branch taken MTD $v0, $v1, $f0, $f1 # move float value to return value @@ -1928,26 +1928,26 @@ END art_quick_imt_conflict_trampoline .extern artQuickResolutionTrampoline ENTRY art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME move $a2, rSELF # pass Thread::Current la $t9, artQuickResolutionTrampoline jalr $t9 # (Method* called, receiver, Thread*, SP) addiu $a3, $sp, ARG_SLOT_SIZE # pass $sp (remove arg slots) beqz $v0, 1f lw $a0, ARG_SLOT_SIZE($sp) # load resolved method to $a0 - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME move $t9, $v0 # code pointer must be in $t9 to generate the global pointer jalr $zero, $t9 # tail call to method nop 1: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END art_quick_resolution_trampoline .extern artQuickGenericJniTrampoline .extern artQuickGenericJniEndTrampoline ENTRY art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 move $s8, $sp # save $sp to $s8 move $s3, $gp # save $gp to $s3 @@ -1994,7 +1994,7 @@ ENTRY art_quick_generic_jni_trampoline move $sp, $s8 # tear down the alloca # tear dpown the callee-save frame - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME MTD $v0, $v1, $f0, $f1 # move float value to return value jalr $zero, $ra @@ -2008,13 +2008,13 @@ END art_quick_generic_jni_trampoline .extern artQuickToInterpreterBridge ENTRY art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME move $a1, rSELF # pass Thread::Current la $t9, artQuickToInterpreterBridge jalr $t9 # (Method* method, Thread*, SP) addiu $a2, $sp, ARG_SLOT_SIZE # pass $sp (remove arg slots) lw $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME bnez $t0, 1f # don't care if $v0 and/or $v1 are modified, when exception branch taken MTD $v0, $v1, $f0, $f1 # move float value to return value @@ -2030,7 +2030,7 @@ END art_quick_to_interpreter_bridge .extern artInstrumentationMethodEntryFromCode .extern artInstrumentationMethodExitFromCode ENTRY art_quick_instrumentation_entry - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME sw $a0, 28($sp) # save arg0 in free arg slot move $a3, $ra # pass $ra la $t9, artInstrumentationMethodEntryFromCode @@ -2038,7 +2038,7 @@ ENTRY art_quick_instrumentation_entry move $a2, rSELF # pass Thread::Current move $t9, $v0 # $t9 holds reference to code lw $a0, 28($sp) # restore arg0 from free arg slot - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME jalr $t9 # call method nop END art_quick_instrumentation_entry @@ -2050,7 +2050,7 @@ art_quick_instrumentation_exit: .cpload $t9 move $ra, $zero # link register is to here, so clobber with 0 for later checks - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME addiu $sp, $sp, -16 # allocate temp storage on the stack .cfi_adjust_cfa_offset 16 sw $v0, ARG_SLOT_SIZE+12($sp) @@ -2071,8 +2071,8 @@ art_quick_instrumentation_exit: lw $v1, ARG_SLOT_SIZE+8($sp) l.d $f0, ARG_SLOT_SIZE($sp) jalr $zero, $t9 # return - addiu $sp, $sp, ARG_SLOT_SIZE+FRAME_SIZE_REFS_ONLY_CALLEE_SAVE+16 # restore stack - .cfi_adjust_cfa_offset -(ARG_SLOT_SIZE+FRAME_SIZE_REFS_ONLY_CALLEE_SAVE+16) + addiu $sp, $sp, ARG_SLOT_SIZE+FRAME_SIZE_SAVE_REFS_ONLY+16 # restore stack + .cfi_adjust_cfa_offset -(ARG_SLOT_SIZE+FRAME_SIZE_SAVE_REFS_ONLY+16) END art_quick_instrumentation_exit /* @@ -2081,7 +2081,7 @@ END art_quick_instrumentation_exit */ .extern artDeoptimize ENTRY art_quick_deoptimize - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artDeoptimize jalr $t9 # artDeoptimize(Thread*) # Returns caller method's frame size. @@ -2094,7 +2094,7 @@ END art_quick_deoptimize */ .extern artDeoptimizeFromCompiledCode ENTRY art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME la $t9, artDeoptimizeFromCompiledCode jalr $t9 # artDeoptimizeFromCompiledCode(Thread*) # Returns caller method's frame size. diff --git a/runtime/arch/mips/quick_method_frame_info_mips.h b/runtime/arch/mips/quick_method_frame_info_mips.h index 170513d174..90e7b203ac 100644 --- a/runtime/arch/mips/quick_method_frame_info_mips.h +++ b/runtime/arch/mips/quick_method_frame_info_mips.h @@ -61,15 +61,15 @@ static constexpr uint32_t kMipsCalleeSaveFpEverythingSpills = constexpr uint32_t MipsCalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kMipsCalleeSaveAlwaysSpills | kMipsCalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kMipsCalleeSaveArgSpills : 0) | - (type == Runtime::kSaveAll ? kMipsCalleeSaveAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kMipsCalleeSaveArgSpills : 0) | + (type == Runtime::kSaveAllCalleeSaves ? kMipsCalleeSaveAllSpills : 0) | (type == Runtime::kSaveEverything ? kMipsCalleeSaveEverythingSpills : 0); } constexpr uint32_t MipsCalleeSaveFPSpills(Runtime::CalleeSaveType type) { return kMipsCalleeSaveFpAlwaysSpills | kMipsCalleeSaveFpRefSpills | - (type == Runtime::kRefsAndArgs ? kMipsCalleeSaveFpArgSpills : 0) | - (type == Runtime::kSaveAll ? kMipsCalleeSaveAllFPSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kMipsCalleeSaveFpArgSpills : 0) | + (type == Runtime::kSaveAllCalleeSaves ? kMipsCalleeSaveAllFPSpills : 0) | (type == Runtime::kSaveEverything ? kMipsCalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/arch/mips64/asm_support_mips64.h b/runtime/arch/mips64/asm_support_mips64.h index 2c16c2532d..9063d20ecf 100644 --- a/runtime/arch/mips64/asm_support_mips64.h +++ b/runtime/arch/mips64/asm_support_mips64.h @@ -20,12 +20,12 @@ #include "asm_support.h" // 64 ($f24-$f31) + 64 ($s0-$s7) + 8 ($gp) + 8 ($s8) + 8 ($ra) + 1x8 bytes padding -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE 160 +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES 160 // 48 ($s2-$s7) + 8 ($gp) + 8 ($s8) + 8 ($ra) + 1x8 bytes padding -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE 80 +#define FRAME_SIZE_SAVE_REFS_ONLY 80 // $f12-$f19, $a1-$a7, $s2-$s7 + $gp + $s8 + $ra, 16 total + 1x8 bytes padding + method* -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE 208 +#define FRAME_SIZE_SAVE_REFS_AND_ARGS 208 // $f0-$f31, $at, $v0-$v1, $a0-$a7, $t0-$t3, $s0-$s7, $t8-$t9, $gp, $s8, $ra + padding + method* -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE 496 +#define FRAME_SIZE_SAVE_EVERYTHING 496 #endif // ART_RUNTIME_ARCH_MIPS64_ASM_SUPPORT_MIPS64_H_ diff --git a/runtime/arch/mips64/quick_entrypoints_mips64.S b/runtime/arch/mips64/quick_entrypoints_mips64.S index 3469de29c6..9774eb9f83 100644 --- a/runtime/arch/mips64/quick_entrypoints_mips64.S +++ b/runtime/arch/mips64/quick_entrypoints_mips64.S @@ -41,16 +41,16 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) * callee-save: padding + $f24-$f31 + $s0-$s7 + $gp + $ra + $s8 = 19 total + 1x8 bytes padding */ -.macro SETUP_SAVE_ALL_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_ALL_CALLEE_SAVES_FRAME daddiu $sp, $sp, -160 .cfi_adjust_cfa_offset 160 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 160) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(MIPS64) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 160) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(MIPS64) size not as expected." #endif sd $ra, 152($sp) @@ -89,25 +89,25 @@ # load appropriate callee-save-method ld $t1, %got(_ZN3art7Runtime9instance_E)($gp) ld $t1, 0($t1) - ld $t1, RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET($t1) + ld $t1, RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET($t1) sd $t1, 0($sp) # Place ArtMethod* at bottom of stack. sd $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. .endm /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly). Restoration assumes + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly). Restoration assumes * non-moving GC. * Does not include rSUSPEND or rSELF * callee-save: padding + $s2-$s7 + $gp + $ra + $s8 = 9 total + 1x8 bytes padding */ -.macro SETUP_REFS_ONLY_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_REFS_ONLY_FRAME daddiu $sp, $sp, -80 .cfi_adjust_cfa_offset 80 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 80) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(MIPS64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 80) +#error "FRAME_SIZE_SAVE_REFS_ONLY(MIPS64) size not as expected." #endif sd $ra, 72($sp) @@ -131,12 +131,12 @@ # load appropriate callee-save-method ld $t1, %got(_ZN3art7Runtime9instance_E)($gp) ld $t1, 0($t1) - ld $t1, RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET($t1) + ld $t1, RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET($t1) sd $t1, 0($sp) # Place Method* at bottom of stack. sd $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_ONLY_FRAME ld $ra, 72($sp) .cfi_restore 31 ld $s8, 64($sp) @@ -160,7 +160,7 @@ .cpreturn .endm -.macro RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME_AND_RETURN +.macro RESTORE_SAVE_REFS_ONLY_FRAME_AND_RETURN ld $ra, 72($sp) .cfi_restore 31 ld $s8, 64($sp) @@ -186,15 +186,15 @@ .endm // This assumes the top part of these stack frame types are identical. -#define REFS_AND_ARGS_MINUS_REFS_SIZE (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) +#define REFS_AND_ARGS_MINUS_REFS_SIZE (FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY) -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL daddiu $sp, $sp, -208 .cfi_adjust_cfa_offset 208 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 208) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(MIPS64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 208) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(MIPS64) size not as expected." #endif sd $ra, 200($sp) # = kQuickCalleeSaveFrame_RefAndArgs_LrOffset @@ -244,27 +244,27 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs). Restoration assumes + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs). Restoration assumes * non-moving GC. * callee-save: padding + $f12-$f19 + $a1-$a7 + $s2-$s7 + $gp + $ra + $s8 = 24 total + 1 words padding + Method* */ -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL # load appropriate callee-save-method ld $t1, %got(_ZN3art7Runtime9instance_E)($gp) ld $t1, 0($t1) - ld $t1, RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET($t1) + ld $t1, RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET($t1) sd $t1, 0($sp) # Place Method* at bottom of stack. sd $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. .endm -.macro SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_INTERNAL +.macro SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_INTERNAL sd $a0, 0($sp) # Place Method* at bottom of stack. sd $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) # Place sp in Thread::Current()->top_quick_frame. .endm -.macro RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_REFS_AND_ARGS_FRAME ld $ra, 200($sp) .cfi_restore 31 ld $s8, 192($sp) @@ -320,13 +320,13 @@ * $f0-$f31; 28(GPR)+ 32(FPR) + 1x8 bytes padding + method* * This macro sets up $gp; entrypoints using it should start with ENTRY_NO_GP. */ -.macro SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro SETUP_SAVE_EVERYTHING_FRAME daddiu $sp, $sp, -496 .cfi_adjust_cfa_offset 496 // Ugly compile-time check, but we only have the preprocessor. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 496) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(MIPS64) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 496) +#error "FRAME_SIZE_SAVE_EVERYTHING(MIPS64) size not as expected." #endif // Save core registers. @@ -430,13 +430,13 @@ # load appropriate callee-save-method ld $t1, %got(_ZN3art7Runtime9instance_E)($gp) ld $t1, 0($t1) - ld $t1, RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET($t1) + ld $t1, RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET($t1) sd $t1, 0($sp) # Place ArtMethod* at bottom of stack. # Place sp in Thread::Current()->top_quick_frame. sd $sp, THREAD_TOP_QUICK_FRAME_OFFSET(rSELF) .endm -.macro RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME +.macro RESTORE_SAVE_EVERYTHING_FRAME // Restore FP registers. l.d $f31, 264($sp) l.d $f30, 256($sp) @@ -542,7 +542,7 @@ */ .macro DELIVER_PENDING_EXCEPTION SETUP_GP - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME # save callee saves for throw + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME # save callee saves for throw dla $t9, artDeliverPendingExceptionFromCode jalr $zero, $t9 # artDeliverPendingExceptionFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -550,7 +550,7 @@ .macro RETURN_IF_NO_EXCEPTION ld $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bne $t0, $zero, 1f # success if no exception is pending nop jalr $zero, $ra @@ -560,7 +560,7 @@ .endm .macro RETURN_IF_ZERO - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bne $v0, $zero, 1f # success? nop jalr $zero, $ra # return on success @@ -570,7 +570,7 @@ .endm .macro RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME beq $v0, $zero, 1f # success? nop jalr $zero, $ra # return on success @@ -796,7 +796,7 @@ END art_quick_do_long_jump * the bottom of the thread. On entry a0 holds Throwable* */ ENTRY art_quick_deliver_exception - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artDeliverExceptionFromCode jalr $zero, $t9 # artDeliverExceptionFromCode(Throwable*, Thread*) move $a1, rSELF # pass Thread::Current @@ -808,7 +808,7 @@ END art_quick_deliver_exception .extern artThrowNullPointerExceptionFromCode ENTRY art_quick_throw_null_pointer_exception .Lart_quick_throw_null_pointer_exception_gp_set: - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowNullPointerExceptionFromCode jalr $zero, $t9 # artThrowNullPointerExceptionFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -819,7 +819,7 @@ END art_quick_throw_null_pointer_exception */ .extern artThrowNullPointerExceptionFromSignal ENTRY art_quick_throw_null_pointer_exception_from_signal - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowNullPointerExceptionFromSignal jalr $zero, $t9 # artThrowNullPointerExceptionFromSignal(uinptr_t, Thread*) move $a1, rSELF # pass Thread::Current @@ -830,7 +830,7 @@ END art_quick_throw_null_pointer_exception */ .extern artThrowDivZeroFromCode ENTRY art_quick_throw_div_zero - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowDivZeroFromCode jalr $zero, $t9 # artThrowDivZeroFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -843,7 +843,7 @@ END art_quick_throw_div_zero .extern artThrowArrayBoundsFromCode ENTRY art_quick_throw_array_bounds .Lart_quick_throw_array_bounds_gp_set: - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowArrayBoundsFromCode jalr $zero, $t9 # artThrowArrayBoundsFromCode(index, limit, Thread*) move $a2, rSELF # pass Thread::Current @@ -856,7 +856,7 @@ END art_quick_throw_array_bounds .extern artThrowStringBoundsFromCode ENTRY art_quick_throw_string_bounds .Lart_quick_throw_string_bounds_gp_set: - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowStringBoundsFromCode jalr $zero, $t9 # artThrowStringBoundsFromCode(index, limit, Thread*) move $a2, rSELF # pass Thread::Current @@ -867,7 +867,7 @@ END art_quick_throw_string_bounds */ .extern artThrowStackOverflowFromCode ENTRY art_quick_throw_stack_overflow - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowStackOverflowFromCode jalr $zero, $t9 # artThrowStackOverflowFromCode(Thread*) move $a0, rSELF # pass Thread::Current @@ -878,7 +878,7 @@ END art_quick_throw_stack_overflow */ .extern artThrowNoSuchMethodFromCode ENTRY art_quick_throw_no_such_method - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowNoSuchMethodFromCode jalr $zero, $t9 # artThrowNoSuchMethodFromCode(method_idx, Thread*) move $a1, rSELF # pass Thread::Current @@ -902,13 +902,13 @@ END art_quick_throw_no_such_method */ .macro INVOKE_TRAMPOLINE_BODY cxx_name .extern \cxx_name - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME # save callee saves in case allocation triggers GC + SETUP_SAVE_REFS_AND_ARGS_FRAME # save callee saves in case allocation triggers GC move $a2, rSELF # pass Thread::Current jal \cxx_name # (method_idx, this, Thread*, $sp) move $a3, $sp # pass $sp move $a0, $v0 # save target Method* move $t9, $v1 # save $v0->code_ - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME beq $v0, $zero, 1f nop jalr $zero, $t9 @@ -1197,8 +1197,8 @@ END art_quick_invoke_static_stub */ .extern artHandleFillArrayDataFromCode ENTRY art_quick_handle_fill_data - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artHandleFillArrayDataFromCode # (payload offset, Array*, method, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1211,7 +1211,7 @@ END art_quick_handle_fill_data ENTRY art_quick_lock_object beq $a0, $zero, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case we block jal artLockObjectFromCode # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1220,7 +1220,7 @@ END art_quick_lock_object ENTRY art_quick_lock_object_no_inline beq $a0, $zero, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case we block + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case we block jal artLockObjectFromCode # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1233,7 +1233,7 @@ END art_quick_lock_object_no_inline ENTRY art_quick_unlock_object beq $a0, $zero, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC jal artUnlockObjectFromCode # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1242,7 +1242,7 @@ END art_quick_unlock_object ENTRY art_quick_unlock_object_no_inline beq $a0, $zero, .Lart_quick_throw_null_pointer_exception_gp_set nop - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case exception allocation triggers GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case exception allocation triggers GC jal artUnlockObjectFromCode # (Object* obj, Thread*) move $a1, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1275,7 +1275,7 @@ ENTRY art_quick_check_cast daddiu $sp, $sp, 32 .cfi_adjust_cfa_offset -32 SETUP_GP - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME dla $t9, artThrowClassCastException jalr $zero, $t9 # artThrowClassCastException (Class*, Class*, Thread*) move $a2, rSELF # pass Thread::Current @@ -1423,7 +1423,7 @@ ENTRY art_quick_aput_obj SETUP_GP bne $v0, $zero, .Ldo_aput nop - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME move $a1, $a2 dla $t9, artThrowArrayStoreException jalr $zero, $t9 # artThrowArrayStoreException(Class*, Class*, Thread*) @@ -1435,8 +1435,8 @@ END art_quick_aput_obj */ .extern artGetBooleanStaticFromCode ENTRY art_quick_get_boolean_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetBooleanStaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1447,8 +1447,8 @@ END art_quick_get_boolean_static */ .extern artGetByteStaticFromCode ENTRY art_quick_get_byte_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetByteStaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1459,8 +1459,8 @@ END art_quick_get_byte_static */ .extern artGetCharStaticFromCode ENTRY art_quick_get_char_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetCharStaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1471,8 +1471,8 @@ END art_quick_get_char_static */ .extern artGetShortStaticFromCode ENTRY art_quick_get_short_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetShortStaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1483,8 +1483,8 @@ END art_quick_get_short_static */ .extern artGet32StaticFromCode ENTRY art_quick_get32_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGet32StaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1495,8 +1495,8 @@ END art_quick_get32_static */ .extern artGet64StaticFromCode ENTRY art_quick_get64_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGet64StaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1507,8 +1507,8 @@ END art_quick_get64_static */ .extern artGetObjStaticFromCode ENTRY art_quick_get_obj_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetObjStaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*) move $a2, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1519,8 +1519,8 @@ END art_quick_get_obj_static */ .extern artGetBooleanInstanceFromCode ENTRY art_quick_get_boolean_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetBooleanInstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1531,8 +1531,8 @@ END art_quick_get_boolean_instance */ .extern artGetByteInstanceFromCode ENTRY art_quick_get_byte_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetByteInstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1543,8 +1543,8 @@ END art_quick_get_byte_instance */ .extern artGetCharInstanceFromCode ENTRY art_quick_get_char_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetCharInstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1555,8 +1555,8 @@ END art_quick_get_char_instance */ .extern artGetShortInstanceFromCode ENTRY art_quick_get_short_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetShortInstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1567,8 +1567,8 @@ END art_quick_get_short_instance */ .extern artGet32InstanceFromCode ENTRY art_quick_get32_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGet32InstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1579,8 +1579,8 @@ END art_quick_get32_instance */ .extern artGet64InstanceFromCode ENTRY art_quick_get64_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGet64InstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1591,8 +1591,8 @@ END art_quick_get64_instance */ .extern artGetObjInstanceFromCode ENTRY art_quick_get_obj_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artGetObjInstanceFromCode # (field_idx, Object*, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_NO_EXCEPTION @@ -1603,8 +1603,8 @@ END art_quick_get_obj_instance */ .extern artSet8StaticFromCode ENTRY art_quick_set8_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet8StaticFromCode # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1615,8 +1615,8 @@ END art_quick_set8_static */ .extern artSet16StaticFromCode ENTRY art_quick_set16_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet16StaticFromCode # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1627,8 +1627,8 @@ END art_quick_set16_static */ .extern artSet32StaticFromCode ENTRY art_quick_set32_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet32StaticFromCode # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1639,9 +1639,9 @@ END art_quick_set32_static */ .extern artSet64StaticFromCode ENTRY art_quick_set64_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC # a2 contains the new val - ld $a1, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet64StaticFromCode # (field_idx, referrer, new_val, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1652,8 +1652,8 @@ END art_quick_set64_static */ .extern artSetObjStaticFromCode ENTRY art_quick_set_obj_static - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a2, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSetObjStaticFromCode # (field_idx, new_val, referrer, Thread*) move $a3, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1664,8 +1664,8 @@ END art_quick_set_obj_static */ .extern artSet8InstanceFromCode ENTRY art_quick_set8_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a3, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a3, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet8InstanceFromCode # (field_idx, Object*, new_val, referrer, Thread*) move $a4, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1676,8 +1676,8 @@ END art_quick_set8_instance */ .extern artSet16InstanceFromCode ENTRY art_quick_set16_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a3, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a3, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet16InstanceFromCode # (field_idx, Object*, new_val, referrer, Thread*) move $a4, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1688,8 +1688,8 @@ END art_quick_set16_instance */ .extern artSet32InstanceFromCode ENTRY art_quick_set32_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a3, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a3, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet32InstanceFromCode # (field_idx, Object*, new_val, referrer, Thread*) move $a4, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1700,8 +1700,8 @@ END art_quick_set32_instance */ .extern artSet64InstanceFromCode ENTRY art_quick_set64_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a3, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a3, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSet64InstanceFromCode # (field_idx, Object*, new_val, referrer, Thread*) move $a4, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1712,8 +1712,8 @@ END art_quick_set64_instance */ .extern artSetObjInstanceFromCode ENTRY art_quick_set_obj_instance - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC - ld $a3, FRAME_SIZE_REFS_ONLY_CALLEE_SAVE($sp) # pass referrer's Method* + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC + ld $a3, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method* jal artSetObjInstanceFromCode # (field_idx, Object*, new_val, referrer, Thread*) move $a4, rSELF # pass Thread::Current RETURN_IF_ZERO @@ -1723,7 +1723,7 @@ END art_quick_set_obj_instance .macro ONE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC jal \entrypoint move $a1, rSELF # pass Thread::Current \return @@ -1734,7 +1734,7 @@ END \name .macro TWO_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC jal \entrypoint move $a2, rSELF # pass Thread::Current \return @@ -1744,7 +1744,7 @@ END \name .macro THREE_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC jal \entrypoint move $a3, rSELF # pass Thread::Current \return @@ -1754,7 +1754,7 @@ END \name .macro FOUR_ARG_DOWNCALL name, entrypoint, return .extern \entrypoint ENTRY \name - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME # save callee saves in case of GC + SETUP_SAVE_REFS_ONLY_FRAME # save callee saves in case of GC jal \entrypoint move $a4, rSELF # pass Thread::Current \return @@ -1856,7 +1856,7 @@ ENTRY art_quick_alloc_object_rosalloc .cpreturn # Restore gp from t8 in branch delay slot. .Lart_quick_alloc_object_rosalloc_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME jal artAllocObjectFromCodeRosAlloc move $a2 ,$s1 # Pass self as argument. RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER @@ -1902,10 +1902,10 @@ ENTRY_NO_GP art_quick_test_suspend jalr $zero, $ra nop 1: - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME # save everything for stack crawl + SETUP_SAVE_EVERYTHING_FRAME # save everything for stack crawl jal artTestSuspendFromCode # (Thread*) move $a0, rSELF - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME + RESTORE_SAVE_EVERYTHING_FRAME jalr $zero, $ra nop END art_quick_test_suspend @@ -1916,13 +1916,13 @@ END art_quick_test_suspend */ .extern artQuickProxyInvokeHandler ENTRY art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 move $a2, rSELF # pass Thread::Current jal artQuickProxyInvokeHandler # (Method* proxy method, receiver, Thread*, SP) move $a3, $sp # pass $sp ld $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ daddiu $sp, $sp, REFS_AND_ARGS_MINUS_REFS_SIZE # skip a0-a7 and f12-f19 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bne $t0, $zero, 1f dmtc1 $v0, $f0 # place return value to FP return value jalr $zero, $ra @@ -1971,26 +1971,26 @@ END art_quick_imt_conflict_trampoline .extern artQuickResolutionTrampoline ENTRY art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME move $a2, rSELF # pass Thread::Current jal artQuickResolutionTrampoline # (Method* called, receiver, Thread*, SP) move $a3, $sp # pass $sp beq $v0, $zero, 1f ld $a0, 0($sp) # load resolved method in $a0 # artQuickResolutionTrampoline puts resolved method in *SP - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME move $t9, $v0 # code pointer must be in $t9 to generate the global pointer jalr $zero, $t9 # tail call to method nop 1: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END art_quick_resolution_trampoline .extern artQuickGenericJniTrampoline .extern artQuickGenericJniEndTrampoline ENTRY art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_A0 + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_A0 move $s8, $sp # save $sp # prepare for call to artQuickGenericJniTrampoline(Thread*, SP) @@ -2040,7 +2040,7 @@ ENTRY art_quick_generic_jni_trampoline move $sp, $s8 # tear down the alloca # tear dpown the callee-save frame - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME jalr $zero, $ra dmtc1 $v0, $f0 # place return value to FP return value @@ -2053,13 +2053,13 @@ END art_quick_generic_jni_trampoline .extern artQuickToInterpreterBridge ENTRY art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME move $a1, rSELF # pass Thread::Current jal artQuickToInterpreterBridge # (Method* method, Thread*, SP) move $a2, $sp # pass $sp ld $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_ daddiu $sp, $sp, REFS_AND_ARGS_MINUS_REFS_SIZE # skip a0-a7 and f12-f19 - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME bne $t0, $zero, 1f dmtc1 $v0, $f0 # place return value to FP return value jalr $zero, $ra @@ -2074,7 +2074,7 @@ END art_quick_to_interpreter_bridge .extern artInstrumentationMethodEntryFromCode .extern artInstrumentationMethodExitFromCode ENTRY art_quick_instrumentation_entry - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME daddiu $sp, $sp, -16 # space for saving arg0 .cfi_adjust_cfa_offset 16 sd $a0, 0($sp) # save arg0 @@ -2085,7 +2085,7 @@ ENTRY art_quick_instrumentation_entry ld $a0, 0($sp) # restore arg0 daddiu $sp, $sp, 16 # remove args .cfi_adjust_cfa_offset -16 - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME jalr $t9 # call method nop END art_quick_instrumentation_entry @@ -2095,7 +2095,7 @@ art_quick_instrumentation_exit: .cfi_startproc SETUP_GP move $ra, $zero # link register is to here, so clobber with 0 for later checks - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME move $t0, $sp # remember bottom of caller's frame daddiu $sp, $sp, -16 # save return values and set up args .cfi_adjust_cfa_offset 16 @@ -2115,8 +2115,9 @@ art_quick_instrumentation_exit: ld $v0, 0($sp) # restore return values l.d $f0, 8($sp) jalr $zero, $t9 # return - daddiu $sp, $sp, 16+FRAME_SIZE_REFS_ONLY_CALLEE_SAVE # 16 bytes of saved values + ref_only callee save frame - .cfi_adjust_cfa_offset -(16+FRAME_SIZE_REFS_ONLY_CALLEE_SAVE) + # restore stack, 16 bytes of saved values + ref_only callee save frame + daddiu $sp, $sp, 16+FRAME_SIZE_SAVE_REFS_ONLY + .cfi_adjust_cfa_offset -(16+FRAME_SIZE_SAVE_REFS_ONLY) END art_quick_instrumentation_exit /* @@ -2126,7 +2127,7 @@ END art_quick_instrumentation_exit .extern artDeoptimize .extern artEnterInterpreterFromDeoptimize ENTRY art_quick_deoptimize - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME jal artDeoptimize # artDeoptimize(Thread*, SP) # Returns caller method's frame size. move $a0, rSELF # pass Thread::current @@ -2138,7 +2139,7 @@ END art_quick_deoptimize */ .extern artDeoptimizeFromCompiledCode ENTRY art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME jal artDeoptimizeFromCompiledCode # artDeoptimizeFromCompiledCode(Thread*, SP) # Returns caller method's frame size. move $a0, rSELF # pass Thread::current diff --git a/runtime/arch/mips64/quick_method_frame_info_mips64.h b/runtime/arch/mips64/quick_method_frame_info_mips64.h index d52945f5a4..397776e999 100644 --- a/runtime/arch/mips64/quick_method_frame_info_mips64.h +++ b/runtime/arch/mips64/quick_method_frame_info_mips64.h @@ -71,15 +71,15 @@ static constexpr uint32_t kMips64CalleeSaveFpEverythingSpills = constexpr uint32_t Mips64CalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kMips64CalleeSaveAlwaysSpills | kMips64CalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kMips64CalleeSaveArgSpills : 0) | - (type == Runtime::kSaveAll ? kMips64CalleeSaveAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kMips64CalleeSaveArgSpills : 0) | + (type == Runtime::kSaveAllCalleeSaves ? kMips64CalleeSaveAllSpills : 0) | (type == Runtime::kSaveEverything ? kMips64CalleeSaveEverythingSpills : 0); } constexpr uint32_t Mips64CalleeSaveFpSpills(Runtime::CalleeSaveType type) { return kMips64CalleeSaveFpRefSpills | - (type == Runtime::kRefsAndArgs ? kMips64CalleeSaveFpArgSpills: 0) | - (type == Runtime::kSaveAll ? kMips64CalleeSaveFpAllSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kMips64CalleeSaveFpArgSpills: 0) | + (type == Runtime::kSaveAllCalleeSaves ? kMips64CalleeSaveFpAllSpills : 0) | (type == Runtime::kSaveEverything ? kMips64CalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/arch/x86/asm_support_x86.h b/runtime/arch/x86/asm_support_x86.h index ba5fd997e8..2bba08d571 100644 --- a/runtime/arch/x86/asm_support_x86.h +++ b/runtime/arch/x86/asm_support_x86.h @@ -19,9 +19,9 @@ #include "asm_support.h" -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE 32 -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE 32 -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE (32 + 32) -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE (48 + 64) +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES 32 +#define FRAME_SIZE_SAVE_REFS_ONLY 32 +#define FRAME_SIZE_SAVE_REFS_AND_ARGS (32 + 32) +#define FRAME_SIZE_SAVE_EVERYTHING (48 + 64) #endif // ART_RUNTIME_ARCH_X86_ASM_SUPPORT_X86_H_ diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S index 68ba0cf986..2e9682e563 100644 --- a/runtime/arch/x86/quick_entrypoints_x86.S +++ b/runtime/arch/x86/quick_entrypoints_x86.S @@ -22,9 +22,9 @@ /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) */ -MACRO2(SETUP_SAVE_ALL_CALLEE_SAVE_FRAME, got_reg, temp_reg) +MACRO2(SETUP_SAVE_ALL_CALLEE_SAVES_FRAME, got_reg, temp_reg) PUSH edi // Save callee saves (ebx is saved/restored by the upcall) PUSH esi PUSH ebp @@ -35,22 +35,22 @@ MACRO2(SETUP_SAVE_ALL_CALLEE_SAVE_FRAME, got_reg, temp_reg) movl SYMBOL(_ZN3art7Runtime9instance_E)@GOT(REG_VAR(got_reg)), REG_VAR(temp_reg) movl (REG_VAR(temp_reg)), REG_VAR(temp_reg) // Push save all callee-save method. - pushl RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET(REG_VAR(temp_reg)) + pushl RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET(REG_VAR(temp_reg)) CFI_ADJUST_CFA_OFFSET(4) // Store esp as the top quick frame. movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET // Ugly compile-time check, but we only have the preprocessor. // Last +4: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 3*4 + 16 + 4) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(X86) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 3*4 + 16 + 4) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(X86) size not as expected." #endif END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly) + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly) */ -MACRO2(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME, got_reg, temp_reg) +MACRO2(SETUP_SAVE_REFS_ONLY_FRAME, got_reg, temp_reg) PUSH edi // Save callee saves (ebx is saved/restored by the upcall) PUSH esi PUSH ebp @@ -61,24 +61,24 @@ MACRO2(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME, got_reg, temp_reg) movl SYMBOL(_ZN3art7Runtime9instance_E)@GOT(REG_VAR(got_reg)), REG_VAR(temp_reg) movl (REG_VAR(temp_reg)), REG_VAR(temp_reg) // Push save all callee-save method. - pushl RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET(REG_VAR(temp_reg)) + pushl RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET(REG_VAR(temp_reg)) CFI_ADJUST_CFA_OFFSET(4) // Store esp as the top quick frame. movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET // Ugly compile-time check, but we only have the preprocessor. // Last +4: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 3*4 + 16 + 4) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(X86) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 3*4 + 16 + 4) +#error "FRAME_SIZE_SAVE_REFS_ONLY(X86) size not as expected." #endif END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly) + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly) * and preserves the value of got_reg at entry. */ -MACRO2(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME_PRESERVE_GOT_REG, got_reg, temp_reg) +MACRO2(SETUP_SAVE_REFS_ONLY_FRAME_PRESERVE_GOT_REG, got_reg, temp_reg) PUSH edi // Save callee saves (ebx is saved/restored by the upcall) PUSH esi PUSH ebp @@ -91,7 +91,7 @@ MACRO2(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME_PRESERVE_GOT_REG, got_reg, temp_reg) movl SYMBOL(_ZN3art7Runtime9instance_E)@GOT(REG_VAR(got_reg)), REG_VAR(temp_reg) movl (REG_VAR(temp_reg)), REG_VAR(temp_reg) // Push save all callee-save method. - pushl RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET(REG_VAR(temp_reg)) + pushl RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET(REG_VAR(temp_reg)) CFI_ADJUST_CFA_OFFSET(4) // Store esp as the top quick frame. movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET @@ -101,12 +101,12 @@ MACRO2(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME_PRESERVE_GOT_REG, got_reg, temp_reg) // Ugly compile-time check, but we only have the preprocessor. // Last +4: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 3*4 + 16 + 4) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(X86) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 3*4 + 16 + 4) +#error "FRAME_SIZE_SAVE_REFS_ONLY(X86) size not as expected." #endif END_MACRO -MACRO0(RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_REFS_ONLY_FRAME) addl MACRO_LITERAL(16), %esp // Unwind stack up to saved values CFI_ADJUST_CFA_OFFSET(-16) POP ebp // Restore callee saves (ebx is saved/restored by the upcall) @@ -116,9 +116,9 @@ END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs) + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs) */ -MACRO2(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME, got_reg, temp_reg) +MACRO2(SETUP_SAVE_REFS_AND_ARGS_FRAME, got_reg, temp_reg) PUSH edi // Save callee saves PUSH esi PUSH ebp @@ -139,23 +139,23 @@ MACRO2(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME, got_reg, temp_reg) movl SYMBOL(_ZN3art7Runtime9instance_E)@GOT(REG_VAR(got_reg)), REG_VAR(temp_reg) movl (REG_VAR(temp_reg)), REG_VAR(temp_reg) // Push save all callee-save method. - pushl RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET(REG_VAR(temp_reg)) + pushl RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET(REG_VAR(temp_reg)) CFI_ADJUST_CFA_OFFSET(4) // Store esp as the stop quick frame. movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET // Ugly compile-time check, but we only have the preprocessor. // Last +4: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 7*4 + 4*8 + 4) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(X86) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 7*4 + 4*8 + 4) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(X86) size not as expected." #endif END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs) where the method is passed in EAX. + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs) where the method is passed in EAX. */ -MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_EAX) +MACRO0(SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_EAX) // Save callee and GPR args, mixed together to agree with core spills bitmap. PUSH edi // Save callee saves PUSH esi @@ -179,7 +179,7 @@ MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_EAX) movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET END_MACRO -MACRO0(RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_REFS_AND_ARGS_FRAME) // Restore FPRs. EAX is still on the stack. movsd 4(%esp), %xmm0 movsd 12(%esp), %xmm1 @@ -200,7 +200,7 @@ END_MACRO // Restore register and jump to routine // Inputs: EDI contains pointer to code. // Notes: Need to pop EAX too (restores Method*) -MACRO0(RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME_AND_JUMP) +MACRO0(RESTORE_SAVE_REFS_AND_ARGS_FRAME_AND_JUMP) POP eax // Restore Method* // Restore FPRs. @@ -225,7 +225,7 @@ END_MACRO * Macro that sets up the callee save frame to conform with * Runtime::CreateCalleeSaveMethod(kSaveEverything) */ -MACRO2(SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME, got_reg, temp_reg) +MACRO2(SETUP_SAVE_EVERYTHING_FRAME, got_reg, temp_reg) // Save core registers. PUSH edi PUSH esi @@ -252,19 +252,19 @@ MACRO2(SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME, got_reg, temp_reg) movl SYMBOL(_ZN3art7Runtime9instance_E)@GOT(REG_VAR(got_reg)), REG_VAR(temp_reg) movl (REG_VAR(temp_reg)), REG_VAR(temp_reg) // Push save everything callee-save method. - pushl RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET(REG_VAR(temp_reg)) + pushl RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET(REG_VAR(temp_reg)) CFI_ADJUST_CFA_OFFSET(4) // Store esp as the stop quick frame. movl %esp, %fs:THREAD_TOP_QUICK_FRAME_OFFSET // Ugly compile-time check, but we only have the preprocessor. // Last +4: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 7*4 + 8*8 + 12 + 4 + 4) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(X86) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 7*4 + 8*8 + 12 + 4 + 4) +#error "FRAME_SIZE_SAVE_EVERYTHING(X86) size not as expected." #endif END_MACRO -MACRO0(RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_EVERYTHING_FRAME) // Restore FPRs. Method and padding is still on the stack. movsd 16(%esp), %xmm0 movsd 24(%esp), %xmm1 @@ -294,7 +294,7 @@ END_MACRO * exception is Thread::Current()->exception_. */ MACRO0(DELIVER_PENDING_EXCEPTION) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save callee saves for throw + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save callee saves for throw // Outgoing argument set up subl MACRO_LITERAL(12), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(12) @@ -306,20 +306,20 @@ END_MACRO MACRO2(NO_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save all registers as basis for long jump context // Outgoing argument set up - subl MACRO_LITERAL(12), %esp // alignment padding + subl MACRO_LITERAL(12), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(12) - pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() + pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) - call CALLVAR(cxx_name) // cxx_name(Thread*) + call CALLVAR(cxx_name) // cxx_name(Thread*) UNREACHABLE END_FUNCTION VAR(c_name) END_MACRO MACRO2(ONE_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save all registers as basis for long jump context mov %esp, %ecx // Outgoing argument set up subl MACRO_LITERAL(8), %esp // alignment padding @@ -334,7 +334,7 @@ END_MACRO MACRO2(TWO_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save all registers as basis for long jump context // Outgoing argument set up PUSH eax // alignment padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -405,7 +405,7 @@ TWO_ARG_RUNTIME_EXCEPTION art_quick_throw_string_bounds, artThrowStringBoundsFro * pointing back to the original caller. */ MACRO1(INVOKE_TRAMPOLINE_BODY, cxx_name) - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME ebx, ebx + SETUP_SAVE_REFS_AND_ARGS_FRAME ebx, ebx movl %esp, %edx // remember SP // Outgoing argument set up @@ -731,7 +731,7 @@ END_FUNCTION art_quick_invoke_static_stub MACRO3(ONE_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl MACRO_LITERAL(8), %esp // push padding CFI_ADJUST_CFA_OFFSET(8) @@ -741,14 +741,14 @@ MACRO3(ONE_ARG_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(TWO_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up PUSH eax // push padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -758,14 +758,14 @@ MACRO3(TWO_ARG_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, arg2, Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(THREE_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) @@ -775,14 +775,14 @@ MACRO3(THREE_ARG_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, arg2, arg3, Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(FOUR_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME_PRESERVE_GOT_REG ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME_PRESERVE_GOT_REG ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl MACRO_LITERAL(12), %esp // alignment padding @@ -796,16 +796,16 @@ MACRO3(FOUR_ARG_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, arg2, arg3, arg4, Thread*) addl MACRO_LITERAL(32), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-32) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(ONE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up - mov FRAME_SIZE_REFS_ONLY_CALLEE_SAVE(%esp), %ecx // get referrer + mov FRAME_SIZE_SAVE_REFS_ONLY(%esp), %ecx // get referrer PUSH eax // push padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) @@ -814,16 +814,16 @@ MACRO3(ONE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, referrer, Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(TWO_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up - mov FRAME_SIZE_REFS_ONLY_CALLEE_SAVE(%esp), %edx // get referrer + mov FRAME_SIZE_SAVE_REFS_ONLY(%esp), %edx // get referrer pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) PUSH edx // pass referrer @@ -832,16 +832,16 @@ MACRO3(TWO_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) call CALLVAR(cxx_name) // cxx_name(arg1, arg2, referrer, Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(THREE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up - mov FRAME_SIZE_REFS_ONLY_CALLEE_SAVE(%esp), %ebx // get referrer + mov FRAME_SIZE_SAVE_REFS_ONLY(%esp), %ebx // get referrer subl MACRO_LITERAL(12), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(12) pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -854,7 +854,7 @@ MACRO3(THREE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) // Thread*) addl LITERAL(32), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-32) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO @@ -970,7 +970,7 @@ DEFINE_FUNCTION art_quick_alloc_object_rosalloc ret .Lart_quick_alloc_object_rosalloc_slow_path: POP edi - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up PUSH eax // alignment padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -978,9 +978,9 @@ DEFINE_FUNCTION art_quick_alloc_object_rosalloc PUSH ecx PUSH eax call SYMBOL(artAllocObjectFromCodeRosAlloc) // cxx_name(arg0, arg1, Thread*) - addl LITERAL(16), %esp // pop arguments + addl LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // resotre frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception END_FUNCTION art_quick_alloc_object_rosalloc @@ -988,59 +988,59 @@ END_FUNCTION art_quick_alloc_object_rosalloc // // EAX: type_idx/return_value, ECX: ArtMethod*, EDX: the class. MACRO1(ALLOC_OBJECT_TLAB_FAST_PATH, slowPathLabel) - testl %edx, %edx // Check null class + testl %edx, %edx // Check null class jz VAR(slowPathLabel) - // Check class status. + // Check class status. cmpl LITERAL(MIRROR_CLASS_STATUS_INITIALIZED), MIRROR_CLASS_STATUS_OFFSET(%edx) jne VAR(slowPathLabel) - // No fake dependence needed on x86 - // between status and flags load, - // since each load is a load-acquire, - // no loads reordering. - // Check access flags has - // kAccClassIsFinalizable + // No fake dependence needed on x86 + // between status and flags load, + // since each load is a load-acquire, + // no loads reordering. + // Check access flags has + // kAccClassIsFinalizable testl LITERAL(ACCESS_FLAGS_CLASS_IS_FINALIZABLE), MIRROR_CLASS_ACCESS_FLAGS_OFFSET(%edx) jnz VAR(slowPathLabel) - movl %fs:THREAD_SELF_OFFSET, %ebx // ebx = thread - movl THREAD_LOCAL_END_OFFSET(%ebx), %edi // Load thread_local_end. - subl THREAD_LOCAL_POS_OFFSET(%ebx), %edi // Compute the remaining buffer size. - movl MIRROR_CLASS_OBJECT_SIZE_OFFSET(%edx), %esi // Load the object size. - cmpl %edi, %esi // Check if it fits. OK to do this - // before rounding up the object size - // assuming the buf size alignment. + movl %fs:THREAD_SELF_OFFSET, %ebx // ebx = thread + movl THREAD_LOCAL_END_OFFSET(%ebx), %edi // Load thread_local_end. + subl THREAD_LOCAL_POS_OFFSET(%ebx), %edi // Compute the remaining buffer size. + movl MIRROR_CLASS_OBJECT_SIZE_OFFSET(%edx), %esi // Load the object size. + cmpl %edi, %esi // Check if it fits. OK to do this + // before rounding up the object size + // assuming the buf size alignment. ja VAR(slowPathLabel) - addl LITERAL(OBJECT_ALIGNMENT_MASK), %esi // Align the size by 8. (addr + 7) & ~7. + addl LITERAL(OBJECT_ALIGNMENT_MASK), %esi // Align the size by 8. (addr + 7) & ~7. andl LITERAL(OBJECT_ALIGNMENT_MASK_TOGGLED), %esi - movl THREAD_LOCAL_POS_OFFSET(%ebx), %eax // Load thread_local_pos - // as allocated object. - addl %eax, %esi // Add the object size. - movl %esi, THREAD_LOCAL_POS_OFFSET(%ebx) // Update thread_local_pos. - addl LITERAL(1), THREAD_LOCAL_OBJECTS_OFFSET(%ebx) // Increase thread_local_objects. - // Store the class pointer in the header. - // No fence needed for x86. + movl THREAD_LOCAL_POS_OFFSET(%ebx), %eax // Load thread_local_pos + // as allocated object. + addl %eax, %esi // Add the object size. + movl %esi, THREAD_LOCAL_POS_OFFSET(%ebx) // Update thread_local_pos. + addl LITERAL(1), THREAD_LOCAL_OBJECTS_OFFSET(%ebx) // Increase thread_local_objects. + // Store the class pointer in the header. + // No fence needed for x86. POISON_HEAP_REF edx movl %edx, MIRROR_OBJECT_CLASS_OFFSET(%eax) POP edi POP esi - ret // Fast path succeeded. + ret // Fast path succeeded. END_MACRO // The common slow path code for art_quick_alloc_object_tlab and art_quick_alloc_object_region_tlab. MACRO1(ALLOC_OBJECT_TLAB_SLOW_PATH, cxx_name) POP edi POP esi - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up - PUSH eax // alignment padding - pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() + PUSH eax // alignment padding + pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) PUSH ecx PUSH eax - call CALLVAR(cxx_name) // cxx_name(arg0, arg1, Thread*) + call CALLVAR(cxx_name) // cxx_name(arg0, arg1, Thread*) addl LITERAL(16), %esp CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address - RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address + RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception END_MACRO // A hand-written override for GENERATE_ALLOC_ENTRYPOINTS_ALLOC_OBJECT(_tlab, TLAB). @@ -1054,9 +1054,9 @@ DEFINE_FUNCTION art_quick_alloc_object_tlab #endif PUSH esi PUSH edi - movl ART_METHOD_DEX_CACHE_TYPES_OFFSET_32(%ecx), %edx // Load dex cache resolved types array + movl ART_METHOD_DEX_CACHE_TYPES_OFFSET_32(%ecx), %edx // Load dex cache resolved types array // Might need to break down into multiple instructions to get the base address in a register. - // Load the class + // Load the class movl 0(%edx, %eax, COMPRESSED_REFERENCE_SIZE), %edx ALLOC_OBJECT_TLAB_FAST_PATH .Lart_quick_alloc_object_tlab_slow_path .Lart_quick_alloc_object_tlab_slow_path: @@ -1074,11 +1074,11 @@ DEFINE_FUNCTION art_quick_alloc_object_region_tlab #endif PUSH esi PUSH edi - movl ART_METHOD_DEX_CACHE_TYPES_OFFSET_32(%ecx), %edx // Load dex cache resolved types array + movl ART_METHOD_DEX_CACHE_TYPES_OFFSET_32(%ecx), %edx // Load dex cache resolved types array // Might need to break down into multiple instructions to get the base address in a register. - // Load the class + // Load the class movl 0(%edx, %eax, COMPRESSED_REFERENCE_SIZE), %edx - // Read barrier for class load. + // Read barrier for class load. cmpl LITERAL(0), %fs:THREAD_IS_GC_MARKING_OFFSET jz .Lart_quick_alloc_object_region_tlab_class_load_read_barrier_slow_path_exit // Null check so that we can load the lock word. @@ -1094,10 +1094,10 @@ DEFINE_FUNCTION art_quick_alloc_object_region_tlab PUSH eax PUSH ecx // Outgoing argument set up - subl MACRO_LITERAL(8), %esp // Alignment padding + subl MACRO_LITERAL(8), %esp // Alignment padding CFI_ADJUST_CFA_OFFSET(8) - PUSH edx // Pass the class as the first param. - call SYMBOL(artReadBarrierMark) // cxx_name(mirror::Object* obj) + PUSH edx // Pass the class as the first param. + call SYMBOL(artReadBarrierMark) // cxx_name(mirror::Object* obj) movl %eax, %edx addl MACRO_LITERAL(12), %esp CFI_ADJUST_CFA_OFFSET(-12) @@ -1154,7 +1154,7 @@ DEFINE_FUNCTION art_quick_lock_object movl %ecx, %eax // restore eax jmp .Lretry_lock .Lslow_lock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) @@ -1164,12 +1164,12 @@ DEFINE_FUNCTION art_quick_lock_object call SYMBOL(artLockObjectFromCode) // artLockObjectFromCode(object, Thread*) addl LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_lock_object DEFINE_FUNCTION art_quick_lock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) @@ -1179,7 +1179,7 @@ DEFINE_FUNCTION art_quick_lock_object_no_inline call SYMBOL(artLockObjectFromCode) // artLockObjectFromCode(object, Thread*) addl LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_lock_object_no_inline @@ -1225,7 +1225,7 @@ DEFINE_FUNCTION art_quick_unlock_object movl %edx, %eax // restore eax jmp .Lretry_unlock .Lslow_unlock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) @@ -1235,12 +1235,12 @@ DEFINE_FUNCTION art_quick_unlock_object call SYMBOL(artUnlockObjectFromCode) // artUnlockObjectFromCode(object, Thread*) addl LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_unlock_object DEFINE_FUNCTION art_quick_unlock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC // Outgoing argument set up subl LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) @@ -1250,7 +1250,7 @@ DEFINE_FUNCTION art_quick_unlock_object_no_inline call SYMBOL(artUnlockObjectFromCode) // artUnlockObjectFromCode(object, Thread*) addl LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_unlock_object_no_inline @@ -1281,7 +1281,7 @@ DEFINE_FUNCTION art_quick_check_cast POP ecx addl LITERAL(4), %esp CFI_ADJUST_CFA_OFFSET(-4) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save all registers as basis for long jump context // Outgoing argument set up PUSH eax // alignment padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -1433,7 +1433,7 @@ DEFINE_FUNCTION art_quick_aput_obj POP edx POP ecx POP eax - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx // save all registers as basis for long jump context // Outgoing argument set up PUSH eax // alignment padding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -1456,7 +1456,7 @@ DEFINE_FUNCTION art_quick_memcpy END_FUNCTION art_quick_memcpy DEFINE_FUNCTION art_quick_test_suspend - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME ebx, ebx // save everything for GC + SETUP_SAVE_EVERYTHING_FRAME ebx, ebx // save everything for GC // Outgoing argument set up subl MACRO_LITERAL(12), %esp // push padding CFI_ADJUST_CFA_OFFSET(12) @@ -1465,7 +1465,7 @@ DEFINE_FUNCTION art_quick_test_suspend call SYMBOL(artTestSuspendFromCode) // (Thread*) addl MACRO_LITERAL(16), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-16) - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_EVERYTHING_FRAME // restore frame up to return address ret // return END_FUNCTION art_quick_test_suspend @@ -1592,14 +1592,14 @@ THREE_ARG_REF_DOWNCALL art_quick_set_obj_instance, artSetObjInstanceFromCode, RE // Call artSet64InstanceFromCode with 4 word size arguments and the referrer. DEFINE_FUNCTION art_quick_set64_instance movd %ebx, %xmm0 - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC movd %xmm0, %ebx // Outgoing argument set up subl LITERAL(8), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(8) pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) - pushl (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE+12)(%esp) // pass referrer + pushl (FRAME_SIZE_SAVE_REFS_ONLY+12)(%esp) // pass referrer CFI_ADJUST_CFA_OFFSET(4) PUSH ebx // pass high half of new_val PUSH edx // pass low half of new_val @@ -1608,7 +1608,7 @@ DEFINE_FUNCTION art_quick_set64_instance call SYMBOL(artSet64InstanceFromCode) // (field_idx, Object*, new_val, referrer, Thread*) addl LITERAL(32), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-32) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO // return or deliver exception END_FUNCTION art_quick_set64_instance @@ -1617,9 +1617,9 @@ END_FUNCTION art_quick_set64_instance DEFINE_FUNCTION art_quick_set64_static // TODO: Implement SETUP_GOT_NOSAVE for got_reg = ecx to avoid moving around the registers. movd %ebx, %xmm0 - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx // save ref containing registers for GC movd %xmm0, %ebx - mov FRAME_SIZE_REFS_ONLY_CALLEE_SAVE(%esp), %ecx // get referrer + mov FRAME_SIZE_SAVE_REFS_ONLY(%esp), %ecx // get referrer subl LITERAL(12), %esp // alignment padding CFI_ADJUST_CFA_OFFSET(12) pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -1631,12 +1631,12 @@ DEFINE_FUNCTION art_quick_set64_static call SYMBOL(artSet64StaticFromCode) // (field_idx, referrer, new_val, Thread*) addl LITERAL(32), %esp // pop arguments CFI_ADJUST_CFA_OFFSET(-32) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO // return or deliver exception END_FUNCTION art_quick_set64_static DEFINE_FUNCTION art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_EAX + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_EAX PUSH esp // pass SP pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() CFI_ADJUST_CFA_OFFSET(4) @@ -1646,9 +1646,9 @@ DEFINE_FUNCTION art_quick_proxy_invoke_handler movd %eax, %xmm0 // place return value also into floating point return value movd %edx, %xmm1 punpckldq %xmm1, %xmm0 - addl LITERAL(16 + FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE), %esp - CFI_ADJUST_CFA_OFFSET(-(16 + FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE - FRAME_SIZE_REFS_ONLY_CALLEE_SAVE)) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + addl LITERAL(16 + FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY), %esp + CFI_ADJUST_CFA_OFFSET(-(16 + FRAME_SIZE_SAVE_REFS_AND_ARGS - FRAME_SIZE_SAVE_REFS_ONLY)) + RESTORE_SAVE_REFS_ONLY_FRAME RETURN_OR_DELIVER_PENDING_EXCEPTION // return or deliver exception END_FUNCTION art_quick_proxy_invoke_handler @@ -1693,7 +1693,7 @@ DEFINE_FUNCTION art_quick_imt_conflict_trampoline END_FUNCTION art_quick_imt_conflict_trampoline DEFINE_FUNCTION art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME ebx, ebx + SETUP_SAVE_REFS_AND_ARGS_FRAME ebx, ebx movl %esp, %edi PUSH EDI // pass SP. do not just PUSH ESP; that messes up unwinding pushl %fs:THREAD_SELF_OFFSET // pass Thread::Current() @@ -1706,14 +1706,14 @@ DEFINE_FUNCTION art_quick_resolution_trampoline CFI_ADJUST_CFA_OFFSET(-16) test %eax, %eax // if code pointer is null goto deliver pending exception jz 1f - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME_AND_JUMP + RESTORE_SAVE_REFS_AND_ARGS_FRAME_AND_JUMP 1: - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME DELIVER_PENDING_EXCEPTION END_FUNCTION art_quick_resolution_trampoline DEFINE_FUNCTION art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_EAX + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_EAX movl %esp, %ebp // save SP at callee-save frame CFI_DEF_CFA_REGISTER(ebp) subl LITERAL(5120), %esp @@ -1792,7 +1792,7 @@ DEFINE_FUNCTION art_quick_generic_jni_trampoline END_FUNCTION art_quick_generic_jni_trampoline DEFINE_FUNCTION art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME ebx, ebx // save frame + SETUP_SAVE_REFS_AND_ARGS_FRAME ebx, ebx // save frame mov %esp, %edx // remember SP PUSH eax // alignment padding PUSH edx // pass SP @@ -1822,11 +1822,11 @@ END_FUNCTION art_quick_to_interpreter_bridge * Routine that intercepts method calls and returns. */ DEFINE_FUNCTION art_quick_instrumentation_entry - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME ebx, edx + SETUP_SAVE_REFS_AND_ARGS_FRAME ebx, edx PUSH eax // Save eax which will be clobbered by the callee-save method. subl LITERAL(12), %esp // Align stack. CFI_ADJUST_CFA_OFFSET(12) - pushl FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-4+16(%esp) // Pass LR. + pushl FRAME_SIZE_SAVE_REFS_AND_ARGS-4+16(%esp) // Pass LR. CFI_ADJUST_CFA_OFFSET(4) pushl %fs:THREAD_SELF_OFFSET // Pass Thread::Current(). CFI_ADJUST_CFA_OFFSET(4) @@ -1861,7 +1861,7 @@ END_FUNCTION art_quick_instrumentation_entry DEFINE_FUNCTION art_quick_instrumentation_exit pushl LITERAL(0) // Push a fake return PC as there will be none on the stack. CFI_ADJUST_CFA_OFFSET(4) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME ebx, ebx + SETUP_SAVE_REFS_ONLY_FRAME ebx, ebx mov %esp, %ecx // Remember SP subl LITERAL(8), %esp // Save float return value. CFI_ADJUST_CFA_OFFSET(8) @@ -1887,7 +1887,7 @@ DEFINE_FUNCTION art_quick_instrumentation_exit movq (%esp), %xmm0 // Restore fpr return value. addl LITERAL(8), %esp CFI_ADJUST_CFA_OFFSET(-8) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME addl LITERAL(4), %esp // Remove fake return pc. CFI_ADJUST_CFA_OFFSET(-4) jmp *%ecx // Return. @@ -1899,7 +1899,7 @@ END_FUNCTION art_quick_instrumentation_exit */ DEFINE_FUNCTION art_quick_deoptimize PUSH ebx // Entry point for a jump. Fake that we were called. - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx subl LITERAL(12), %esp // Align stack. CFI_ADJUST_CFA_OFFSET(12) pushl %fs:THREAD_SELF_OFFSET // Pass Thread::Current(). @@ -1913,7 +1913,7 @@ END_FUNCTION art_quick_deoptimize * will long jump to the interpreter bridge. */ DEFINE_FUNCTION art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME ebx, ebx + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME ebx, ebx subl LITERAL(12), %esp // Align stack. CFI_ADJUST_CFA_OFFSET(12) pushl %fs:THREAD_SELF_OFFSET // Pass Thread::Current(). diff --git a/runtime/arch/x86/quick_method_frame_info_x86.h b/runtime/arch/x86/quick_method_frame_info_x86.h index a1612c38a7..9fcde35cec 100644 --- a/runtime/arch/x86/quick_method_frame_info_x86.h +++ b/runtime/arch/x86/quick_method_frame_info_x86.h @@ -56,12 +56,12 @@ static constexpr uint32_t kX86CalleeSaveFpEverythingSpills = constexpr uint32_t X86CalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kX86CalleeSaveAlwaysSpills | kX86CalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kX86CalleeSaveArgSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kX86CalleeSaveArgSpills : 0) | (type == Runtime::kSaveEverything ? kX86CalleeSaveEverythingSpills : 0); } constexpr uint32_t X86CalleeSaveFpSpills(Runtime::CalleeSaveType type) { - return (type == Runtime::kRefsAndArgs ? kX86CalleeSaveFpArgSpills : 0) | + return (type == Runtime::kSaveRefsAndArgs ? kX86CalleeSaveFpArgSpills : 0) | (type == Runtime::kSaveEverything ? kX86CalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/arch/x86_64/asm_support_x86_64.h b/runtime/arch/x86_64/asm_support_x86_64.h index 58dc2fe23a..a4446d3345 100644 --- a/runtime/arch/x86_64/asm_support_x86_64.h +++ b/runtime/arch/x86_64/asm_support_x86_64.h @@ -19,9 +19,9 @@ #include "asm_support.h" -#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVE (64 + 4*8) -#define FRAME_SIZE_REFS_ONLY_CALLEE_SAVE (64 + 4*8) -#define FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE (112 + 12*8) -#define FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE (144 + 16*8) +#define FRAME_SIZE_SAVE_ALL_CALLEE_SAVES (64 + 4*8) +#define FRAME_SIZE_SAVE_REFS_ONLY (64 + 4*8) +#define FRAME_SIZE_SAVE_REFS_AND_ARGS (112 + 12*8) +#define FRAME_SIZE_SAVE_EVERYTHING (144 + 16*8) #endif // ART_RUNTIME_ARCH_X86_64_ASM_SUPPORT_X86_64_H_ diff --git a/runtime/arch/x86_64/quick_entrypoints_x86_64.S b/runtime/arch/x86_64/quick_entrypoints_x86_64.S index 4741ac0c8d..ac8f5233da 100644 --- a/runtime/arch/x86_64/quick_entrypoints_x86_64.S +++ b/runtime/arch/x86_64/quick_entrypoints_x86_64.S @@ -42,9 +42,9 @@ END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kSaveAll) + * Runtime::CreateCalleeSaveMethod(kSaveAllCalleeSaves) */ -MACRO0(SETUP_SAVE_ALL_CALLEE_SAVE_FRAME) +MACRO0(SETUP_SAVE_ALL_CALLEE_SAVES_FRAME) #if defined(__APPLE__) int3 int3 @@ -68,7 +68,7 @@ MACRO0(SETUP_SAVE_ALL_CALLEE_SAVE_FRAME) movq %xmm14, 24(%rsp) movq %xmm15, 32(%rsp) // R10 := ArtMethod* for save all callee save frame method. - movq RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET(%r10), %r10 + movq RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET(%r10), %r10 // Store ArtMethod* to bottom of stack. movq %r10, 0(%rsp) // Store rsp as the top quick frame. @@ -76,17 +76,17 @@ MACRO0(SETUP_SAVE_ALL_CALLEE_SAVE_FRAME) // Ugly compile-time check, but we only have the preprocessor. // Last +8: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVE != 6 * 8 + 4 * 8 + 8 + 8) -#error "SAVE_ALL_CALLEE_SAVE_FRAME(X86_64) size not as expected." +#if (FRAME_SIZE_SAVE_ALL_CALLEE_SAVES != 6 * 8 + 4 * 8 + 8 + 8) +#error "FRAME_SIZE_SAVE_ALL_CALLEE_SAVES(X86_64) size not as expected." #endif #endif // __APPLE__ END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsOnly) + * Runtime::CreateCalleeSaveMethod(kSaveRefsOnly) */ -MACRO0(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME) +MACRO0(SETUP_SAVE_REFS_ONLY_FRAME) #if defined(__APPLE__) int3 int3 @@ -110,7 +110,7 @@ MACRO0(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME) movq %xmm14, 24(%rsp) movq %xmm15, 32(%rsp) // R10 := ArtMethod* for refs only callee save frame method. - movq RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET(%r10), %r10 + movq RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET(%r10), %r10 // Store ArtMethod* to bottom of stack. movq %r10, 0(%rsp) // Store rsp as the stop quick frame. @@ -118,13 +118,13 @@ MACRO0(SETUP_REFS_ONLY_CALLEE_SAVE_FRAME) // Ugly compile-time check, but we only have the preprocessor. // Last +8: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_REFS_ONLY_CALLEE_SAVE != 6 * 8 + 4 * 8 + 8 + 8) -#error "REFS_ONLY_CALLEE_SAVE_FRAME(X86_64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_ONLY != 6 * 8 + 4 * 8 + 8 + 8) +#error "FRAME_SIZE_SAVE_REFS_ONLY(X86_64) size not as expected." #endif #endif // __APPLE__ END_MACRO -MACRO0(RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_REFS_ONLY_FRAME) movq 8(%rsp), %xmm12 movq 16(%rsp), %xmm13 movq 24(%rsp), %xmm14 @@ -142,9 +142,9 @@ END_MACRO /* * Macro that sets up the callee save frame to conform with - * Runtime::CreateCalleeSaveMethod(kRefsAndArgs) + * Runtime::CreateCalleeSaveMethod(kSaveRefsAndArgs) */ -MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME) +MACRO0(SETUP_SAVE_REFS_AND_ARGS_FRAME) #if defined(__APPLE__) int3 int3 @@ -168,7 +168,7 @@ MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME) subq MACRO_LITERAL(16 + 12 * 8), %rsp CFI_ADJUST_CFA_OFFSET(16 + 12 * 8) // R10 := ArtMethod* for ref and args callee save frame method. - movq RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET(%r10), %r10 + movq RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET(%r10), %r10 // Save FPRs. movq %xmm0, 16(%rsp) movq %xmm1, 24(%rsp) @@ -189,13 +189,13 @@ MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME) // Ugly compile-time check, but we only have the preprocessor. // Last +8: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE != 11 * 8 + 12 * 8 + 16 + 8) -#error "REFS_AND_ARGS_CALLEE_SAVE_FRAME(X86_64) size not as expected." +#if (FRAME_SIZE_SAVE_REFS_AND_ARGS != 11 * 8 + 12 * 8 + 16 + 8) +#error "FRAME_SIZE_SAVE_REFS_AND_ARGS(X86_64) size not as expected." #endif #endif // __APPLE__ END_MACRO -MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_RDI) +MACRO0(SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_RDI) // Save callee and GPR args, mixed together to agree with core spills bitmap. PUSH r15 // Callee save. PUSH r14 // Callee save. @@ -230,7 +230,7 @@ MACRO0(SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_RDI) movq %rsp, %gs:THREAD_TOP_QUICK_FRAME_OFFSET END_MACRO -MACRO0(RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_REFS_AND_ARGS_FRAME) // Restore FPRs. movq 16(%rsp), %xmm0 movq 24(%rsp), %xmm1 @@ -264,7 +264,7 @@ END_MACRO * Macro that sets up the callee save frame to conform with * Runtime::CreateCalleeSaveMethod(kSaveEverything) */ -MACRO0(SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME) +MACRO0(SETUP_SAVE_EVERYTHING_FRAME) #if defined(__APPLE__) int3 int3 @@ -309,20 +309,20 @@ MACRO0(SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME) movq %xmm14, 120(%rsp) movq %xmm15, 128(%rsp) // Push ArtMethod* for save everything frame method. - pushq RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET(%r10) + pushq RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET(%r10) CFI_ADJUST_CFA_OFFSET(8) // Store rsp as the top quick frame. movq %rsp, %gs:THREAD_TOP_QUICK_FRAME_OFFSET // Ugly compile-time check, but we only have the preprocessor. // Last +8: implicit return address pushed on stack when caller made call. -#if (FRAME_SIZE_SAVE_EVERYTHING_CALLEE_SAVE != 15 * 8 + 16 * 8 + 16 + 8) -#error "SAVE_EVERYTHING_CALLEE_SAVE_FRAME(X86_64) size not as expected." +#if (FRAME_SIZE_SAVE_EVERYTHING != 15 * 8 + 16 * 8 + 16 + 8) +#error "FRAME_SIZE_SAVE_EVERYTHING(X86_64) size not as expected." #endif #endif // __APPLE__ END_MACRO -MACRO0(RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME) +MACRO0(RESTORE_SAVE_EVERYTHING_FRAME) // Restore FPRs. Method and padding is still on the stack. movq 16(%rsp), %xmm0 movq 24(%rsp), %xmm1 @@ -368,7 +368,7 @@ END_MACRO * exception is Thread::Current()->exception_. */ MACRO0(DELIVER_PENDING_EXCEPTION) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save callee saves for throw + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save callee saves for throw // (Thread*) setup movq %gs:THREAD_SELF_OFFSET, %rdi call SYMBOL(artDeliverPendingExceptionFromCode) // artDeliverPendingExceptionFromCode(Thread*) @@ -377,7 +377,7 @@ END_MACRO MACRO2(NO_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rdi // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(Thread*) @@ -387,7 +387,7 @@ END_MACRO MACRO2(ONE_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg1, Thread*) @@ -397,7 +397,7 @@ END_MACRO MACRO2(TWO_ARG_RUNTIME_EXCEPTION, c_name, cxx_name) DEFINE_FUNCTION VAR(c_name) - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(Thread*) @@ -466,7 +466,7 @@ TWO_ARG_RUNTIME_EXCEPTION art_quick_throw_string_bounds, artThrowStringBoundsFro * Adapted from x86 code. */ MACRO1(INVOKE_TRAMPOLINE_BODY, cxx_name) - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME // save callee saves in case allocation triggers GC + SETUP_SAVE_REFS_AND_ARGS_FRAME // save callee saves in case allocation triggers GC // Helper signature is always // (method_idx, *this_object, *caller_method, *self, sp) @@ -477,7 +477,7 @@ MACRO1(INVOKE_TRAMPOLINE_BODY, cxx_name) // save the code pointer movq %rax, %rdi movq %rdx, %rax - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME testq %rdi, %rdi jz 1f @@ -806,44 +806,44 @@ END_FUNCTION art_quick_do_long_jump MACRO3(ONE_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg0, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(TWO_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg0, arg1, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(THREE_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rcx // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg0, arg1, arg2, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO MACRO3(FOUR_ARG_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %r8 // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg1, arg2, arg3, arg4, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO @@ -851,11 +851,11 @@ END_MACRO MACRO3(ONE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) movq 8(%rsp), %rsi // pass referrer - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // arg0 is in rdi movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg0, referrer, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) END_FUNCTION VAR(c_name) END_MACRO @@ -863,11 +863,11 @@ END_MACRO MACRO3(TWO_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) movq 8(%rsp), %rdx // pass referrer - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // arg0 and arg1 are in rdi/rsi movq %gs:THREAD_SELF_OFFSET, %rcx // pass Thread::Current() call CALLVAR(cxx_name) // (arg0, arg1, referrer, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) END_FUNCTION VAR(c_name) END_MACRO @@ -875,11 +875,11 @@ END_MACRO MACRO3(THREE_ARG_REF_DOWNCALL, c_name, cxx_name, return_macro) DEFINE_FUNCTION VAR(c_name) movq 8(%rsp), %rcx // pass referrer - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // arg0, arg1, and arg2 are in rdi/rsi/rdx movq %gs:THREAD_SELF_OFFSET, %r8 // pass Thread::Current() call CALLVAR(cxx_name) // cxx_name(arg0, arg1, arg2, referrer, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address CALL_MACRO(return_macro) // return or deliver exception END_FUNCTION VAR(c_name) END_MACRO @@ -917,83 +917,83 @@ DEFINE_FUNCTION art_quick_alloc_object_rosalloc // Fast path rosalloc allocation. // RDI: type_idx, RSI: ArtMethod*, RAX: return value // RDX, RCX, R8, R9: free. - movq ART_METHOD_DEX_CACHE_TYPES_OFFSET_64(%rsi), %rdx // Load dex cache resolved types array - // Load the class (edx) + movq ART_METHOD_DEX_CACHE_TYPES_OFFSET_64(%rsi), %rdx // Load dex cache resolved types array + // Load the class (edx) movl 0(%rdx, %rdi, COMPRESSED_REFERENCE_SIZE), %edx - testl %edx, %edx // Check null class + testl %edx, %edx // Check null class jz .Lart_quick_alloc_object_rosalloc_slow_path - // Check class status. + // Check class status. cmpl LITERAL(MIRROR_CLASS_STATUS_INITIALIZED), MIRROR_CLASS_STATUS_OFFSET(%rdx) jne .Lart_quick_alloc_object_rosalloc_slow_path - // We don't need a fence (between the - // the status and the access flag - // loads) here because every load is - // a load acquire on x86. - // Check access flags has - // kAccClassIsFinalizable + // We don't need a fence (between the + // the status and the access flag + // loads) here because every load is + // a load acquire on x86. + // Check access flags has + // kAccClassIsFinalizable testl LITERAL(ACCESS_FLAGS_CLASS_IS_FINALIZABLE), MIRROR_CLASS_ACCESS_FLAGS_OFFSET(%rdx) jnz .Lart_quick_alloc_object_rosalloc_slow_path - // Check if the thread local - // allocation stack has room. - movq %gs:THREAD_SELF_OFFSET, %r8 // r8 = thread - movq THREAD_LOCAL_ALLOC_STACK_TOP_OFFSET(%r8), %rcx // rcx = alloc stack top. + // Check if the thread local + // allocation stack has room. + movq %gs:THREAD_SELF_OFFSET, %r8 // r8 = thread + movq THREAD_LOCAL_ALLOC_STACK_TOP_OFFSET(%r8), %rcx // rcx = alloc stack top. cmpq THREAD_LOCAL_ALLOC_STACK_END_OFFSET(%r8), %rcx jae .Lart_quick_alloc_object_rosalloc_slow_path - // Load the object size + // Load the object size movl MIRROR_CLASS_OBJECT_SIZE_OFFSET(%rdx), %eax - // Check if the size is for a thread - // local allocation + // Check if the size is for a thread + // local allocation cmpl LITERAL(ROSALLOC_MAX_THREAD_LOCAL_BRACKET_SIZE), %eax ja .Lart_quick_alloc_object_rosalloc_slow_path - // Compute the rosalloc bracket index - // from the size. - // Align up the size by the rosalloc - // bracket quantum size and divide - // by the quantum size and subtract - // by 1. This code is a shorter but - // equivalent version. + // Compute the rosalloc bracket index + // from the size. + // Align up the size by the rosalloc + // bracket quantum size and divide + // by the quantum size and subtract + // by 1. This code is a shorter but + // equivalent version. subq LITERAL(1), %rax shrq LITERAL(ROSALLOC_BRACKET_QUANTUM_SIZE_SHIFT), %rax - // Load the rosalloc run (r9) + // Load the rosalloc run (r9) movq THREAD_ROSALLOC_RUNS_OFFSET(%r8, %rax, __SIZEOF_POINTER__), %r9 - // Load the free list head (rax). This - // will be the return val. + // Load the free list head (rax). This + // will be the return val. movq (ROSALLOC_RUN_FREE_LIST_OFFSET + ROSALLOC_RUN_FREE_LIST_HEAD_OFFSET)(%r9), %rax testq %rax, %rax jz .Lart_quick_alloc_object_rosalloc_slow_path // "Point of no slow path". Won't go to the slow path from here on. OK to clobber rdi and rsi. - // Push the new object onto the thread - // local allocation stack and - // increment the thread local - // allocation stack top. + // Push the new object onto the thread + // local allocation stack and + // increment the thread local + // allocation stack top. movl %eax, (%rcx) addq LITERAL(COMPRESSED_REFERENCE_SIZE), %rcx movq %rcx, THREAD_LOCAL_ALLOC_STACK_TOP_OFFSET(%r8) - // Load the next pointer of the head - // and update the list head with the - // next pointer. + // Load the next pointer of the head + // and update the list head with the + // next pointer. movq ROSALLOC_SLOT_NEXT_OFFSET(%rax), %rcx movq %rcx, (ROSALLOC_RUN_FREE_LIST_OFFSET + ROSALLOC_RUN_FREE_LIST_HEAD_OFFSET)(%r9) - // Store the class pointer in the - // header. This also overwrites the - // next pointer. The offsets are - // asserted to match. + // Store the class pointer in the + // header. This also overwrites the + // next pointer. The offsets are + // asserted to match. #if ROSALLOC_SLOT_NEXT_OFFSET != MIRROR_OBJECT_CLASS_OFFSET #error "Class pointer needs to overwrite next pointer." #endif POISON_HEAP_REF edx movl %edx, MIRROR_OBJECT_CLASS_OFFSET(%rax) - // Decrement the size of the free list + // Decrement the size of the free list decl (ROSALLOC_RUN_FREE_LIST_OFFSET + ROSALLOC_RUN_FREE_LIST_SIZE_OFFSET)(%r9) - // No fence necessary for x86. + // No fence necessary for x86. ret .Lart_quick_alloc_object_rosalloc_slow_path: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up - movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() - call SYMBOL(artAllocObjectFromCodeRosAlloc) // cxx_name(arg0, arg1, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address - RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception + movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() + call SYMBOL(artAllocObjectFromCodeRosAlloc) // cxx_name(arg0, arg1, Thread*) + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address + RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception END_FUNCTION art_quick_alloc_object_rosalloc // The common fast path code for art_quick_alloc_object_tlab and art_quick_alloc_object_region_tlab. @@ -1001,49 +1001,49 @@ END_FUNCTION art_quick_alloc_object_rosalloc // RDI: type_idx, RSI: ArtMethod*, RDX/EDX: the class, RAX: return value. // RCX: scratch, r8: Thread::Current(). MACRO1(ALLOC_OBJECT_TLAB_FAST_PATH, slowPathLabel) - testl %edx, %edx // Check null class + testl %edx, %edx // Check null class jz RAW_VAR(slowPathLabel) - // Check class status. + // Check class status. cmpl LITERAL(MIRROR_CLASS_STATUS_INITIALIZED), MIRROR_CLASS_STATUS_OFFSET(%rdx) jne RAW_VAR(slowPathLabel) - // No fake dependence needed on x86 - // between status and flags load, - // since each load is a load-acquire, - // no loads reordering. - // Check access flags has - // kAccClassIsFinalizable + // No fake dependence needed on x86 + // between status and flags load, + // since each load is a load-acquire, + // no loads reordering. + // Check access flags has + // kAccClassIsFinalizable testl LITERAL(ACCESS_FLAGS_CLASS_IS_FINALIZABLE), MIRROR_CLASS_ACCESS_FLAGS_OFFSET(%rdx) jnz RAW_VAR(slowPathLabel) - movq %gs:THREAD_SELF_OFFSET, %r8 // r8 = thread - movq THREAD_LOCAL_END_OFFSET(%r8), %rax // Load thread_local_end. - subq THREAD_LOCAL_POS_OFFSET(%r8), %rax // Compute the remaining buffer size. - movl MIRROR_CLASS_OBJECT_SIZE_OFFSET(%rdx), %ecx // Load the object size. - cmpq %rax, %rcx // Check if it fits. OK to do this - // before rounding up the object size - // assuming the buf size alignment. + movq %gs:THREAD_SELF_OFFSET, %r8 // r8 = thread + movq THREAD_LOCAL_END_OFFSET(%r8), %rax // Load thread_local_end. + subq THREAD_LOCAL_POS_OFFSET(%r8), %rax // Compute the remaining buffer size. + movl MIRROR_CLASS_OBJECT_SIZE_OFFSET(%rdx), %ecx // Load the object size. + cmpq %rax, %rcx // Check if it fits. OK to do this + // before rounding up the object size + // assuming the buf size alignment. ja RAW_VAR(slowPathLabel) - addl LITERAL(OBJECT_ALIGNMENT_MASK), %ecx // Align the size by 8. (addr + 7) & ~7. + addl LITERAL(OBJECT_ALIGNMENT_MASK), %ecx // Align the size by 8. (addr + 7) & ~7. andl LITERAL(OBJECT_ALIGNMENT_MASK_TOGGLED), %ecx - movq THREAD_LOCAL_POS_OFFSET(%r8), %rax // Load thread_local_pos - // as allocated object. - addq %rax, %rcx // Add the object size. - movq %rcx, THREAD_LOCAL_POS_OFFSET(%r8) // Update thread_local_pos. - addq LITERAL(1), THREAD_LOCAL_OBJECTS_OFFSET(%r8) // Increase thread_local_objects. - // Store the class pointer in the header. - // No fence needed for x86. + movq THREAD_LOCAL_POS_OFFSET(%r8), %rax // Load thread_local_pos + // as allocated object. + addq %rax, %rcx // Add the object size. + movq %rcx, THREAD_LOCAL_POS_OFFSET(%r8) // Update thread_local_pos. + addq LITERAL(1), THREAD_LOCAL_OBJECTS_OFFSET(%r8) // Increase thread_local_objects. + // Store the class pointer in the header. + // No fence needed for x86. POISON_HEAP_REF edx movl %edx, MIRROR_OBJECT_CLASS_OFFSET(%rax) - ret // Fast path succeeded. + ret // Fast path succeeded. END_MACRO // The common slow path code for art_quick_alloc_object_tlab and art_quick_alloc_object_region_tlab. MACRO1(ALLOC_OBJECT_TLAB_SLOW_PATH, cxx_name) - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME // save ref containing registers for GC + SETUP_SAVE_REFS_ONLY_FRAME // save ref containing registers for GC // Outgoing argument set up - movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() - call CALLVAR(cxx_name) // cxx_name(arg0, arg1, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address - RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception + movq %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() + call CALLVAR(cxx_name) // cxx_name(arg0, arg1, Thread*) + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address + RETURN_IF_RESULT_IS_NON_ZERO_OR_DELIVER // return or deliver exception END_MACRO // A hand-written override for GENERATE_ALLOC_ENTRYPOINTS_ALLOC_OBJECT(_tlab, TLAB). @@ -1145,18 +1145,18 @@ DEFINE_FUNCTION art_quick_lock_object jnz .Lretry_lock // cmpxchg failed retry ret .Lslow_lock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call SYMBOL(artLockObjectFromCode) // artLockObjectFromCode(object, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_lock_object DEFINE_FUNCTION art_quick_lock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call SYMBOL(artLockObjectFromCode) // artLockObjectFromCode(object, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_lock_object_no_inline @@ -1196,18 +1196,18 @@ DEFINE_FUNCTION art_quick_unlock_object #endif ret .Lslow_unlock: - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call SYMBOL(artUnlockObjectFromCode) // artUnlockObjectFromCode(object, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_unlock_object DEFINE_FUNCTION art_quick_unlock_object_no_inline - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME movq %gs:THREAD_SELF_OFFSET, %rsi // pass Thread::Current() call SYMBOL(artUnlockObjectFromCode) // artUnlockObjectFromCode(object, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO END_FUNCTION art_quick_unlock_object_no_inline @@ -1233,7 +1233,7 @@ DEFINE_FUNCTION art_quick_check_cast CFI_ADJUST_CFA_OFFSET(-8) POP rsi // Pop arguments POP rdi - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context mov %gs:THREAD_SELF_OFFSET, %rdx // pass Thread::Current() call SYMBOL(artThrowClassCastException) // (Class* a, Class* b, Thread*) UNREACHABLE @@ -1410,7 +1410,7 @@ DEFINE_FUNCTION art_quick_aput_obj POP rsi POP rdi - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // Save all registers as basis for long jump context. + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // Save all registers as basis for long jump context. // Outgoing argument set up. movq %rdx, %rsi // Pass arg 2 = value. @@ -1427,11 +1427,11 @@ DEFINE_FUNCTION art_quick_memcpy END_FUNCTION art_quick_memcpy DEFINE_FUNCTION art_quick_test_suspend - SETUP_SAVE_EVERYTHING_CALLEE_SAVE_FRAME // save everything for GC + SETUP_SAVE_EVERYTHING_FRAME // save everything for GC // Outgoing argument set up movq %gs:THREAD_SELF_OFFSET, %rdi // pass Thread::Current() call SYMBOL(artTestSuspendFromCode) // (Thread*) - RESTORE_SAVE_EVERYTHING_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_EVERYTHING_FRAME // restore frame up to return address ret END_FUNCTION art_quick_test_suspend @@ -1473,22 +1473,22 @@ ONE_ARG_REF_DOWNCALL art_quick_get_obj_static, artGetObjStaticFromCode, RETURN_O DEFINE_FUNCTION art_quick_set64_static // new_val is already in %rdx movq 8(%rsp), %rsi // pass referrer - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // field_idx is in rdi movq %gs:THREAD_SELF_OFFSET, %rcx // pass Thread::Current() call SYMBOL(artSet64StaticFromCode) // (field_idx, referrer, new_val, Thread*) - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME // restore frame up to return address + RESTORE_SAVE_REFS_ONLY_FRAME // restore frame up to return address RETURN_IF_EAX_ZERO // return or deliver exception END_FUNCTION art_quick_set64_static DEFINE_FUNCTION art_quick_proxy_invoke_handler - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_RDI + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_RDI movq %gs:THREAD_SELF_OFFSET, %rdx // Pass Thread::Current(). movq %rsp, %rcx // Pass SP. call SYMBOL(artQuickProxyInvokeHandler) // (proxy method, receiver, Thread*, SP) - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME movq %rax, %xmm0 // Copy return value in case of float returns. RETURN_OR_DELIVER_PENDING_EXCEPTION END_FUNCTION art_quick_proxy_invoke_handler @@ -1531,13 +1531,13 @@ DEFINE_FUNCTION art_quick_imt_conflict_trampoline END_FUNCTION art_quick_imt_conflict_trampoline DEFINE_FUNCTION art_quick_resolution_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME movq %gs:THREAD_SELF_OFFSET, %rdx movq %rsp, %rcx call SYMBOL(artQuickResolutionTrampoline) // (called, receiver, Thread*, SP) movq %rax, %r10 // Remember returned code pointer in R10. movq (%rsp), %rdi // Load called method into RDI. - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME testq %r10, %r10 // If code pointer is null goto deliver pending exception. jz 1f jmp *%r10 // Tail call into method. @@ -1622,7 +1622,7 @@ END_FUNCTION art_quick_resolution_trampoline * Called to do a generic JNI down-call */ DEFINE_FUNCTION art_quick_generic_jni_trampoline - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME_WITH_METHOD_IN_RDI + SETUP_SAVE_REFS_AND_ARGS_FRAME_WITH_METHOD_IN_RDI movq %rsp, %rbp // save SP at (old) callee-save frame CFI_DEF_CFA_REGISTER(rbp) @@ -1755,11 +1755,11 @@ END_FUNCTION art_quick_generic_jni_trampoline * RSI, RDX, RCX, R8, R9 are arguments to that method. */ DEFINE_FUNCTION art_quick_to_interpreter_bridge - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME // Set up frame and save arguments. - movq %gs:THREAD_SELF_OFFSET, %rsi // RSI := Thread::Current() - movq %rsp, %rdx // RDX := sp + SETUP_SAVE_REFS_AND_ARGS_FRAME // Set up frame and save arguments. + movq %gs:THREAD_SELF_OFFSET, %rsi // RSI := Thread::Current() + movq %rsp, %rdx // RDX := sp call SYMBOL(artQuickToInterpreterBridge) // (method, Thread*, SP) - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME // TODO: no need to restore arguments in this case. + RESTORE_SAVE_REFS_AND_ARGS_FRAME // TODO: no need to restore arguments in this case. movq %rax, %xmm0 // Place return value also into floating point return value. RETURN_OR_DELIVER_PENDING_EXCEPTION // return or deliver exception END_FUNCTION art_quick_to_interpreter_bridge @@ -1772,12 +1772,12 @@ DEFINE_FUNCTION art_quick_instrumentation_entry int3 int3 #else - SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_AND_ARGS_FRAME movq %rdi, %r12 // Preserve method pointer in a callee-save. movq %gs:THREAD_SELF_OFFSET, %rdx // Pass thread. - movq FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-8(%rsp), %rcx // Pass return PC. + movq FRAME_SIZE_SAVE_REFS_AND_ARGS-8(%rsp), %rcx // Pass return PC. call SYMBOL(artInstrumentationMethodEntryFromCode) // (Method*, Object*, Thread*, LR) @@ -1785,9 +1785,9 @@ DEFINE_FUNCTION art_quick_instrumentation_entry movq %r12, %rdi // Reload method pointer. leaq art_quick_instrumentation_exit(%rip), %r12 // Set up return through instrumentation - movq %r12, FRAME_SIZE_REFS_AND_ARGS_CALLEE_SAVE-8(%rsp) // exit. + movq %r12, FRAME_SIZE_SAVE_REFS_AND_ARGS-8(%rsp) // exit. - RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_AND_ARGS_FRAME jmp *%rax // Tail call to intended method. #endif // __APPLE__ @@ -1796,7 +1796,7 @@ END_FUNCTION art_quick_instrumentation_entry DEFINE_FUNCTION art_quick_instrumentation_exit pushq LITERAL(0) // Push a fake return PC as there will be none on the stack. - SETUP_REFS_ONLY_CALLEE_SAVE_FRAME + SETUP_SAVE_REFS_ONLY_FRAME // We need to save rax and xmm0. We could use a callee-save from SETUP_REF_ONLY, but then // we would need to fully restore it. As there are a good number of callee-save registers, it @@ -1823,7 +1823,7 @@ DEFINE_FUNCTION art_quick_instrumentation_exit CFI_ADJUST_CFA_OFFSET(-8) POP rax // Restore integer result. - RESTORE_REFS_ONLY_CALLEE_SAVE_FRAME + RESTORE_SAVE_REFS_ONLY_FRAME addq LITERAL(8), %rsp // Drop fake return pc. @@ -1837,7 +1837,7 @@ END_FUNCTION art_quick_instrumentation_exit DEFINE_FUNCTION art_quick_deoptimize pushq %rsi // Entry point for a jump. Fake that we were called. // Use hidden arg. - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // Stack should be aligned now. movq %gs:THREAD_SELF_OFFSET, %rdi // Pass Thread. call SYMBOL(artDeoptimize) // artDeoptimize(Thread*) @@ -1849,7 +1849,7 @@ END_FUNCTION art_quick_deoptimize * will long jump to the interpreter bridge. */ DEFINE_FUNCTION art_quick_deoptimize_from_compiled_code - SETUP_SAVE_ALL_CALLEE_SAVE_FRAME + SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // Stack should be aligned now. movq %gs:THREAD_SELF_OFFSET, %rdi // Pass Thread. call SYMBOL(artDeoptimizeFromCompiledCode) // artDeoptimizeFromCompiledCode(Thread*) diff --git a/runtime/arch/x86_64/quick_method_frame_info_x86_64.h b/runtime/arch/x86_64/quick_method_frame_info_x86_64.h index aa75b56f2e..867522f3c1 100644 --- a/runtime/arch/x86_64/quick_method_frame_info_x86_64.h +++ b/runtime/arch/x86_64/quick_method_frame_info_x86_64.h @@ -55,13 +55,13 @@ static constexpr uint32_t kX86_64CalleeSaveFpEverythingSpills = constexpr uint32_t X86_64CalleeSaveCoreSpills(Runtime::CalleeSaveType type) { return kX86_64CalleeSaveAlwaysSpills | kX86_64CalleeSaveRefSpills | - (type == Runtime::kRefsAndArgs ? kX86_64CalleeSaveArgSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kX86_64CalleeSaveArgSpills : 0) | (type == Runtime::kSaveEverything ? kX86_64CalleeSaveEverythingSpills : 0); } constexpr uint32_t X86_64CalleeSaveFpSpills(Runtime::CalleeSaveType type) { return kX86_64CalleeSaveFpSpills | - (type == Runtime::kRefsAndArgs ? kX86_64CalleeSaveFpArgSpills : 0) | + (type == Runtime::kSaveRefsAndArgs ? kX86_64CalleeSaveFpArgSpills : 0) | (type == Runtime::kSaveEverything ? kX86_64CalleeSaveFpEverythingSpills : 0); } diff --git a/runtime/art_method-inl.h b/runtime/art_method-inl.h index 2421246259..1659f3333b 100644 --- a/runtime/art_method-inl.h +++ b/runtime/art_method-inl.h @@ -322,11 +322,11 @@ inline const char* ArtMethod::GetName() { return "<runtime internal resolution method>"; } else if (this == runtime->GetImtConflictMethod()) { return "<runtime internal imt conflict method>"; - } else if (this == runtime->GetCalleeSaveMethod(Runtime::kSaveAll)) { + } else if (this == runtime->GetCalleeSaveMethod(Runtime::kSaveAllCalleeSaves)) { return "<runtime internal callee-save all registers method>"; - } else if (this == runtime->GetCalleeSaveMethod(Runtime::kRefsOnly)) { + } else if (this == runtime->GetCalleeSaveMethod(Runtime::kSaveRefsOnly)) { return "<runtime internal callee-save reference registers method>"; - } else if (this == runtime->GetCalleeSaveMethod(Runtime::kRefsAndArgs)) { + } else if (this == runtime->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs)) { return "<runtime internal callee-save reference and argument registers method>"; } else { return "<unknown runtime internal method>"; diff --git a/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc b/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc index b12b1189c2..c045e841ba 100644 --- a/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc +++ b/runtime/entrypoints/quick/quick_dexcache_entrypoints.cc @@ -31,7 +31,7 @@ extern "C" mirror::Class* artInitializeStaticStorageFromCode(uint32_t type_idx, // A class may be accessing another class' fields when it doesn't have access, as access has been // given by inheritance. ScopedQuickEntrypointChecks sqec(self); - auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kRefsOnly); + auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kSaveRefsOnly); return ResolveVerifyAndClinit(type_idx, caller, self, true, false); } @@ -39,7 +39,7 @@ extern "C" mirror::Class* artInitializeTypeFromCode(uint32_t type_idx, Thread* s SHARED_REQUIRES(Locks::mutator_lock_) { // Called when method->dex_cache_resolved_types_[] misses. ScopedQuickEntrypointChecks sqec(self); - auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kRefsOnly); + auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kSaveRefsOnly); return ResolveVerifyAndClinit(type_idx, caller, self, false, false); } @@ -48,14 +48,14 @@ extern "C" mirror::Class* artInitializeTypeAndVerifyAccessFromCode(uint32_t type // Called when caller isn't guaranteed to have access to a type and the dex cache may be // unpopulated. ScopedQuickEntrypointChecks sqec(self); - auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kRefsOnly); + auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kSaveRefsOnly); return ResolveVerifyAndClinit(type_idx, caller, self, false, true); } extern "C" mirror::String* artResolveStringFromCode(int32_t string_idx, Thread* self) SHARED_REQUIRES(Locks::mutator_lock_) { ScopedQuickEntrypointChecks sqec(self); - auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kRefsOnly); + auto* caller = GetCalleeSaveMethodCaller(self, Runtime::kSaveRefsOnly); return ResolveStringFromCode(caller, string_idx); } diff --git a/runtime/entrypoints/quick/quick_instrumentation_entrypoints.cc b/runtime/entrypoints/quick/quick_instrumentation_entrypoints.cc index b5e560f23b..82d5467c49 100644 --- a/runtime/entrypoints/quick/quick_instrumentation_entrypoints.cc +++ b/runtime/entrypoints/quick/quick_instrumentation_entrypoints.cc @@ -56,7 +56,7 @@ extern "C" TwoWordReturn artInstrumentationMethodExitFromCode(Thread* self, ArtM CHECK(!self->IsExceptionPending()) << "Enter instrumentation exit stub with pending exception " << self->GetException()->Dump(); // Compute address of return PC and sanity check that it currently holds 0. - size_t return_pc_offset = GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kRefsOnly); + size_t return_pc_offset = GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kSaveRefsOnly); uintptr_t* return_pc = reinterpret_cast<uintptr_t*>(reinterpret_cast<uint8_t*>(sp) + return_pc_offset); CHECK_EQ(*return_pc, 0U); diff --git a/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc b/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc index 9678079d7c..c67379a1dd 100644 --- a/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc +++ b/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc @@ -46,7 +46,7 @@ class QuickArgumentVisitor { static constexpr size_t kBytesStackArgLocation = 4; // Frame size in bytes of a callee-save frame for RefsAndArgs. static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_FrameSize = - GetCalleeSaveFrameSize(kRuntimeISA, Runtime::kRefsAndArgs); + GetCalleeSaveFrameSize(kRuntimeISA, Runtime::kSaveRefsAndArgs); #if defined(__arm__) // The callee save frame is pointed to by SP. // | argN | | @@ -75,11 +75,11 @@ class QuickArgumentVisitor { static constexpr size_t kNumQuickFprArgs = kArm32QuickCodeUseSoftFloat ? 0 : 16; static constexpr bool kGprFprLockstep = false; static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_Fpr1Offset = - arm::ArmCalleeSaveFpr1Offset(Runtime::kRefsAndArgs); // Offset of first FPR arg. + arm::ArmCalleeSaveFpr1Offset(Runtime::kSaveRefsAndArgs); // Offset of first FPR arg. static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_Gpr1Offset = - arm::ArmCalleeSaveGpr1Offset(Runtime::kRefsAndArgs); // Offset of first GPR arg. + arm::ArmCalleeSaveGpr1Offset(Runtime::kSaveRefsAndArgs); // Offset of first GPR arg. static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_LrOffset = - arm::ArmCalleeSaveLrOffset(Runtime::kRefsAndArgs); // Offset of return address. + arm::ArmCalleeSaveLrOffset(Runtime::kSaveRefsAndArgs); // Offset of return address. static size_t GprIndexToGprOffset(uint32_t gpr_index) { return gpr_index * GetBytesPerGprSpillLocation(kRuntimeISA); } @@ -113,11 +113,11 @@ class QuickArgumentVisitor { static constexpr size_t kNumQuickFprArgs = 8; // 8 arguments passed in FPRs. static constexpr bool kGprFprLockstep = false; static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_Fpr1Offset = - arm64::Arm64CalleeSaveFpr1Offset(Runtime::kRefsAndArgs); // Offset of first FPR arg. + arm64::Arm64CalleeSaveFpr1Offset(Runtime::kSaveRefsAndArgs); // Offset of first FPR arg. static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_Gpr1Offset = - arm64::Arm64CalleeSaveGpr1Offset(Runtime::kRefsAndArgs); // Offset of first GPR arg. + arm64::Arm64CalleeSaveGpr1Offset(Runtime::kSaveRefsAndArgs); // Offset of first GPR arg. static constexpr size_t kQuickCalleeSaveFrame_RefAndArgs_LrOffset = - arm64::Arm64CalleeSaveLrOffset(Runtime::kRefsAndArgs); // Offset of return address. + arm64::Arm64CalleeSaveLrOffset(Runtime::kSaveRefsAndArgs); // Offset of return address. static size_t GprIndexToGprOffset(uint32_t gpr_index) { return gpr_index * GetBytesPerGprSpillLocation(kRuntimeISA); } @@ -307,7 +307,7 @@ class QuickArgumentVisitor { static ArtMethod* GetCallingMethod(ArtMethod** sp) SHARED_REQUIRES(Locks::mutator_lock_) { DCHECK((*sp)->IsCalleeSaveMethod()); - return GetCalleeSaveMethodCaller(sp, Runtime::kRefsAndArgs); + return GetCalleeSaveMethodCaller(sp, Runtime::kSaveRefsAndArgs); } static ArtMethod* GetOuterMethod(ArtMethod** sp) SHARED_REQUIRES(Locks::mutator_lock_) { @@ -319,7 +319,7 @@ class QuickArgumentVisitor { static uint32_t GetCallingDexPc(ArtMethod** sp) SHARED_REQUIRES(Locks::mutator_lock_) { DCHECK((*sp)->IsCalleeSaveMethod()); - const size_t callee_frame_size = GetCalleeSaveFrameSize(kRuntimeISA, Runtime::kRefsAndArgs); + const size_t callee_frame_size = GetCalleeSaveFrameSize(kRuntimeISA, Runtime::kSaveRefsAndArgs); ArtMethod** caller_sp = reinterpret_cast<ArtMethod**>( reinterpret_cast<uintptr_t>(sp) + callee_frame_size); uintptr_t outer_pc = QuickArgumentVisitor::GetCallingPc(sp); @@ -2054,7 +2054,7 @@ template<InvokeType type, bool access_check> static TwoWordReturn artInvokeCommon(uint32_t method_idx, mirror::Object* this_object, Thread* self, ArtMethod** sp) { ScopedQuickEntrypointChecks sqec(self); - DCHECK_EQ(*sp, Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsAndArgs)); + DCHECK_EQ(*sp, Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs)); ArtMethod* caller_method = QuickArgumentVisitor::GetCallingMethod(sp); ArtMethod* method = FindMethodFast(method_idx, this_object, caller_method, access_check, type); if (UNLIKELY(method == nullptr)) { diff --git a/runtime/entrypoints/quick/quick_trampoline_entrypoints_test.cc b/runtime/entrypoints/quick/quick_trampoline_entrypoints_test.cc index 01e22a4a7d..553c092f69 100644 --- a/runtime/entrypoints/quick/quick_trampoline_entrypoints_test.cc +++ b/runtime/entrypoints/quick/quick_trampoline_entrypoints_test.cc @@ -80,10 +80,16 @@ class QuickTrampolineEntrypointsTest : public CommonRuntimeTest { // This test ensures that kQuickCalleeSaveFrame_RefAndArgs_FrameSize is correct. TEST_F(QuickTrampolineEntrypointsTest, FrameSize) { // We have to use a define here as the callee_save_frame.h functions are constexpr. -#define CHECK_FRAME_SIZE(isa) \ - CheckFrameSize(isa, Runtime::kRefsAndArgs, GetCalleeSaveFrameSize(isa, Runtime::kRefsAndArgs)); \ - CheckFrameSize(isa, Runtime::kRefsOnly, GetCalleeSaveFrameSize(isa, Runtime::kRefsOnly)); \ - CheckFrameSize(isa, Runtime::kSaveAll, GetCalleeSaveFrameSize(isa, Runtime::kSaveAll)) +#define CHECK_FRAME_SIZE(isa) \ + CheckFrameSize(isa, \ + Runtime::kSaveRefsAndArgs, \ + GetCalleeSaveFrameSize(isa, Runtime::kSaveRefsAndArgs)); \ + CheckFrameSize(isa, \ + Runtime::kSaveRefsOnly, \ + GetCalleeSaveFrameSize(isa, Runtime::kSaveRefsOnly)); \ + CheckFrameSize(isa, \ + Runtime::kSaveAllCalleeSaves, \ + GetCalleeSaveFrameSize(isa, Runtime::kSaveAllCalleeSaves)) CHECK_FRAME_SIZE(kArm); CHECK_FRAME_SIZE(kArm64); @@ -108,12 +114,12 @@ TEST_F(QuickTrampolineEntrypointsTest, ReturnPC) { // Ensure that the computation in callee_save_frame.h correct. // Note: we can only check against the kRuntimeISA, because the ArtMethod computation uses // sizeof(void*), which is wrong when the target bitwidth is not the same as the host's. - CheckPCOffset(kRuntimeISA, Runtime::kRefsAndArgs, - GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kRefsAndArgs)); - CheckPCOffset(kRuntimeISA, Runtime::kRefsOnly, - GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kRefsOnly)); - CheckPCOffset(kRuntimeISA, Runtime::kSaveAll, - GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kSaveAll)); + CheckPCOffset(kRuntimeISA, Runtime::kSaveRefsAndArgs, + GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kSaveRefsAndArgs)); + CheckPCOffset(kRuntimeISA, Runtime::kSaveRefsOnly, + GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kSaveRefsOnly)); + CheckPCOffset(kRuntimeISA, Runtime::kSaveAllCalleeSaves, + GetCalleeSaveReturnPcOffset(kRuntimeISA, Runtime::kSaveAllCalleeSaves)); } } // namespace art diff --git a/runtime/gc/space/image_space.cc b/runtime/gc/space/image_space.cc index 8ade18510a..c2e2a1edd2 100644 --- a/runtime/gc/space/image_space.cc +++ b/runtime/gc/space/image_space.cc @@ -1430,12 +1430,12 @@ ImageSpace* ImageSpace::Init(const char* image_filename, image_header->GetImageMethod(ImageHeader::kImtConflictMethod)); CHECK_EQ(runtime->GetImtUnimplementedMethod(), image_header->GetImageMethod(ImageHeader::kImtUnimplementedMethod)); - CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kSaveAll), - image_header->GetImageMethod(ImageHeader::kCalleeSaveMethod)); - CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kRefsOnly), - image_header->GetImageMethod(ImageHeader::kRefsOnlySaveMethod)); - CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kRefsAndArgs), - image_header->GetImageMethod(ImageHeader::kRefsAndArgsSaveMethod)); + CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kSaveAllCalleeSaves), + image_header->GetImageMethod(ImageHeader::kSaveAllCalleeSavesMethod)); + CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kSaveRefsOnly), + image_header->GetImageMethod(ImageHeader::kSaveRefsOnlyMethod)); + CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs), + image_header->GetImageMethod(ImageHeader::kSaveRefsAndArgsMethod)); CHECK_EQ(runtime->GetCalleeSaveMethod(Runtime::kSaveEverything), image_header->GetImageMethod(ImageHeader::kSaveEverythingMethod)); } else if (!runtime->HasResolutionMethod()) { @@ -1445,11 +1445,13 @@ ImageSpace* ImageSpace::Init(const char* image_filename, runtime->SetImtUnimplementedMethod( image_header->GetImageMethod(ImageHeader::kImtUnimplementedMethod)); runtime->SetCalleeSaveMethod( - image_header->GetImageMethod(ImageHeader::kCalleeSaveMethod), Runtime::kSaveAll); + image_header->GetImageMethod(ImageHeader::kSaveAllCalleeSavesMethod), + Runtime::kSaveAllCalleeSaves); runtime->SetCalleeSaveMethod( - image_header->GetImageMethod(ImageHeader::kRefsOnlySaveMethod), Runtime::kRefsOnly); + image_header->GetImageMethod(ImageHeader::kSaveRefsOnlyMethod), Runtime::kSaveRefsOnly); runtime->SetCalleeSaveMethod( - image_header->GetImageMethod(ImageHeader::kRefsAndArgsSaveMethod), Runtime::kRefsAndArgs); + image_header->GetImageMethod(ImageHeader::kSaveRefsAndArgsMethod), + Runtime::kSaveRefsAndArgs); runtime->SetCalleeSaveMethod( image_header->GetImageMethod(ImageHeader::kSaveEverythingMethod), Runtime::kSaveEverything); } diff --git a/runtime/generated/asm_support_gen.h b/runtime/generated/asm_support_gen.h index 3d3cc4e049..96924722d8 100644 --- a/runtime/generated/asm_support_gen.h +++ b/runtime/generated/asm_support_gen.h @@ -26,14 +26,14 @@ DEFINE_CHECK_EQ(static_cast<size_t>(STACK_REFERENCE_SIZE), (static_cast<size_t>( DEFINE_CHECK_EQ(static_cast<size_t>(COMPRESSED_REFERENCE_SIZE), (static_cast<size_t>(sizeof(art::mirror::CompressedReference<art::mirror::Object>)))) #define COMPRESSED_REFERENCE_SIZE_SHIFT 0x2 DEFINE_CHECK_EQ(static_cast<size_t>(COMPRESSED_REFERENCE_SIZE_SHIFT), (static_cast<size_t>(art::WhichPowerOf2(sizeof(art::mirror::CompressedReference<art::mirror::Object>))))) -#define RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET 0 -DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_ALL_CALLEE_SAVE_FRAME_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveAll)))) -#define RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET 0x8 -DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_REFS_ONLY_CALLEE_SAVE_FRAME_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kRefsOnly)))) -#define RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET 0x10 -DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_REFS_AND_ARGS_CALLEE_SAVE_FRAME_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kRefsAndArgs)))) -#define RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET 0x18 -DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_EVERYTHING_CALLEE_SAVE_FRAME_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveEverything)))) +#define RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET 0 +DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_ALL_CALLEE_SAVES_METHOD_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveAllCalleeSaves)))) +#define RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET 0x8 +DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_REFS_ONLY_METHOD_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveRefsOnly)))) +#define RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET 0x10 +DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_REFS_AND_ARGS_METHOD_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveRefsAndArgs)))) +#define RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET 0x18 +DEFINE_CHECK_EQ(static_cast<size_t>(RUNTIME_SAVE_EVERYTHING_METHOD_OFFSET), (static_cast<size_t>(art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: kSaveEverything)))) #define THREAD_FLAGS_OFFSET 0 DEFINE_CHECK_EQ(static_cast<int32_t>(THREAD_FLAGS_OFFSET), (static_cast<int32_t>(art::Thread:: ThreadFlagsOffset<art::kRuntimePointerSize>().Int32Value()))) #define THREAD_ID_OFFSET 12 diff --git a/runtime/image.h b/runtime/image.h index 207a8189a2..9ff18d6133 100644 --- a/runtime/image.h +++ b/runtime/image.h @@ -183,9 +183,9 @@ class PACKED(4) ImageHeader { kResolutionMethod, kImtConflictMethod, kImtUnimplementedMethod, - kCalleeSaveMethod, - kRefsOnlySaveMethod, - kRefsAndArgsSaveMethod, + kSaveAllCalleeSavesMethod, + kSaveRefsOnlyMethod, + kSaveRefsAndArgsMethod, kSaveEverythingMethod, kImageMethodsCount, // Number of elements in enum. }; diff --git a/runtime/instrumentation.cc b/runtime/instrumentation.cc index 61ffe4451f..4a86e36139 100644 --- a/runtime/instrumentation.cc +++ b/runtime/instrumentation.cc @@ -356,7 +356,7 @@ static void InstrumentationRestoreStack(Thread* thread, void* arg) LOG(INFO) << " Removing exit stub in " << DescribeLocation(); } if (instrumentation_frame.interpreter_entry_) { - CHECK(m == Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsAndArgs)); + CHECK(m == Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs)); } else { CHECK(m == instrumentation_frame.method_) << PrettyMethod(m); } diff --git a/runtime/runtime-inl.h b/runtime/runtime-inl.h index 265587dc5c..3245ba0772 100644 --- a/runtime/runtime-inl.h +++ b/runtime/runtime-inl.h @@ -41,12 +41,12 @@ inline QuickMethodFrameInfo Runtime::GetRuntimeMethodFrameInfo(ArtMethod* method DCHECK_NE(method, GetImtConflictMethod()); DCHECK_NE(method, GetResolutionMethod()); // Don't use GetCalleeSaveMethod(), some tests don't set all callee save methods. - if (method == GetCalleeSaveMethodUnchecked(Runtime::kRefsAndArgs)) { - return GetCalleeSaveMethodFrameInfo(Runtime::kRefsAndArgs); - } else if (method == GetCalleeSaveMethodUnchecked(Runtime::kSaveAll)) { - return GetCalleeSaveMethodFrameInfo(Runtime::kSaveAll); - } else if (method == GetCalleeSaveMethodUnchecked(Runtime::kRefsOnly)) { - return GetCalleeSaveMethodFrameInfo(Runtime::kRefsOnly); + if (method == GetCalleeSaveMethodUnchecked(Runtime::kSaveRefsAndArgs)) { + return GetCalleeSaveMethodFrameInfo(Runtime::kSaveRefsAndArgs); + } else if (method == GetCalleeSaveMethodUnchecked(Runtime::kSaveAllCalleeSaves)) { + return GetCalleeSaveMethodFrameInfo(Runtime::kSaveAllCalleeSaves); + } else if (method == GetCalleeSaveMethodUnchecked(Runtime::kSaveRefsOnly)) { + return GetCalleeSaveMethodFrameInfo(Runtime::kSaveRefsOnly); } else { DCHECK_EQ(method, GetCalleeSaveMethodUnchecked(Runtime::kSaveEverything)); return GetCalleeSaveMethodFrameInfo(Runtime::kSaveEverything); diff --git a/runtime/runtime.h b/runtime/runtime.h index c935c90330..c971646195 100644 --- a/runtime/runtime.h +++ b/runtime/runtime.h @@ -383,11 +383,11 @@ class Runtime { // Returns a special method that describes all callee saves being spilled to the stack. enum CalleeSaveType { - kSaveAll, // All callee-save registers. - kRefsOnly, - kRefsAndArgs, - kSaveEverything, // Even caller-save registers. - kLastCalleeSaveType // Value used for iteration + kSaveAllCalleeSaves, // All callee-save registers. + kSaveRefsOnly, // Only those callee-save registers that can hold references. + kSaveRefsAndArgs, // References (see above) and arguments (usually caller-save registers). + kSaveEverything, // All registers, including both callee-save and caller-save. + kLastCalleeSaveType // Value used for iteration }; bool HasCalleeSaveMethod(CalleeSaveType type) const { diff --git a/runtime/stack.cc b/runtime/stack.cc index dc5cada47b..ababf785c8 100644 --- a/runtime/stack.cc +++ b/runtime/stack.cc @@ -729,7 +729,7 @@ QuickMethodFrameInfo StackVisitor::GetCurrentQuickFrameInfo() const { Runtime* runtime = Runtime::Current(); if (method->IsAbstract()) { - return runtime->GetCalleeSaveMethodFrameInfo(Runtime::kRefsAndArgs); + return runtime->GetCalleeSaveMethodFrameInfo(Runtime::kSaveRefsAndArgs); } // This goes before IsProxyMethod since runtime methods have a null declaring class. @@ -743,7 +743,7 @@ QuickMethodFrameInfo StackVisitor::GetCurrentQuickFrameInfo() const { // compiled method without any stubs. Therefore the method must have a OatQuickMethodHeader. DCHECK(!method->IsDirect() && !method->IsConstructor()) << "Constructors of proxy classes must have a OatQuickMethodHeader"; - return runtime->GetCalleeSaveMethodFrameInfo(Runtime::kRefsAndArgs); + return runtime->GetCalleeSaveMethodFrameInfo(Runtime::kSaveRefsAndArgs); } // The only remaining case is if the method is native and uses the generic JNI stub. @@ -755,7 +755,8 @@ QuickMethodFrameInfo StackVisitor::GetCurrentQuickFrameInfo() const { // Generic JNI frame. uint32_t handle_refs = GetNumberOfReferenceArgsWithoutReceiver(method) + 1; size_t scope_size = HandleScope::SizeOf(handle_refs); - QuickMethodFrameInfo callee_info = runtime->GetCalleeSaveMethodFrameInfo(Runtime::kRefsAndArgs); + QuickMethodFrameInfo callee_info = + runtime->GetCalleeSaveMethodFrameInfo(Runtime::kSaveRefsAndArgs); // Callee saves + handle scope + method ref + alignment // Note: -sizeof(void*) since callee-save frame stores a whole method pointer. @@ -833,10 +834,12 @@ void StackVisitor::WalkStack(bool include_transitions) { const instrumentation::InstrumentationStackFrame& instrumentation_frame = GetInstrumentationStackFrame(thread_, instrumentation_stack_depth); instrumentation_stack_depth++; - if (GetMethod() == Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveAll)) { + if (GetMethod() == + Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveAllCalleeSaves)) { // Skip runtime save all callee frames which are used to deliver exceptions. } else if (instrumentation_frame.interpreter_entry_) { - ArtMethod* callee = Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsAndArgs); + ArtMethod* callee = + Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveRefsAndArgs); CHECK_EQ(GetMethod(), callee) << "Expected: " << PrettyMethod(callee) << " Found: " << PrettyMethod(GetMethod()); } else { diff --git a/tools/cpp-define-generator/offset_runtime.def b/tools/cpp-define-generator/offset_runtime.def index 123992f473..17167a0605 100644 --- a/tools/cpp-define-generator/offset_runtime.def +++ b/tools/cpp-define-generator/offset_runtime.def @@ -25,15 +25,15 @@ // Note: these callee save methods loads require read barriers. #define DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(field_name, constant_name) \ - DEFINE_OFFSET_EXPR(Runtime, field_name ## _CALLEE_SAVE_FRAME, size_t, art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: constant_name)) + DEFINE_OFFSET_EXPR(Runtime, field_name ## _METHOD, size_t, art::Runtime::GetCalleeSaveMethodOffset(art::Runtime:: constant_name)) // Macro substring Constant name -// Offset of field Runtime::callee_save_methods_[kSaveAll] -DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(SAVE_ALL, kSaveAll) -// Offset of field Runtime::callee_save_methods_[kRefsOnly] -DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(REFS_ONLY, kRefsOnly) -// Offset of field Runtime::callee_save_methods_[kRefsAndArgs] -DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(REFS_AND_ARGS, kRefsAndArgs) +// Offset of field Runtime::callee_save_methods_[kSaveAllCalleeSaves] +DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(SAVE_ALL_CALLEE_SAVES, kSaveAllCalleeSaves) +// Offset of field Runtime::callee_save_methods_[kSaveRefsOnly] +DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(SAVE_REFS_ONLY, kSaveRefsOnly) +// Offset of field Runtime::callee_save_methods_[kSaveRefsAndArgs] +DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(SAVE_REFS_AND_ARGS, kSaveRefsAndArgs) // Offset of field Runtime::callee_save_methods_[kSaveEverything] DEFINE_RUNTIME_CALLEE_SAVE_OFFSET(SAVE_EVERYTHING, kSaveEverything) |