diff options
author | 2023-10-13 10:28:36 +0000 | |
---|---|---|
committer | 2023-10-17 11:56:00 +0000 | |
commit | d5c097bcda44e237ecabcdba9b3dca2348289138 (patch) | |
tree | 46be9f64c07e806c8c1f68e19ac09b0d41f8a635 /compiler/optimizing/optimization.cc | |
parent | f7bd87edf3b80ce3bbd6e571fd119c878cb79992 (diff) |
riscv64: Implement `CriticalNativeAbiFixupRiscv64`.
And pass integral stack args sign-extended to 64 bits for
direct @CriticalNative calls. Enable direct @CriticalNative
call codegen unconditionally and also enable `HClinitCheck`
codegen and extend the 178-app-image-native-method run-test
to properly test these use cases.
Test: # Edit `run-test` to disable checker, then
testrunner.py --target --64 --ndebug --optimizing
# Ignore 6 pre-existing failures (down from 7).
Bug: 283082089
Change-Id: Ia514c62006c7079b04182cc39e413eb2deb089c1
Diffstat (limited to 'compiler/optimizing/optimization.cc')
-rw-r--r-- | compiler/optimizing/optimization.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/compiler/optimizing/optimization.cc b/compiler/optimizing/optimization.cc index 4f20b55c7e..21b3c8558e 100644 --- a/compiler/optimizing/optimization.cc +++ b/compiler/optimizing/optimization.cc @@ -23,6 +23,9 @@ #ifdef ART_ENABLE_CODEGEN_arm64 #include "instruction_simplifier_arm64.h" #endif +#ifdef ART_ENABLE_CODEGEN_riscv64 +#include "critical_native_abi_fixup_riscv64.h" +#endif #ifdef ART_ENABLE_CODEGEN_x86 #include "pc_relative_fixups_x86.h" #include "instruction_simplifier_x86.h" @@ -109,6 +112,10 @@ const char* OptimizationPassName(OptimizationPass pass) { case OptimizationPass::kInstructionSimplifierArm64: return arm64::InstructionSimplifierArm64::kInstructionSimplifierArm64PassName; #endif +#ifdef ART_ENABLE_CODEGEN_riscv64 + case OptimizationPass::kCriticalNativeAbiFixupRiscv64: + return riscv64::CriticalNativeAbiFixupRiscv64::kCriticalNativeAbiFixupRiscv64PassName; +#endif #ifdef ART_ENABLE_CODEGEN_x86 case OptimizationPass::kPcRelativeFixupsX86: return x86::PcRelativeFixups::kPcRelativeFixupsX86PassName; @@ -155,6 +162,9 @@ OptimizationPass OptimizationPassByName(const std::string& pass_name) { #ifdef ART_ENABLE_CODEGEN_arm64 X(OptimizationPass::kInstructionSimplifierArm64); #endif +#ifdef ART_ENABLE_CODEGEN_riscv64 + X(OptimizationPass::kCriticalNativeAbiFixupRiscv64); +#endif #ifdef ART_ENABLE_CODEGEN_x86 X(OptimizationPass::kPcRelativeFixupsX86); X(OptimizationPass::kX86MemoryOperandGeneration); @@ -303,6 +313,12 @@ ArenaVector<HOptimization*> ConstructOptimizations( opt = new (allocator) arm64::InstructionSimplifierArm64(graph, stats); break; #endif +#ifdef ART_ENABLE_CODEGEN_riscv64 + case OptimizationPass::kCriticalNativeAbiFixupRiscv64: + DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name"; + opt = new (allocator) riscv64::CriticalNativeAbiFixupRiscv64(graph, stats); + break; +#endif #ifdef ART_ENABLE_CODEGEN_x86 case OptimizationPass::kPcRelativeFixupsX86: DCHECK(alt_name == nullptr) << "arch-specific pass does not support alternative name"; |