https://gcc.gnu.org/g:8f606245e96ee370d6aed593dea350dd0502be94
commit r17-5464-g8f606245e96ee370d6aed593dea350dd0502be94 Author: Nathan Sidwell <[email protected]> Date: Mon Oct 19 16:12:19 2026 -0400 [RiscV] Add ECF flags to builtins gcc/ * config/riscv/riscv-builtins.cc (riscv_builtin_description): Repack fields to add ecf_flags member. (RISCV_BUILTIN_NO_PREFIX, RISCV_BUILTIN, DIRECT_BUILTIN): Add ECF arg. (riscv_builtins): Adjust DIRECT_BUILTINs. (riscv_init_builtins): Set the ECF flags. * config/riscv/andes.def: Add ECF flags. * config/riscv/corev.def: Likewise. * config/riscv/riscv-cmo.def: Likewise. * config/riscv/riscv-scalar-crypto.def: Likewise. gcc/testsuite/ * gcc.target/riscv/builtin-ecf.c: New. Diff: --- gcc/config/riscv/andes.def | 20 +- gcc/config/riscv/corev.def | 374 +++++++++++++-------------- gcc/config/riscv/riscv-builtins.cc | 27 +- gcc/config/riscv/riscv-cmo.def | 32 +-- gcc/config/riscv/riscv-scalar-crypto.def | 112 ++++---- gcc/testsuite/gcc.target/riscv/builtin-ecf.c | 13 + 6 files changed, 298 insertions(+), 280 deletions(-) diff --git a/gcc/config/riscv/andes.def b/gcc/config/riscv/andes.def index 685892d00030..d8da918a387a 100644 --- a/gcc/config/riscv/andes.def +++ b/gcc/config/riscv/andes.def @@ -1,14 +1,14 @@ // XANDESPERF /* Andes Performance Extension */ -RISCV_BUILTIN (nds_ffbsi, "nds_ffb_32", RISCV_SI_FTYPE_USI_USI, andesperf32), -RISCV_BUILTIN (nds_ffbdi, "nds_ffb_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64), -RISCV_BUILTIN (nds_ffzmismsi, "nds_ffzmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32), -RISCV_BUILTIN (nds_ffzmismdi, "nds_ffzmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64), -RISCV_BUILTIN (nds_ffmismsi, "nds_ffmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32), -RISCV_BUILTIN (nds_ffmismdi, "nds_ffmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64), -RISCV_BUILTIN (nds_flmismsi, "nds_flmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32), -RISCV_BUILTIN (nds_flmismdi, "nds_flmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64), +RISCV_BUILTIN (nds_ffbsi, "nds_ffb_32", RISCV_SI_FTYPE_USI_USI, andesperf32, ECF_PURE), +RISCV_BUILTIN (nds_ffbdi, "nds_ffb_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64, ECF_PURE), +RISCV_BUILTIN (nds_ffzmismsi, "nds_ffzmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32, ECF_PURE), +RISCV_BUILTIN (nds_ffzmismdi, "nds_ffzmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64, ECF_PURE), +RISCV_BUILTIN (nds_ffmismsi, "nds_ffmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32, ECF_PURE), +RISCV_BUILTIN (nds_ffmismdi, "nds_ffmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64, ECF_PURE), +RISCV_BUILTIN (nds_flmismsi, "nds_flmism_32", RISCV_SI_FTYPE_USI_USI, andesperf32, ECF_PURE), +RISCV_BUILTIN (nds_flmismdi, "nds_flmism_64", RISCV_DI_FTYPE_UDI_UDI, andesperf64, ECF_PURE), /* Andes Scalar BFLOAT16 Conversion Extension */ -RISCV_BUILTIN_NO_PREFIX (extendbfsf2, "nds_fcvt_s_bf16", RISCV_SF_FTYPE_BF, andesbfhcvt), -RISCV_BUILTIN_NO_PREFIX (truncsfbf2, "nds_fcvt_bf16_s", RISCV_BF_FTYPE_SF, andesbfhcvt), +RISCV_BUILTIN_NO_PREFIX (extendbfsf2, "nds_fcvt_s_bf16", RISCV_SF_FTYPE_BF, andesbfhcvt, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (truncsfbf2, "nds_fcvt_bf16_s", RISCV_BF_FTYPE_SF, andesbfhcvt, ECF_PURE), diff --git a/gcc/config/riscv/corev.def b/gcc/config/riscv/corev.def index 1ddb7a3f01c6..02e490fe0f91 100644 --- a/gcc/config/riscv/corev.def +++ b/gcc/config/riscv/corev.def @@ -1,202 +1,202 @@ // XCVMAC -RISCV_BUILTIN (cv_mac_mac, "cv_mac_mac", RISCV_SI_FTYPE_SI_SI_SI, cvmac), -RISCV_BUILTIN (cv_mac_msu, "cv_mac_msu", RISCV_SI_FTYPE_SI_SI_SI, cvmac), -RISCV_BUILTIN (cv_mac_muluN, "cv_mac_muluN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulhhuN, "cv_mac_mulhhuN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulsN, "cv_mac_mulsN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulhhsN, "cv_mac_mulhhsN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_muluRN, "cv_mac_muluRN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulhhuRN, "cv_mac_mulhhuRN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulsRN, "cv_mac_mulsRN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_mulhhsRN, "cv_mac_mulhhsRN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_macuN, "cv_mac_macuN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_machhuN, "cv_mac_machhuN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_macsN, "cv_mac_macsN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_machhsN, "cv_mac_machhsN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_macuRN, "cv_mac_macuRN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_machhuRN, "cv_mac_machhuRN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_macsRN, "cv_mac_macsRN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac), -RISCV_BUILTIN (cv_mac_machhsRN, "cv_mac_machhsRN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac), +RISCV_BUILTIN (cv_mac_mac, "cv_mac_mac", RISCV_SI_FTYPE_SI_SI_SI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_msu, "cv_mac_msu", RISCV_SI_FTYPE_SI_SI_SI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_muluN, "cv_mac_muluN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulhhuN, "cv_mac_mulhhuN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulsN, "cv_mac_mulsN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulhhsN, "cv_mac_mulhhsN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_muluRN, "cv_mac_muluRN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulhhuRN, "cv_mac_mulhhuRN", RISCV_USI_FTYPE_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulsRN, "cv_mac_mulsRN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_mulhhsRN, "cv_mac_mulhhsRN", RISCV_SI_FTYPE_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_macuN, "cv_mac_macuN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_machhuN, "cv_mac_machhuN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_macsN, "cv_mac_macsN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_machhsN, "cv_mac_machhsN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_macuRN, "cv_mac_macuRN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_machhuRN, "cv_mac_machhuRN", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_macsRN, "cv_mac_macsRN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac, ECF_PURE), +RISCV_BUILTIN (cv_mac_machhsRN, "cv_mac_machhsRN", RISCV_SI_FTYPE_SI_SI_SI_UQI, cvmac, ECF_PURE), // XCVALU -RISCV_BUILTIN (cv_alu_slet, "cv_alu_slet", RISCV_SI_FTYPE_SI_SI, cvalu), -RISCV_BUILTIN (cv_alu_sletu, "cv_alu_sletu", RISCV_SI_FTYPE_USI_USI, cvalu), -RISCV_BUILTIN (cv_alu_min, "cv_alu_min", RISCV_SI_FTYPE_SI_SI, cvalu), -RISCV_BUILTIN (cv_alu_minu, "cv_alu_minu", RISCV_USI_FTYPE_USI_USI, cvalu), -RISCV_BUILTIN (cv_alu_max, "cv_alu_max", RISCV_SI_FTYPE_SI_SI, cvalu), -RISCV_BUILTIN (cv_alu_maxu, "cv_alu_maxu", RISCV_USI_FTYPE_USI_USI, cvalu), +RISCV_BUILTIN (cv_alu_slet, "cv_alu_slet", RISCV_SI_FTYPE_SI_SI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_sletu, "cv_alu_sletu", RISCV_SI_FTYPE_USI_USI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_min, "cv_alu_min", RISCV_SI_FTYPE_SI_SI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_minu, "cv_alu_minu", RISCV_USI_FTYPE_USI_USI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_max, "cv_alu_max", RISCV_SI_FTYPE_SI_SI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_maxu, "cv_alu_maxu", RISCV_USI_FTYPE_USI_USI, cvalu, ECF_PURE), -RISCV_BUILTIN (cv_alu_exths, "cv_alu_exths", RISCV_SI_FTYPE_HI, cvalu), -RISCV_BUILTIN (cv_alu_exthz, "cv_alu_exthz", RISCV_USI_FTYPE_UHI, cvalu), -RISCV_BUILTIN (cv_alu_extbs, "cv_alu_extbs", RISCV_SI_FTYPE_QI, cvalu), -RISCV_BUILTIN (cv_alu_extbz, "cv_alu_extbz", RISCV_USI_FTYPE_UQI, cvalu), +RISCV_BUILTIN (cv_alu_exths, "cv_alu_exths", RISCV_SI_FTYPE_HI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_exthz, "cv_alu_exthz", RISCV_USI_FTYPE_UHI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_extbs, "cv_alu_extbs", RISCV_SI_FTYPE_QI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_extbz, "cv_alu_extbz", RISCV_USI_FTYPE_UQI, cvalu, ECF_PURE), -RISCV_BUILTIN (cv_alu_clip, "cv_alu_clip", RISCV_SI_FTYPE_SI_SI, cvalu), -RISCV_BUILTIN (cv_alu_clipu, "cv_alu_clipu", RISCV_USI_FTYPE_USI_USI, cvalu), -RISCV_BUILTIN (cv_alu_addN, "cv_alu_addN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_adduN, "cv_alu_adduN", RISCV_USI_FTYPE_USI_USI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_addRN, "cv_alu_addRN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_adduRN, "cv_alu_adduRN",RISCV_USI_FTYPE_USI_USI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_subN, "cv_alu_subN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_subuN, "cv_alu_subuN", RISCV_USI_FTYPE_USI_USI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_subRN, "cv_alu_subRN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu), -RISCV_BUILTIN (cv_alu_subuRN, "cv_alu_subuRN",RISCV_USI_FTYPE_USI_USI_UQI, cvalu), +RISCV_BUILTIN (cv_alu_clip, "cv_alu_clip", RISCV_SI_FTYPE_SI_SI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_clipu, "cv_alu_clipu", RISCV_USI_FTYPE_USI_USI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_addN, "cv_alu_addN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_adduN, "cv_alu_adduN", RISCV_USI_FTYPE_USI_USI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_addRN, "cv_alu_addRN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_adduRN, "cv_alu_adduRN",RISCV_USI_FTYPE_USI_USI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_subN, "cv_alu_subN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_subuN, "cv_alu_subuN", RISCV_USI_FTYPE_USI_USI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_subRN, "cv_alu_subRN", RISCV_SI_FTYPE_SI_SI_UQI, cvalu, ECF_PURE), +RISCV_BUILTIN (cv_alu_subuRN, "cv_alu_subuRN",RISCV_USI_FTYPE_USI_USI_UQI, cvalu, ECF_PURE), // XCVELW -RISCV_BUILTIN (cv_elw_elw_si, "cv_elw_elw", RISCV_USI_FTYPE_VOID_PTR, cvelw), +RISCV_BUILTIN (cv_elw_elw_si, "cv_elw_elw", RISCV_USI_FTYPE_VOID_PTR, cvelw, 0), // XCVSIMD //ALU Operations -RISCV_BUILTIN (cv_simd_add_h_si, "cv_simd_add_h", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_add_b_si, "cv_simd_add_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_add_sc_h_si, "cv_simd_add_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_add_sc_b_si, "cv_simd_add_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_sub_h_si, "cv_simd_sub_h", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_sub_b_si, "cv_simd_sub_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sub_sc_h_si, "cv_simd_sub_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_sub_sc_b_si, "cv_simd_sub_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_avg_h_si, "cv_simd_avg_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_avg_b_si, "cv_simd_avg_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_avg_sc_h_si, "cv_simd_avg_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_avg_sc_b_si, "cv_simd_avg_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_avgu_h_si, "cv_simd_avgu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_avgu_b_si, "cv_simd_avgu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_avgu_sc_h_si, "cv_simd_avgu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_avgu_sc_b_si, "cv_simd_avgu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_min_h_si, "cv_simd_min_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_min_b_si, "cv_simd_min_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_min_sc_h_si, "cv_simd_min_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_min_sc_b_si, "cv_simd_min_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_minu_h_si, "cv_simd_minu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_minu_b_si, "cv_simd_minu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_minu_sc_h_si, "cv_simd_minu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_minu_sc_b_si, "cv_simd_minu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_max_h_si, "cv_simd_max_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_max_b_si, "cv_simd_max_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_max_sc_h_si, "cv_simd_max_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_max_sc_b_si, "cv_simd_max_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_maxu_h_si, "cv_simd_maxu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_maxu_b_si, "cv_simd_maxu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_maxu_sc_h_si, "cv_simd_maxu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_maxu_sc_b_si, "cv_simd_maxu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_srl_h_si, "cv_simd_srl_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_srl_b_si, "cv_simd_srl_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_srl_sc_h_si, "cv_simd_srl_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_srl_sc_b_si, "cv_simd_srl_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_sra_h_si, "cv_simd_sra_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sra_b_si, "cv_simd_sra_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sra_sc_h_si, "cv_simd_sra_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_sra_sc_b_si, "cv_simd_sra_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_sll_h_si, "cv_simd_sll_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sll_b_si, "cv_simd_sll_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sll_sc_h_si, "cv_simd_sll_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_sll_sc_b_si, "cv_simd_sll_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_or_h_si, "cv_simd_or_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_or_b_si, "cv_simd_or_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_or_sc_h_si, "cv_simd_or_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_or_sc_b_si, "cv_simd_or_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_xor_h_si, "cv_simd_xor_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_xor_b_si, "cv_simd_xor_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_xor_sc_h_si, "cv_simd_xor_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_xor_sc_b_si, "cv_simd_xor_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_and_h_si, "cv_simd_and_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_and_b_si, "cv_simd_and_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_and_sc_h_si, "cv_simd_and_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_and_sc_b_si, "cv_simd_and_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_abs_h_si, "cv_simd_abs_h", RISCV_USI_FTYPE_USI, cvsimd), -RISCV_BUILTIN (cv_simd_abs_b_si, "cv_simd_abs_b", RISCV_USI_FTYPE_USI, cvsimd), -RISCV_BUILTIN (cv_simd_neg_h_si, "cv_simd_neg_h", RISCV_USI_FTYPE_USI, cvsimd), -RISCV_BUILTIN (cv_simd_neg_b_si, "cv_simd_neg_b", RISCV_USI_FTYPE_USI, cvsimd), +RISCV_BUILTIN (cv_simd_add_h_si, "cv_simd_add_h", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_add_b_si, "cv_simd_add_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_add_sc_h_si, "cv_simd_add_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_add_sc_b_si, "cv_simd_add_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sub_h_si, "cv_simd_sub_h", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sub_b_si, "cv_simd_sub_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sub_sc_h_si, "cv_simd_sub_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sub_sc_b_si, "cv_simd_sub_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avg_h_si, "cv_simd_avg_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avg_b_si, "cv_simd_avg_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avg_sc_h_si, "cv_simd_avg_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avg_sc_b_si, "cv_simd_avg_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avgu_h_si, "cv_simd_avgu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avgu_b_si, "cv_simd_avgu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avgu_sc_h_si, "cv_simd_avgu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_avgu_sc_b_si, "cv_simd_avgu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_min_h_si, "cv_simd_min_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_min_b_si, "cv_simd_min_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_min_sc_h_si, "cv_simd_min_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_min_sc_b_si, "cv_simd_min_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_minu_h_si, "cv_simd_minu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_minu_b_si, "cv_simd_minu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_minu_sc_h_si, "cv_simd_minu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_minu_sc_b_si, "cv_simd_minu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_max_h_si, "cv_simd_max_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_max_b_si, "cv_simd_max_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_max_sc_h_si, "cv_simd_max_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_max_sc_b_si, "cv_simd_max_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_maxu_h_si, "cv_simd_maxu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_maxu_b_si, "cv_simd_maxu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_maxu_sc_h_si, "cv_simd_maxu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_maxu_sc_b_si, "cv_simd_maxu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_srl_h_si, "cv_simd_srl_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_srl_b_si, "cv_simd_srl_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_srl_sc_h_si, "cv_simd_srl_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_srl_sc_b_si, "cv_simd_srl_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sra_h_si, "cv_simd_sra_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sra_b_si, "cv_simd_sra_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sra_sc_h_si, "cv_simd_sra_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sra_sc_b_si, "cv_simd_sra_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sll_h_si, "cv_simd_sll_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sll_b_si, "cv_simd_sll_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sll_sc_h_si, "cv_simd_sll_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sll_sc_b_si, "cv_simd_sll_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_or_h_si, "cv_simd_or_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_or_b_si, "cv_simd_or_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_or_sc_h_si, "cv_simd_or_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_or_sc_b_si, "cv_simd_or_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_xor_h_si, "cv_simd_xor_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_xor_b_si, "cv_simd_xor_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_xor_sc_h_si, "cv_simd_xor_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_xor_sc_b_si, "cv_simd_xor_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_and_h_si, "cv_simd_and_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_and_b_si, "cv_simd_and_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_and_sc_h_si, "cv_simd_and_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_and_sc_b_si, "cv_simd_and_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_abs_h_si, "cv_simd_abs_h", RISCV_USI_FTYPE_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_abs_b_si, "cv_simd_abs_b", RISCV_USI_FTYPE_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_neg_h_si, "cv_simd_neg_h", RISCV_USI_FTYPE_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_neg_b_si, "cv_simd_neg_b", RISCV_USI_FTYPE_USI, cvsimd, ECF_PURE), //BIT MANIPULATION -RISCV_BUILTIN (cv_simd_extract_h_si, "cv_simd_extract_h", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_extract_b_si, "cv_simd_extract_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_extractu_h_si, "cv_simd_extractu_h", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_extractu_b_si, "cv_simd_extractu_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_insert_h_si, "cv_simd_insert_h", RISCV_USI_FTYPE_USI_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_insert_b_si, "cv_simd_insert_b", RISCV_USI_FTYPE_USI_USI_QI, cvsimd), +RISCV_BUILTIN (cv_simd_extract_h_si, "cv_simd_extract_h", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_extract_b_si, "cv_simd_extract_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_extractu_h_si, "cv_simd_extractu_h", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_extractu_b_si, "cv_simd_extractu_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_insert_h_si, "cv_simd_insert_h", RISCV_USI_FTYPE_USI_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_insert_b_si, "cv_simd_insert_b", RISCV_USI_FTYPE_USI_USI_QI, cvsimd, ECF_PURE), //DOT PRODUCT -RISCV_BUILTIN (cv_simd_dotup_h_si, "cv_simd_dotup_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotup_b_si, "cv_simd_dotup_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotup_sc_h_si, "cv_simd_dotup_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_dotup_sc_b_si, "cv_simd_dotup_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_dotusp_h_si, "cv_simd_dotusp_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotusp_b_si, "cv_simd_dotusp_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotusp_sc_h_si, "cv_simd_dotusp_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_dotusp_sc_b_si, "cv_simd_dotusp_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_dotsp_h_si, "cv_simd_dotsp_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotsp_b_si, "cv_simd_dotsp_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_dotsp_sc_h_si, "cv_simd_dotsp_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_dotsp_sc_b_si, "cv_simd_dotsp_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotup_h_si, "cv_simd_sdotup_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotup_b_si, "cv_simd_sdotup_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotup_sc_h_si, "cv_simd_sdotup_sc_h", RISCV_USI_FTYPE_USI_UHI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotup_sc_b_si, "cv_simd_sdotup_sc_b", RISCV_USI_FTYPE_USI_UQI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotusp_h_si, "cv_simd_sdotusp_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotusp_b_si, "cv_simd_sdotusp_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotusp_sc_h_si, "cv_simd_sdotusp_sc_h", RISCV_USI_FTYPE_USI_HI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotusp_sc_b_si, "cv_simd_sdotusp_sc_b", RISCV_USI_FTYPE_USI_QI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotsp_h_si, "cv_simd_sdotsp_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotsp_b_si, "cv_simd_sdotsp_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotsp_sc_h_si, "cv_simd_sdotsp_sc_h", RISCV_USI_FTYPE_USI_HI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_sdotsp_sc_b_si, "cv_simd_sdotsp_sc_b", RISCV_USI_FTYPE_USI_QI_USI, cvsimd), +RISCV_BUILTIN (cv_simd_dotup_h_si, "cv_simd_dotup_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotup_b_si, "cv_simd_dotup_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotup_sc_h_si, "cv_simd_dotup_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotup_sc_b_si, "cv_simd_dotup_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotusp_h_si, "cv_simd_dotusp_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotusp_b_si, "cv_simd_dotusp_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotusp_sc_h_si, "cv_simd_dotusp_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotusp_sc_b_si, "cv_simd_dotusp_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotsp_h_si, "cv_simd_dotsp_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotsp_b_si, "cv_simd_dotsp_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotsp_sc_h_si, "cv_simd_dotsp_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_dotsp_sc_b_si, "cv_simd_dotsp_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotup_h_si, "cv_simd_sdotup_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotup_b_si, "cv_simd_sdotup_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotup_sc_h_si, "cv_simd_sdotup_sc_h", RISCV_USI_FTYPE_USI_UHI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotup_sc_b_si, "cv_simd_sdotup_sc_b", RISCV_USI_FTYPE_USI_UQI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotusp_h_si, "cv_simd_sdotusp_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotusp_b_si, "cv_simd_sdotusp_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotusp_sc_h_si, "cv_simd_sdotusp_sc_h", RISCV_USI_FTYPE_USI_HI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotusp_sc_b_si, "cv_simd_sdotusp_sc_b", RISCV_USI_FTYPE_USI_QI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotsp_h_si, "cv_simd_sdotsp_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotsp_b_si, "cv_simd_sdotsp_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotsp_sc_h_si, "cv_simd_sdotsp_sc_h", RISCV_USI_FTYPE_USI_HI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_sdotsp_sc_b_si, "cv_simd_sdotsp_sc_b", RISCV_USI_FTYPE_USI_QI_USI, cvsimd, ECF_PURE), //SHUFFLE AND PACK -RISCV_BUILTIN (cv_simd_shuffle_h_si, "cv_simd_shuffle_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_shuffle_sci_h_si, "cv_simd_shuffle_sci_h",RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_shuffle_b_si, "cv_simd_shuffle_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_shuffle_sci_b_si, "cv_simd_shuffle_sci_b",RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_shuffle2_h_si, "cv_simd_shuffle2_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_shuffle2_b_si, "cv_simd_shuffle2_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_packhi_h_si, "cv_simd_packhi_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_packlo_h_si, "cv_simd_packlo_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_packhi_b_si, "cv_simd_packhi_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_packlo_b_si, "cv_simd_packlo_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -//RISCV_BUILTIN (cv_simd_pack_si, "cv_simd_pack", RISCV_USI_FTYPE_USI_USI, cvsimd), -//RISCV_BUILTIN (cv_simd_pack_h_si, "cv_simd_pack_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -//RISCV_BUILTIN (cv_simd_packhi_b_si, "cv_simd_packhi_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), -//RISCV_BUILTIN (cv_simd_packlo_b_si, "cv_simd_packlo_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd), +RISCV_BUILTIN (cv_simd_shuffle_h_si, "cv_simd_shuffle_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_shuffle_sci_h_si, "cv_simd_shuffle_sci_h",RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_shuffle_b_si, "cv_simd_shuffle_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_shuffle_sci_b_si, "cv_simd_shuffle_sci_b",RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_shuffle2_h_si, "cv_simd_shuffle2_h", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_shuffle2_b_si, "cv_simd_shuffle2_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_packhi_h_si, "cv_simd_packhi_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_packlo_h_si, "cv_simd_packlo_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_packhi_b_si, "cv_simd_packhi_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_packlo_b_si, "cv_simd_packlo_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +//RISCV_BUILTIN (cv_simd_pack_si, "cv_simd_pack", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +//RISCV_BUILTIN (cv_simd_pack_h_si, "cv_simd_pack_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +//RISCV_BUILTIN (cv_simd_packhi_b_si, "cv_simd_packhi_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), +//RISCV_BUILTIN (cv_simd_packlo_b_si, "cv_simd_packlo_b", RISCV_USI_FTYPE_USI_USI_USI, cvsimd, ECF_PURE), //COMPARISON OPERATIONS -RISCV_BUILTIN (cv_simd_cmpeq_h_si, "cv_simd_cmpeq_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpeq_b_si, "cv_simd_cmpeq_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpeq_sc_h_si, "cv_simd_cmpeq_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpeq_sc_b_si, "cv_simd_cmpeq_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpne_h_si, "cv_simd_cmpne_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpne_b_si, "cv_simd_cmpne_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpne_sc_h_si, "cv_simd_cmpne_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpne_sc_b_si, "cv_simd_cmpne_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgt_h_si, "cv_simd_cmpgt_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgt_b_si, "cv_simd_cmpgt_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgt_sc_h_si, "cv_simd_cmpgt_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgt_sc_b_si, "cv_simd_cmpgt_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpge_h_si, "cv_simd_cmpge_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpge_b_si, "cv_simd_cmpge_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpge_sc_h_si, "cv_simd_cmpge_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpge_sc_b_si, "cv_simd_cmpge_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmplt_h_si, "cv_simd_cmplt_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmplt_b_si, "cv_simd_cmplt_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmplt_sc_h_si, "cv_simd_cmplt_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmplt_sc_b_si, "cv_simd_cmplt_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmple_h_si, "cv_simd_cmple_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmple_b_si, "cv_simd_cmple_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmple_sc_h_si, "cv_simd_cmple_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd), -RISCV_BUILTIN (cv_simd_cmple_sc_b_si, "cv_simd_cmple_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgtu_h_si, "cv_simd_cmpgtu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgtu_b_si, "cv_simd_cmpgtu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgtu_sc_h_si, "cv_simd_cmpgtu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgtu_sc_b_si, "cv_simd_cmpgtu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgeu_h_si, "cv_simd_cmpgeu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgeu_b_si, "cv_simd_cmpgeu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgeu_sc_h_si, "cv_simd_cmpgeu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpgeu_sc_b_si, "cv_simd_cmpgeu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpltu_h_si, "cv_simd_cmpltu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpltu_b_si, "cv_simd_cmpltu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpltu_sc_h_si, "cv_simd_cmpltu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpltu_sc_b_si, "cv_simd_cmpltu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpleu_h_si, "cv_simd_cmpleu_h", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpleu_b_si, "cv_simd_cmpleu_b", RISCV_USI_FTYPE_USI_USI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpleu_sc_h_si, "cv_simd_cmpleu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd), -RISCV_BUILTIN (cv_simd_cmpleu_sc_b_si, "cv_simd_cmpleu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd), +RISCV_BUILTIN (cv_simd_cmpeq_h_si, "cv_simd_cmpeq_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpeq_b_si, "cv_simd_cmpeq_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpeq_sc_h_si, "cv_simd_cmpeq_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpeq_sc_b_si, "cv_simd_cmpeq_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpne_h_si, "cv_simd_cmpne_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpne_b_si, "cv_simd_cmpne_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpne_sc_h_si, "cv_simd_cmpne_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpne_sc_b_si, "cv_simd_cmpne_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgt_h_si, "cv_simd_cmpgt_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgt_b_si, "cv_simd_cmpgt_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgt_sc_h_si, "cv_simd_cmpgt_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgt_sc_b_si, "cv_simd_cmpgt_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpge_h_si, "cv_simd_cmpge_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpge_b_si, "cv_simd_cmpge_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpge_sc_h_si, "cv_simd_cmpge_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpge_sc_b_si, "cv_simd_cmpge_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmplt_h_si, "cv_simd_cmplt_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmplt_b_si, "cv_simd_cmplt_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmplt_sc_h_si, "cv_simd_cmplt_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmplt_sc_b_si, "cv_simd_cmplt_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmple_h_si, "cv_simd_cmple_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmple_b_si, "cv_simd_cmple_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmple_sc_h_si, "cv_simd_cmple_sc_h", RISCV_USI_FTYPE_USI_HI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmple_sc_b_si, "cv_simd_cmple_sc_b", RISCV_USI_FTYPE_USI_QI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgtu_h_si, "cv_simd_cmpgtu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgtu_b_si, "cv_simd_cmpgtu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgtu_sc_h_si, "cv_simd_cmpgtu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgtu_sc_b_si, "cv_simd_cmpgtu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgeu_h_si, "cv_simd_cmpgeu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgeu_b_si, "cv_simd_cmpgeu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgeu_sc_h_si, "cv_simd_cmpgeu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpgeu_sc_b_si, "cv_simd_cmpgeu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpltu_h_si, "cv_simd_cmpltu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpltu_b_si, "cv_simd_cmpltu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpltu_sc_h_si, "cv_simd_cmpltu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpltu_sc_b_si, "cv_simd_cmpltu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpleu_h_si, "cv_simd_cmpleu_h", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpleu_b_si, "cv_simd_cmpleu_b", RISCV_USI_FTYPE_USI_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpleu_sc_h_si, "cv_simd_cmpleu_sc_h", RISCV_USI_FTYPE_USI_UHI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cmpleu_sc_b_si, "cv_simd_cmpleu_sc_b", RISCV_USI_FTYPE_USI_UQI, cvsimd, ECF_PURE), //COMPLEX NUMBER -RISCV_BUILTIN (cv_simd_cplxmul_r_si, "cv_simd_cplxmul_r", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_cplxmul_i_si, "cv_simd_cplxmul_i", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvsimd), -RISCV_BUILTIN (cv_simd_cplxconj_si, "cv_simd_cplxconj", RISCV_USI_FTYPE_USI, cvsimd), -RISCV_BUILTIN (cv_simd_subrotmj_si, "cv_simd_subrotmj", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd), +RISCV_BUILTIN (cv_simd_cplxmul_r_si, "cv_simd_cplxmul_r", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cplxmul_i_si, "cv_simd_cplxmul_i", RISCV_USI_FTYPE_USI_USI_USI_UQI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_cplxconj_si, "cv_simd_cplxconj", RISCV_USI_FTYPE_USI, cvsimd, ECF_PURE), +RISCV_BUILTIN (cv_simd_subrotmj_si, "cv_simd_subrotmj", RISCV_USI_FTYPE_USI_USI_UQI, cvsimd, ECF_PURE), diff --git a/gcc/config/riscv/riscv-builtins.cc b/gcc/config/riscv/riscv-builtins.cc index 997e637be915..2084cc242323 100644 --- a/gcc/config/riscv/riscv-builtins.cc +++ b/gcc/config/riscv/riscv-builtins.cc @@ -73,14 +73,17 @@ struct riscv_builtin_description { /* The code of the main .md file instruction. See riscv_builtin_type for more information. */ - enum insn_code icode; + enum insn_code icode : 20; /* The function's prototype. */ - enum riscv_function_type prototype : 24; + enum riscv_function_type prototype : 12; /* True, if the function returns void (and so expansion has no target RTL). */ bool no_target : 8; + /* ECF flags */ + unsigned ecf_flags : 24; + /* Whether the function is available. */ unsigned int (*avail) (void); }; @@ -145,20 +148,20 @@ AVAIL (andesbfhcvt, TARGET_XANDESBFHCVT) AVAIL is the name of the availability predicate, without the leading riscv_builtin_avail_. */ -#define RISCV_BUILTIN_NO_PREFIX(INSN, NAME, FUNCTION_TYPE, AVAIL) \ +#define RISCV_BUILTIN_NO_PREFIX(INSN, NAME, FUNCTION_TYPE, AVAIL, ECF) \ { "__builtin_riscv_" NAME, CODE_FOR_ ## INSN, \ - FUNCTION_TYPE, false, riscv_builtin_avail_ ## AVAIL } + FUNCTION_TYPE, false, ECF, riscv_builtin_avail_ ## AVAIL } /* Like RISCV_BUiLTIN_NO_PREFIX but with a 'riscv_' prefix added to the instruction code. */ -#define RISCV_BUILTIN(INSN, NAME, FUNCTION_TYPE, AVAIL) \ - RISCV_BUILTIN_NO_PREFIX (riscv_ ## INSN, NAME, FUNCTION_TYPE, AVAIL) +#define RISCV_BUILTIN(INSN, NAME, FUNCTION_TYPE, AVAIL, ECF) \ + RISCV_BUILTIN_NO_PREFIX (riscv_ ## INSN, NAME, FUNCTION_TYPE, AVAIL, ECF) /* Define __builtin_riscv_<INSN>, which is builtin function mapped to instruction CODE_FOR_riscv_<INSN>, FUNCTION_TYPE and AVAIL are as for RISCV_BUILTIN. */ -#define DIRECT_BUILTIN(INSN, FUNCTION_TYPE, AVAIL) \ - RISCV_BUILTIN (INSN, #INSN, FUNCTION_TYPE, AVAIL) +#define DIRECT_BUILTIN(INSN, FUNCTION_TYPE, AVAIL, ECF) \ + RISCV_BUILTIN (INSN, #INSN, FUNCTION_TYPE, AVAIL, ECF) /* Argument types. */ @@ -196,9 +199,9 @@ static struct riscv_builtin_description riscv_builtins[] = { #include "corev.def" #include "andes.def" - DIRECT_BUILTIN (frflags, RISCV_USI_FTYPE, hard_float), - DIRECT_BUILTIN (fsflags, RISCV_VOID_FTYPE_USI, hard_float), - RISCV_BUILTIN (pause, "pause", RISCV_VOID_FTYPE, hint_pause), + DIRECT_BUILTIN (frflags, RISCV_USI_FTYPE, hard_float, 0), + DIRECT_BUILTIN (fsflags, RISCV_VOID_FTYPE_USI, hard_float, 0), + RISCV_BUILTIN (pause, "pause", RISCV_VOID_FTYPE, hint_pause, 0), }; /* Index I is the function declaration for riscv_builtins[I], or null if the @@ -296,6 +299,8 @@ riscv_init_builtins (void) + RISCV_BUILTIN_GENERAL, BUILT_IN_MD, NULL, NULL); riscv_builtin_decl_index[d->icode] = i; + set_call_expr_flags (riscv_builtin_decls[i], + d->ecf_flags | ECF_NOTHROW); } } } diff --git a/gcc/config/riscv/riscv-cmo.def b/gcc/config/riscv/riscv-cmo.def index f3c7fbd72e32..7e7767c0404c 100644 --- a/gcc/config/riscv/riscv-cmo.def +++ b/gcc/config/riscv/riscv-cmo.def @@ -1,27 +1,27 @@ // zicbom -RISCV_BUILTIN (clean_si, "zicbom_cbo_clean", RISCV_VOID_FTYPE_VOID_PTR, clean32), -RISCV_BUILTIN (clean_di, "zicbom_cbo_clean", RISCV_VOID_FTYPE_VOID_PTR, clean64), +RISCV_BUILTIN (clean_si, "zicbom_cbo_clean", RISCV_VOID_FTYPE_VOID_PTR, clean32, 0), +RISCV_BUILTIN (clean_di, "zicbom_cbo_clean", RISCV_VOID_FTYPE_VOID_PTR, clean64, 0), -RISCV_BUILTIN (flush_si, "zicbom_cbo_flush", RISCV_VOID_FTYPE_VOID_PTR, flush32), -RISCV_BUILTIN (flush_di, "zicbom_cbo_flush", RISCV_VOID_FTYPE_VOID_PTR, flush64), +RISCV_BUILTIN (flush_si, "zicbom_cbo_flush", RISCV_VOID_FTYPE_VOID_PTR, flush32, 0), +RISCV_BUILTIN (flush_di, "zicbom_cbo_flush", RISCV_VOID_FTYPE_VOID_PTR, flush64, 0), -RISCV_BUILTIN (inval_si, "zicbom_cbo_inval", RISCV_VOID_FTYPE_VOID_PTR, inval32), -RISCV_BUILTIN (inval_di, "zicbom_cbo_inval", RISCV_VOID_FTYPE_VOID_PTR, inval64), +RISCV_BUILTIN (inval_si, "zicbom_cbo_inval", RISCV_VOID_FTYPE_VOID_PTR, inval32, 0), +RISCV_BUILTIN (inval_di, "zicbom_cbo_inval", RISCV_VOID_FTYPE_VOID_PTR, inval64, 0), // zicboz -RISCV_BUILTIN (zero_si, "zicboz_cbo_zero", RISCV_VOID_FTYPE_VOID_PTR, zero32), -RISCV_BUILTIN (zero_di, "zicboz_cbo_zero", RISCV_VOID_FTYPE_VOID_PTR, zero64), +RISCV_BUILTIN (zero_si, "zicboz_cbo_zero", RISCV_VOID_FTYPE_VOID_PTR, zero32, 0), +RISCV_BUILTIN (zero_di, "zicboz_cbo_zero", RISCV_VOID_FTYPE_VOID_PTR, zero64, 0), // zicbop -RISCV_BUILTIN (prefetchi_si, "zicbop_cbo_prefetchi", RISCV_USI_FTYPE_USI, prefetchi32), -RISCV_BUILTIN (prefetchi_di, "zicbop_cbo_prefetchi", RISCV_UDI_FTYPE_UDI, prefetchi64), +RISCV_BUILTIN (prefetchi_si, "zicbop_cbo_prefetchi", RISCV_USI_FTYPE_USI, prefetchi32, 0), +RISCV_BUILTIN (prefetchi_di, "zicbop_cbo_prefetchi", RISCV_UDI_FTYPE_UDI, prefetchi64, 0), // zbkc or zbc -RISCV_BUILTIN (clmul_si, "clmul_32", RISCV_USI_FTYPE_USI_USI, clmul_zbkc_or_zbc), -RISCV_BUILTIN (clmul_di, "clmul_64", RISCV_UDI_FTYPE_UDI_UDI, clmul_zbkc64_or_zbc64), -RISCV_BUILTIN (clmulh_si, "clmulh_32", RISCV_USI_FTYPE_USI_USI, clmul_zbkc32_or_zbc32), -RISCV_BUILTIN (clmulh_di, "clmulh_64", RISCV_UDI_FTYPE_UDI_UDI, clmul_zbkc64_or_zbc64), +RISCV_BUILTIN (clmul_si, "clmul_32", RISCV_USI_FTYPE_USI_USI, clmul_zbkc_or_zbc, 0), +RISCV_BUILTIN (clmul_di, "clmul_64", RISCV_UDI_FTYPE_UDI_UDI, clmul_zbkc64_or_zbc64, 0), +RISCV_BUILTIN (clmulh_si, "clmulh_32", RISCV_USI_FTYPE_USI_USI, clmul_zbkc32_or_zbc32, 0), +RISCV_BUILTIN (clmulh_di, "clmulh_64", RISCV_UDI_FTYPE_UDI_UDI, clmul_zbkc64_or_zbc64, 0), // zbc -RISCV_BUILTIN (clmulr_si, "clmulr_32", RISCV_USI_FTYPE_USI_USI, clmulr_zbc32), -RISCV_BUILTIN (clmulr_di, "clmulr_64", RISCV_UDI_FTYPE_UDI_UDI, clmulr_zbc64), +RISCV_BUILTIN (clmulr_si, "clmulr_32", RISCV_USI_FTYPE_USI_USI, clmulr_zbc32, 0), +RISCV_BUILTIN (clmulr_di, "clmulr_64", RISCV_UDI_FTYPE_UDI_UDI, clmulr_zbc64, 0), diff --git a/gcc/config/riscv/riscv-scalar-crypto.def b/gcc/config/riscv/riscv-scalar-crypto.def index a0781dcb6bbc..384451ffa282 100644 --- a/gcc/config/riscv/riscv-scalar-crypto.def +++ b/gcc/config/riscv/riscv-scalar-crypto.def @@ -18,81 +18,81 @@ along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ // ZBKB -RISCV_BUILTIN (pack_sihi, "pack", RISCV_USI_FTYPE_UHI_UHI, crypto_zbkb32), -RISCV_BUILTIN (pack_disi, "pack", RISCV_UDI_FTYPE_USI_USI, crypto_zbkb64), +RISCV_BUILTIN (pack_sihi, "pack", RISCV_USI_FTYPE_UHI_UHI, crypto_zbkb32, ECF_PURE), +RISCV_BUILTIN (pack_disi, "pack", RISCV_UDI_FTYPE_USI_USI, crypto_zbkb64, ECF_PURE), -RISCV_BUILTIN (packh_si, "packh", RISCV_USI_FTYPE_UQI_UQI, crypto_zbkb32), -RISCV_BUILTIN (packh_di, "packh", RISCV_UDI_FTYPE_UQI_UQI, crypto_zbkb64), +RISCV_BUILTIN (packh_si, "packh", RISCV_USI_FTYPE_UQI_UQI, crypto_zbkb32, ECF_PURE), +RISCV_BUILTIN (packh_di, "packh", RISCV_UDI_FTYPE_UQI_UQI, crypto_zbkb64, ECF_PURE), -RISCV_BUILTIN (packw, "packw", RISCV_UDI_FTYPE_UHI_UHI, crypto_zbkb64), +RISCV_BUILTIN (packw, "packw", RISCV_UDI_FTYPE_UHI_UHI, crypto_zbkb64, ECF_PURE), -RISCV_BUILTIN (zip, "zip", RISCV_USI_FTYPE_USI, crypto_zbkb32), -RISCV_BUILTIN (unzip, "unzip", RISCV_USI_FTYPE_USI, crypto_zbkb32), +RISCV_BUILTIN (zip, "zip", RISCV_USI_FTYPE_USI, crypto_zbkb32, ECF_PURE), +RISCV_BUILTIN (unzip, "unzip", RISCV_USI_FTYPE_USI, crypto_zbkb32, ECF_PURE), -RISCV_BUILTIN (brev8_si, "brev8_32", RISCV_USI_FTYPE_USI, crypto_zbkb), -RISCV_BUILTIN (brev8_di, "brev8_64", RISCV_UDI_FTYPE_UDI, crypto_zbkb64), +RISCV_BUILTIN (brev8_si, "brev8_32", RISCV_USI_FTYPE_USI, crypto_zbkb, ECF_PURE), +RISCV_BUILTIN (brev8_di, "brev8_64", RISCV_UDI_FTYPE_UDI, crypto_zbkb64, ECF_PURE), // ZBKX -RISCV_BUILTIN (xperm4_si, "xperm4", RISCV_USI_FTYPE_USI_USI, crypto_zbkx32), -RISCV_BUILTIN (xperm4_di, "xperm4", RISCV_UDI_FTYPE_UDI_UDI, crypto_zbkx64), -RISCV_BUILTIN (xperm8_si, "xperm8", RISCV_USI_FTYPE_USI_USI, crypto_zbkx32), -RISCV_BUILTIN (xperm8_di, "xperm8", RISCV_UDI_FTYPE_UDI_UDI, crypto_zbkx64), +RISCV_BUILTIN (xperm4_si, "xperm4", RISCV_USI_FTYPE_USI_USI, crypto_zbkx32, ECF_PURE), +RISCV_BUILTIN (xperm4_di, "xperm4", RISCV_UDI_FTYPE_UDI_UDI, crypto_zbkx64, ECF_PURE), +RISCV_BUILTIN (xperm8_si, "xperm8", RISCV_USI_FTYPE_USI_USI, crypto_zbkx32, ECF_PURE), +RISCV_BUILTIN (xperm8_di, "xperm8", RISCV_UDI_FTYPE_UDI_UDI, crypto_zbkx64, ECF_PURE), // ZKND -DIRECT_BUILTIN (aes32dsi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zknd32), -DIRECT_BUILTIN (aes32dsmi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zknd32), -DIRECT_BUILTIN (aes64ds, RISCV_UDI_FTYPE_UDI_UDI, crypto_zknd64), -DIRECT_BUILTIN (aes64dsm, RISCV_UDI_FTYPE_UDI_UDI, crypto_zknd64), -DIRECT_BUILTIN (aes64im, RISCV_UDI_FTYPE_UDI, crypto_zknd64), -DIRECT_BUILTIN (aes64ks1i, RISCV_UDI_FTYPE_UDI_USI, crypto_zkne_or_zknd), -DIRECT_BUILTIN (aes64ks2, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne_or_zknd), +DIRECT_BUILTIN (aes32dsi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zknd32, ECF_PURE), +DIRECT_BUILTIN (aes32dsmi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zknd32, ECF_PURE), +DIRECT_BUILTIN (aes64ds, RISCV_UDI_FTYPE_UDI_UDI, crypto_zknd64, ECF_PURE), +DIRECT_BUILTIN (aes64dsm, RISCV_UDI_FTYPE_UDI_UDI, crypto_zknd64, ECF_PURE), +DIRECT_BUILTIN (aes64im, RISCV_UDI_FTYPE_UDI, crypto_zknd64, ECF_PURE), +DIRECT_BUILTIN (aes64ks1i, RISCV_UDI_FTYPE_UDI_USI, crypto_zkne_or_zknd, ECF_PURE), +DIRECT_BUILTIN (aes64ks2, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne_or_zknd, ECF_PURE), // ZKNE -DIRECT_BUILTIN (aes32esi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zkne32), -DIRECT_BUILTIN (aes32esmi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zkne32), -DIRECT_BUILTIN (aes64es, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne64), -DIRECT_BUILTIN (aes64esm, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne64), +DIRECT_BUILTIN (aes32esi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zkne32, ECF_PURE), +DIRECT_BUILTIN (aes32esmi, RISCV_USI_FTYPE_USI_USI_USI, crypto_zkne32, ECF_PURE), +DIRECT_BUILTIN (aes64es, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne64, ECF_PURE), +DIRECT_BUILTIN (aes64esm, RISCV_UDI_FTYPE_UDI_UDI, crypto_zkne64, ECF_PURE), // ZKNH -RISCV_BUILTIN (sha256sig0_si, "sha256sig0", RISCV_USI_FTYPE_USI, crypto_zknh), -RISCV_BUILTIN (sha256sig1_si, "sha256sig1", RISCV_USI_FTYPE_USI, crypto_zknh), -RISCV_BUILTIN (sha256sum0_si, "sha256sum0", RISCV_USI_FTYPE_USI, crypto_zknh), -RISCV_BUILTIN (sha256sum1_si, "sha256sum1", RISCV_USI_FTYPE_USI, crypto_zknh), - -DIRECT_BUILTIN (sha512sig0h, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), -DIRECT_BUILTIN (sha512sig0l, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), -DIRECT_BUILTIN (sha512sig1h, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), -DIRECT_BUILTIN (sha512sig1l, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), -DIRECT_BUILTIN (sha512sum0r, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), -DIRECT_BUILTIN (sha512sum1r, RISCV_USI_FTYPE_USI_USI, crypto_zknh32), - -DIRECT_BUILTIN (sha512sig0, RISCV_UDI_FTYPE_UDI, crypto_zknh64), -DIRECT_BUILTIN (sha512sig1, RISCV_UDI_FTYPE_UDI, crypto_zknh64), -DIRECT_BUILTIN (sha512sum0, RISCV_UDI_FTYPE_UDI, crypto_zknh64), -DIRECT_BUILTIN (sha512sum1, RISCV_UDI_FTYPE_UDI, crypto_zknh64), +RISCV_BUILTIN (sha256sig0_si, "sha256sig0", RISCV_USI_FTYPE_USI, crypto_zknh, ECF_PURE), +RISCV_BUILTIN (sha256sig1_si, "sha256sig1", RISCV_USI_FTYPE_USI, crypto_zknh, ECF_PURE), +RISCV_BUILTIN (sha256sum0_si, "sha256sum0", RISCV_USI_FTYPE_USI, crypto_zknh, ECF_PURE), +RISCV_BUILTIN (sha256sum1_si, "sha256sum1", RISCV_USI_FTYPE_USI, crypto_zknh, ECF_PURE), + +DIRECT_BUILTIN (sha512sig0h, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), +DIRECT_BUILTIN (sha512sig0l, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), +DIRECT_BUILTIN (sha512sig1h, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), +DIRECT_BUILTIN (sha512sig1l, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), +DIRECT_BUILTIN (sha512sum0r, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), +DIRECT_BUILTIN (sha512sum1r, RISCV_USI_FTYPE_USI_USI, crypto_zknh32, ECF_PURE), + +DIRECT_BUILTIN (sha512sig0, RISCV_UDI_FTYPE_UDI, crypto_zknh64, ECF_PURE), +DIRECT_BUILTIN (sha512sig1, RISCV_UDI_FTYPE_UDI, crypto_zknh64, ECF_PURE), +DIRECT_BUILTIN (sha512sum0, RISCV_UDI_FTYPE_UDI, crypto_zknh64, ECF_PURE), +DIRECT_BUILTIN (sha512sum1, RISCV_UDI_FTYPE_UDI, crypto_zknh64, ECF_PURE), // ZKSH -RISCV_BUILTIN (sm3p0_si, "sm3p0", RISCV_USI_FTYPE_USI, crypto_zksh), -RISCV_BUILTIN (sm3p1_si, "sm3p1", RISCV_USI_FTYPE_USI, crypto_zksh), +RISCV_BUILTIN (sm3p0_si, "sm3p0", RISCV_USI_FTYPE_USI, crypto_zksh, ECF_PURE), +RISCV_BUILTIN (sm3p1_si, "sm3p1", RISCV_USI_FTYPE_USI, crypto_zksh, ECF_PURE), // ZKSED -RISCV_BUILTIN (sm4ed_si, "sm4ed", RISCV_USI_FTYPE_USI_USI_USI, crypto_zksed), -RISCV_BUILTIN (sm4ks_si, "sm4ks", RISCV_USI_FTYPE_USI_USI_USI, crypto_zksed), +RISCV_BUILTIN (sm4ed_si, "sm4ed", RISCV_USI_FTYPE_USI_USI_USI, crypto_zksed, ECF_PURE), +RISCV_BUILTIN (sm4ks_si, "sm4ks", RISCV_USI_FTYPE_USI_USI_USI, crypto_zksed, ECF_PURE), // ZBB -RISCV_BUILTIN_NO_PREFIX (clzsi2,"clz_32",RISCV_USI_FTYPE_USI,zbb), -RISCV_BUILTIN_NO_PREFIX (clzdi2,"clz_64",RISCV_UDI_FTYPE_UDI,zbb64), -RISCV_BUILTIN_NO_PREFIX (ctzsi2,"ctz_32",RISCV_USI_FTYPE_USI,zbb), -RISCV_BUILTIN_NO_PREFIX (ctzdi2,"ctz_64",RISCV_UDI_FTYPE_UDI,zbb64), -RISCV_BUILTIN_NO_PREFIX (popcountsi2,"popcount_32",RISCV_USI_FTYPE_USI,zbb), -RISCV_BUILTIN_NO_PREFIX (popcountdi2,"popcount_64",RISCV_UDI_FTYPE_UDI,zbb64), -RISCV_BUILTIN_NO_PREFIX (orcbsi2,"orc_b_32", RISCV_USI_FTYPE_USI,zbb), -RISCV_BUILTIN_NO_PREFIX (orcbdi2,"orc_b_64",RISCV_UDI_FTYPE_UDI,zbb64), +RISCV_BUILTIN_NO_PREFIX (clzsi2,"clz_32",RISCV_USI_FTYPE_USI,zbb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (clzdi2,"clz_64",RISCV_UDI_FTYPE_UDI,zbb64, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (ctzsi2,"ctz_32",RISCV_USI_FTYPE_USI,zbb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (ctzdi2,"ctz_64",RISCV_UDI_FTYPE_UDI,zbb64, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (popcountsi2,"popcount_32",RISCV_USI_FTYPE_USI,zbb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (popcountdi2,"popcount_64",RISCV_UDI_FTYPE_UDI,zbb64, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (orcbsi2,"orc_b_32", RISCV_USI_FTYPE_USI,zbb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (orcbdi2,"orc_b_64",RISCV_UDI_FTYPE_UDI,zbb64, ECF_PURE), // ZBKB -RISCV_BUILTIN_NO_PREFIX (rotrsi3,"ror_32",RISCV_USI_FTYPE_USI_UQI,zbb_or_zbkb), -RISCV_BUILTIN_NO_PREFIX (rotlsi3,"rol_32",RISCV_USI_FTYPE_USI_UQI,zbb_or_zbkb), -RISCV_BUILTIN_NO_PREFIX (rotrdi3,"ror_64",RISCV_UDI_FTYPE_UDI_UQI,zbb64_or_zbkb64), -RISCV_BUILTIN_NO_PREFIX (rotldi3,"rol_64",RISCV_UDI_FTYPE_UDI_UQI,zbb64_or_zbkb64), +RISCV_BUILTIN_NO_PREFIX (rotrsi3,"ror_32",RISCV_USI_FTYPE_USI_UQI,zbb_or_zbkb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (rotlsi3,"rol_32",RISCV_USI_FTYPE_USI_UQI,zbb_or_zbkb, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (rotrdi3,"ror_64",RISCV_UDI_FTYPE_UDI_UQI,zbb64_or_zbkb64, ECF_PURE), +RISCV_BUILTIN_NO_PREFIX (rotldi3,"rol_64",RISCV_UDI_FTYPE_UDI_UQI,zbb64_or_zbkb64, ECF_PURE), diff --git a/gcc/testsuite/gcc.target/riscv/builtin-ecf.c b/gcc/testsuite/gcc.target/riscv/builtin-ecf.c new file mode 100644 index 000000000000..0f6a2899e8c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/builtin-ecf.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32i_xcvalu -mabi=ilp32 -O2 -fdump-tree-optimized" } */ + +/* (most) builtins are pure, so do not mutate memory, hence allow moving loads/stores across them */ +int foo (int *ptr, int a, int b) +{ + int r = *ptr; + int s = __builtin_riscv_cv_alu_min (a, b); + r += *ptr; + return s + r; +} +/* The loads should be merged */ +/* { dg-final { scan-tree-dump-times { = \*ptr} 1 "optimized" } } */
