diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index a04bd56057abb0..f747c29597b51b 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -1078,7 +1078,7 @@ var_types Compiler::getReturnTypeForStruct(CORINFO_CLASS_HANDLE clsHnd, #elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64) - // On LOONGARCH64 struct that is 1-16 bytes is returned by value in one/two register(s) + // On LOONGARCH64/RISCV64 struct that is 1-16 bytes is returned by value in one/two register(s) howToReturnStruct = SPK_ByValue; useType = TYP_STRUCT; diff --git a/src/coreclr/vm/methodtable.cpp b/src/coreclr/vm/methodtable.cpp index 1016a80971b7a0..ac53856c669b55 100644 --- a/src/coreclr/vm/methodtable.cpp +++ b/src/coreclr/vm/methodtable.cpp @@ -4059,6 +4059,12 @@ int MethodTable::GetRiscv64PassStructInRegisterFlags(CORINFO_CLASS_HANDLE cls) { size |= STRUCT_SECOND_FIELD_SIZE_IS8; } + + // Pass with two integer registers in `struct {int a, int b, float/double c}` cases + if ((size | STRUCT_FIRST_FIELD_SIZE_IS8 | STRUCT_FLOAT_FIELD_SECOND) == size) + { + size = STRUCT_NO_FLOAT_FIELD; + } } else if (fieldType == ELEMENT_TYPE_VALUETYPE) {