Skip to content

arcv: simplify multilib configurations and cover more cases #147

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions gcc/config.gcc
Original file line number Diff line number Diff line change
Expand Up @@ -4910,6 +4910,18 @@ case "${target}" in
exit 1
esac
fi

# Handle --with-tune.
if test "x${with_tune}" = xdefault; then
case ${target} in
*-snps-*)
# Use a default mtune for Synopsys ARC-V.
with_tune=arc-v-rmx-100-series
;;
*)
;;
esac
fi
;;

mips*-*-*)
Expand Down
189 changes: 102 additions & 87 deletions gcc/config/riscv/t-arcv
Original file line number Diff line number Diff line change
Expand Up @@ -6,123 +6,138 @@ MULTILIB_DIRNAMES =
MULTILIB_REQUIRED =
MULTILIB_REUSE =

# Fallback configurations
# -march multilib options for RMX-100 mini
arcv_march_variants = rv32e
arcv_march_variants += rv32e_zicsr
arcv_march_variants += rv32em
arcv_march_variants += rv32ea
arcv_march_variants += rv32ema
arcv_march_variants += rv32emac_zcb_zba_zbb_zbs_zfinx_zdinx

# -march multilib options for RMX-100 and RMX-500
arcv_march_variants += rv32i
arcv_march_variants += rv32i_zicsr
arcv_march_variants += rv32ic
arcv_march_variants += rv32ic_zicsr
arcv_march_variants += rv32ia
arcv_march_variants += rv32ia_zicsr
arcv_march_variants += rv32im
arcv_march_variants += rv32im_zicsr
arcv_march_variants += rv32iac
arcv_march_variants += rv32iac_zicsr
arcv_march_variants += rv32imc
arcv_march_variants += rv32imc_zicsr
arcv_march_variants += rv32ia
arcv_march_variants += rv32ima
arcv_march_variants += rv32iac
arcv_march_variants += rv32imac
arcv_march_variants += rv32imac_zicsr
arcv_march_variants += rv32ic_zcb_zba_zbb_zbs
arcv_march_variants += rv32imc_zcb_zba_zbb_zbs
arcv_march_variants += rv32imac_zcb_zba_zbb_zbs
arcv_march_variants += rv32imac_zcb_zba_zbb_zbs_zfinx
arcv_march_variants += rv32imac_zcb_zba_zbb_zbs_zfinx_zdinx
arcv_march_variants += rv32i_zba_zbb_zbs
arcv_march_variants += rv32im_zba_zbb_zbs
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC, the most critical insns for strcmp() are or.b and rev8 which are both part of Zbb. Should we create a fallback without Zba and Zbs, but with Zbb?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that it's reasonable now. There could be too many of such fallbacks with a single zbb for all possible variants of march.

arcv_march_variants += rv32ima_zba_zbb_zbs
arcv_march_variants += rv32ima_zba_zbb_zbs_zfinx
arcv_march_variants += rv32ima_zba_zbb_zbs_zfinx_zdinx

# -march multilib options for RHX-100 (basic combinations are covered
# in RMX-100 and RMX-500 list)
arcv_march_variants += rv32imafc
arcv_march_variants += rv32imafdc
arcv_march_variants += rv32imafd_zca
arcv_march_variants += rv32imafc_zcb_zba_zbb_zbs
arcv_march_variants += rv32imafd_zca_zcb_zba_zbb_zbs

# -march multilib options for RPX-100
arcv_march_variants += rv64i
arcv_march_variants += rv64i_zicsr
arcv_march_variants += rv64ic
arcv_march_variants += rv64im
arcv_march_variants += rv64imc
arcv_march_variants += rv64ia
arcv_march_variants += rv64ima
arcv_march_variants += rv64iac
arcv_march_variants += rv64imac
arcv_march_variants += rv64imac_zicsr
arcv_march_variants += rv64imafdc

# RMX-100 mini
arcv_march_variants += rv32emac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zdinx_zicsr

# RMX-100/500
arcv_march_variants += rv32ic_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr
arcv_march_variants += rv32im_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr
arcv_march_variants += rv32im_zba_zbb_zbs_zicsr
arcv_march_variants += rv32imc_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr
arcv_march_variants += rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr
arcv_march_variants += rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zicsr
arcv_march_variants += rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zdinx_zicsr

# RHX-100
arcv_march_variants += rv32imac_zcb_zcmp_zba_zbb_zbs_zicsr
arcv_march_variants += rv32imafc_zcb_zcmp_zba_zbb_zbs_zicsr
arcv_march_variants += rv32imafd_zca_zcb_zcmp_zba_zbb_zbs_zicsr

# RPX-100
arcv_march_variants += rv64imac_zcb_zba_zbb_zbs_zicsr
arcv_march_variants += rv64imafdc_zcb_zba_zbb_zbs_zicsr
arcv_march_variants += rv64imac_zcb_zba_zbb_zbs
arcv_march_variants += rv64imafdc_zcb_zba_zbb_zbs

MULTILIB_OPTIONS += $(subst $(space),/,$(patsubst %,march=%,$(arcv_march_variants)))
MULTILIB_DIRNAMES += $(arcv_march_variants)

MULTILIB_OPTIONS += mabi=ilp32e/mabi=ilp32/mabi=ilp32f/mabi=ilp32d/mabi=lp64/mabi=lp64d
MULTILIB_DIRNAMES += ilp32e ilp32 ilp32f ilp32d lp64 lp64d

MULTILIB_OPTIONS += mtune=arc-v-rmx-100-series/mtune=arc-v-rmx-500-series/mtune=arc-v-rhx-100-series/mtune=arc-v-rpx-100-series
MULTILIB_DIRNAMES += rmx100 rmx500 rhx100 rpx100
MULTILIB_OPTIONS += mtune=arc-v-rmx-500-series/mtune=arc-v-rhx-100-series/mtune=arc-v-rpx-100-series
MULTILIB_DIRNAMES += rmx500 rhx100 rpx100

MULTILIB_OPTIONS += mcmodel=medany
MULTILIB_DIRNAMES += medany

# Fallback configurations for general targets
MULTILIB_REQUIRED += march=rv32i/mabi=ilp32

# Fallback configurations for RMX-100 mini
MULTILIB_REQUIRED += march=rv32e/mabi=ilp32e/mtune=arc-v-rmx-100-series
# Configurations for RMX-100 mini
MULTILIB_REQUIRED += march=rv32e/mabi=ilp32e
MULTILIB_REQUIRED += march=rv32em/mabi=ilp32e
MULTILIB_REQUIRED += march=rv32ea/mabi=ilp32e
MULTILIB_REQUIRED += march=rv32ema/mabi=ilp32e
MULTILIB_REQUIRED += march=rv32emac_zcb_zba_zbb_zbs_zfinx_zdinx/mabi=ilp32e

# Fallback configurations for RMX-100
MULTILIB_REQUIRED += march=rv32i/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32ia/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imc_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32iac_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imac_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series

# Fallback configurations for RMX-500
# Configurations for RMX-100 - general
MULTILIB_REQUIRED += march=rv32i/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ic/mabi=ilp32
MULTILIB_REQUIRED += march=rv32im/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ia/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ima/mabi=ilp32
MULTILIB_REQUIRED += march=rv32iac/mabi=ilp32
MULTILIB_REQUIRED += march=rv32imac/mabi=ilp32

# Configurations for RMX-100 - optimized
MULTILIB_REQUIRED += march=rv32ic_zcb_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32imc_zcb_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs_zfinx/mabi=ilp32
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs_zfinx_zdinx/mabi=ilp32

# Configurations for RMX-100 - optimized (without C and Zc*)
MULTILIB_REQUIRED += march=rv32i_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32im_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ima_zba_zbb_zbs/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ima_zba_zbb_zbs_zfinx/mabi=ilp32
MULTILIB_REQUIRED += march=rv32ima_zba_zbb_zbs_zfinx_zdinx/mabi=ilp32

# Configurations for RMX-500 - general
MULTILIB_REQUIRED += march=rv32i/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32ic/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32im/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32ia/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imc_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32iac_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series

# Fallback configurations for RHX-100
MULTILIB_REQUIRED += march=rv32ima/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32iac/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac/mabi=ilp32/mtune=arc-v-rmx-500-series

# Configurations for RMX-500 - optimized
MULTILIB_REQUIRED += march=rv32ic_zcb_zba_zbb_zbs/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imc_zcb_zba_zbb_zbs/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs_zfinx/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs_zfinx_zdinx/mabi=ilp32/mtune=arc-v-rmx-500-series

# Configurations for RHX-100 - general
MULTILIB_REQUIRED += march=rv32i/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32ic/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32im/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32ia/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imac_zicsr/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32ima/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32iac/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imac/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafc/mabi=ilp32f/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafdc/mabi=ilp32d/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafd_zca/mabi=ilp32d/mtune=arc-v-rhx-100-series

# Configurations for RHX-100 - optimized
MULTILIB_REQUIRED += march=rv32imac_zcb_zba_zbb_zbs/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafc_zcb_zba_zbb_zbs/mabi=ilp32f/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafd_zca_zcb_zba_zbb_zbs/mabi=ilp32d/mtune=arc-v-rhx-100-series

# Fallback configurations for RPX-100
# Configurations for RPX-100 - general
MULTILIB_REQUIRED += march=rv64i/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64ic/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64im/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imc/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64ia/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imac_zicsr/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64ima/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64iac/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imac/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imafdc/mabi=lp64d/mtune=arc-v-rpx-100-series/mcmodel=medany

# RMX-100 mini
MULTILIB_REQUIRED += march=rv32emac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zdinx_zicsr/mabi=ilp32e/mtune=arc-v-rmx-100-series

# RMX-100
MULTILIB_REQUIRED += march=rv32im_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32ic_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32im_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imc_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zdinx_zicsr/mabi=ilp32/mtune=arc-v-rmx-100-series

# RMX-500
MULTILIB_REQUIRED += march=rv32ic_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32im_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imc_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zcmt_zba_zbb_zbs_zfinx_zdinx_zicsr/mabi=ilp32/mtune=arc-v-rmx-500-series

# RHX-100
MULTILIB_REQUIRED += march=rv32imac_zcb_zcmp_zba_zbb_zbs_zicsr/mabi=ilp32/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafc_zcb_zcmp_zba_zbb_zbs_zicsr/mabi=ilp32f/mtune=arc-v-rhx-100-series
MULTILIB_REQUIRED += march=rv32imafd_zca_zcb_zcmp_zba_zbb_zbs_zicsr/mabi=ilp32d/mtune=arc-v-rhx-100-series

# RPX-100
MULTILIB_REQUIRED += march=rv64imac_zcb_zba_zbb_zbs_zicsr/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imafdc_zcb_zba_zbb_zbs_zicsr/mabi=lp64d/mtune=arc-v-rpx-100-series/mcmodel=medany
# Configurations for RPX-100 - optimized
MULTILIB_REQUIRED += march=rv64imac_zcb_zba_zbb_zbs/mabi=lp64/mtune=arc-v-rpx-100-series/mcmodel=medany
MULTILIB_REQUIRED += march=rv64imafdc_zcb_zba_zbb_zbs/mabi=lp64d/mtune=arc-v-rpx-100-series/mcmodel=medany