[RISC-V] Need to configure target RISC-V extension for coreclr build
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Needs clarification
- Activity status
- Stale
- Tech stack
- cmake, cpp
- Domain
- build-system, compilers
Research direction
Start with eng/native/configurecompiler.cmake around the ARM options and CLR_ADDITIONAL_COMPILER_OPTIONS, then inspect src/coreclr/jit/emitriscv64.cpp near emitLoadImmediate. Determine which RISC-V extension configuration approach is intended among the proposals. Done means the selected configuration is wired into the coreclr build and enables the relevant compiler extensions.
Written by the indexing model from the issue text.
Description
There is a need to enable certain extensions for RISC-V coreclr builds. For example, emitLoadImmediate makes heavy use of bit count intrinsics.
We can increase the JIT throughput of this function by enabling Zbb extension. This is only one example where we could improve RISC-V JIT throughput by enabling certain extensions. Other extensions, such as Zba and Zicond can improve throughput at various places.
Currently, the compiler (clang) uses the default configuration for RISC-V target, which "only" enables the rv64gc "profile".
We can use CLR_ADDITIONAL_COMPILER_OPTIONS to pass in -march=rv64gc_zbb to clang:
But I was wondering if we should introduce a better way to enable these extensions, akin to what we have for ARM:
There are several alternative proposals that I would like to suggest:
- Introduce
RISCV_EXTENSIONSCMake option. User can pass inZba_Zicond_.... - Introduce
RISCV_PROFILECMake option. User can pass inrv22,rv23, etc. - Introduce options for each extension that might be useful, e.g.
RISCV_ZBB=1, adding it only when a need arises. - Change the default profile to RVA20/22/23.
cc @dotnet/samsung
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·