From 684c2e7bc64d24b3342c01fd18c07971b65f1ea6 Mon Sep 17 00:00:00 2001 From: Dong-Heon Jung Date: Tue, 12 Mar 2024 21:50:12 +0900 Subject: [PATCH 1/2] [RISC-V] Fix struct info value in crossgen2 --- .../tools/Common/JitInterface/RISCV64PassStructInRegister.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs b/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs index d6c820b8f904c9..9f33bf6936f863 100644 --- a/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs +++ b/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs @@ -153,7 +153,7 @@ public static uint GetRISCV64PassStructInRegisterFlags(TypeDesc typeDesc) Debug.Assert(fieldIndex == 1); if ((floatFieldFlags2 & (uint)StructFloatFieldInfoFlags.STRUCT_FLOAT_FIELD_ONLY_ONE) != 0) { - floatFieldFlags |= (uint)StructFloatFieldInfoFlags.STRUCT_MERGE_FIRST_SECOND; + floatFieldFlags |= (uint)StructFloatFieldInfoFlags.STRUCT_FLOAT_FIELD_SECOND; } if (field.FieldType.GetElementSize().AsInt == 8) { From 761237d9ea8efe8deae70505b251290aa5f7cdb0 Mon Sep 17 00:00:00 2001 From: Dong-Heon Jung Date: Fri, 15 Mar 2024 20:38:07 +0900 Subject: [PATCH 2/2] [RISC-V] Fix assertion in crossgen Asserts in `./Interop/StructMarshalling/PInvoke/MarshalStructAsLayoutExp/MarshalStructAsLayoutExp.sh` Error message is `Assertion failed 'roundUp(structSize, TARGET_POINTER_SIZE) == roundUp(loadExtent, TARGET_POINTER_SIZE)' in 'Managed:MarshalStructAsParam_AsExpByVal(int)' during 'Morph - Global' (IL size 2208; hash 0x9fd9734a; MinOpts)` Copied missed codes of GetRiscV64PassStructInRegiste in vm to crossgen2 --- .../Common/JitInterface/RISCV64PassStructInRegister.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs b/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs index 9f33bf6936f863..8edac07cdfa1f9 100644 --- a/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs +++ b/src/coreclr/tools/Common/JitInterface/RISCV64PassStructInRegister.cs @@ -56,6 +56,13 @@ public static uint GetRISCV64PassStructInRegisterFlags(TypeDesc typeDesc) { continue; } + else if (fieldIndex == 1) + { + if (firstField.Offset.AsInt != 0 || field.Offset.AsInt == 0 || firstFieldSize > field.Offset.AsInt) + { + return (uint)StructFloatFieldInfoFlags.STRUCT_NO_FLOAT_FIELD; + } + } Debug.Assert(fieldIndex < numIntroducedFields);