blob: 7d49c445756b6c63afc3182edad08916b806133c [file] [edit]
==============
RISC-V Support
==============
.. contents::
:local:
Intrinsic Detection Macros
===========================
Clang provides macros to detect which RISC-V intrinsics are supported by the
toolchain. This is only available if intrinsics are ratified, in other word,
experimental intrinsics do not have macro defined.
Note: This is independent from assembler support.
Intrinsic Detection
---------------------------
Macros of the form ``__riscv_intrinsic_<extension>`` indicate that the toolchain
supports intrinsics for a given extension:
.. code-block:: c
#if defined(__riscv_intrinsic_zbb)
// Toolchain supports Zbb scalar intrinsics like __riscv_orc_b_*
// These can be used with target attributes even if -march doesn't include Zbb
__attribute__((target("arch=+zbb")))
unsigned long process_with_zbb(unsigned long x) {
return __riscv_orc_b_64(x);
}
#endif
Composite extensions are also defined when all their sub-extensions are available, e.g.
``__riscv_intrinsic_zkn`` - zbkb + zbkc + zbkx + zkne + zknd + zknh