============== 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_`` 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