You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[RISC-V][LoongArch64] JIT: pass structs according to floating-point calling convention properly (#104237)
* Replace StructFloatFieldInfoFlags with FpStructInRegistersInfo which carries also exact field sizes and offsets
* Replace StructFloatFieldInfoFlags with FpStruct::Flags in profiler
* Remove FpStructInRegistersInfo::FromOldFlags()
* Fix duplicating types in HandleInlineArray
* Remove signedness from FpStruct::IntKind because most probably we won't need it
* Remove old StructFloatFieldInfoFlags calculating routine
* Typo in TARGET_LOONGARCH64
* Remove m_returnedFpFieldOffsets from ArgIterator
* Add missing ENREGISTERED_PARAMTYPE_MAXSIZE condition to C# version of FpStruct info calculation
* Rename RISCV64PassStructInRegister to match settled casing for RiscV in class names
* Update hardcoded flags for float and double in ArgIteratorTemplate::ComputeReturnFlags()
This fixes JIT/HardwareIntrinsics/General/Vector* tests.
* Fix build on other platforms
* Update LoongArch to use FpStructInRegistersInfo
* Remove unused old flag masks
* LoongArch64 typo
Co-authored-by: Qiao Pengcheng <[email protected]>
* Missing FpStruct namespace
Co-authored-by: Qiao Pengcheng <[email protected]>
* Missing FpStruct namespace
Co-authored-by: Qiao Pengcheng <[email protected]>
* Missing FpStruct namespace
Co-authored-by: Qiao Pengcheng <[email protected]>
* Use FpStruct namespace everywhere in JIT
* Add tests
* Fix passing FP structs in JIT
* Remove CallArgABIInformation.StructFloatFieldType and Offset because they were write-only. Replace with offset from new ABI info
* Remove CallArgABIInformation.StructDesc on System V because it was write-only
* Remove unused local vars from ABIPassingInformation::Classify
* Pass variables after the tested struct to detect potential register/stack slot over-allocation
* Add test for two-field but one-slot struct. Fix assertion bug that it uncovered
* Add sanity check for empty struct passing, disable on RISC-V and System V
* Format
* JIT review
* Update StructFloatFieldInfoFlags description
* Revert to hitherto instruction set order as it's not the point of this PR
* Disable Test_Empty_Sanity on arm32 due to bug in Clang
* Add ActiveIssue on arm and arm64
* Exclude arm64 from Test_PackedEmptyFloatLong*_RiscV
* Unify get{LoongArch,RiscV}64PassFpStructInRegistersInfo JIT interfaces
* Use JIT_TO_EE_TRANSITION instead of _LEAF because MethodTable::GetFpStructInRegistersInfo may throw
* Remove FpStruct::IntKind, we should have similar info in ClassLayout in JIT
* Change JIT interface to return a struct similar to CORINFO_SWIFT_LOWERING to facilitate code unification in the future
* Change JIT to use new Swift-like getFpStructLowering
* Cache CORINFO_FPSTRUCT_LOWERING
* Update LoongArch classifier to use CORINFO_FPSTRUCT_LOWERING
* Update StructFloatInfoFlags doc comment on C#
* Add arm32 clang issue
* Move StructFloatFieldInfoFlags and FpStructInRegistersInfo out of the JIT interface
* Merge LoongArch and RISC-V AOT calculation of FpStructInRegistersInfo because they were identical. Move it to Common\Internal/Runtime because it's no longer exposed in JIT interface.
* Don't zero-initialize CORINFO_FPSTRUCT_LOWERING
* Update LoongArch classifier
* Fix assert for two-field structs smaller than 8 bytes, add test
0 commit comments