diff options
-rw-r--r-- | compiler/optimizing/code_generator_riscv64.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/compiler/optimizing/code_generator_riscv64.cc b/compiler/optimizing/code_generator_riscv64.cc index 2f253885cc..9280ad498a 100644 --- a/compiler/optimizing/code_generator_riscv64.cc +++ b/compiler/optimizing/code_generator_riscv64.cc @@ -2114,13 +2114,21 @@ void InstructionCodeGeneratorRISCV64::VisitInvokeStaticOrDirect( } void LocationsBuilderRISCV64::VisitInvokeVirtual(HInvokeVirtual* instruction) { - UNUSED(instruction); - LOG(FATAL) << "Unimplemented"; + IntrinsicLocationsBuilderRISCV64 intrinsic(GetGraph()->GetAllocator(), codegen_); + if (intrinsic.TryDispatch(instruction)) { + return; + } + + HandleInvoke(instruction); } void InstructionCodeGeneratorRISCV64::VisitInvokeVirtual(HInvokeVirtual* instruction) { - UNUSED(instruction); - LOG(FATAL) << "Unimplemented"; + if (TryGenerateIntrinsicCode(instruction, codegen_)) { + return; + } + + codegen_->GenerateVirtualCall(instruction, instruction->GetLocations()->GetTemp(0)); + DCHECK(!codegen_->IsLeafMethod()); } void LocationsBuilderRISCV64::VisitInvokePolymorphic(HInvokePolymorphic* instruction) { |