LoongArch processors may not support memory accesses without natural
alignments.  Building libraries with -mstrict-align may help with
toolchain binary compatiblity and performance on these implementations
(e.g. Loongson 2K1000LA).

No significant performance degredation is observed on current mainstream
LoongArch processors when the option is enabled.

gcc/ChangeLog:

        * config.gcc: use -mstrict-align for building libraries
        if --with-strict-align-lib is given.
---
 gcc/config.gcc | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 4fae672a3b7..ed70fa63268 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -4892,7 +4892,7 @@ case "${target}" in
                ;;
 
        loongarch*-*)
-               supported_defaults="abi arch tune fpu simd multilib-default"
+               supported_defaults="abi arch tune fpu simd multilib-default 
strict-align-lib"
 
                # Local variables
                unset \
@@ -5089,6 +5089,17 @@ case "${target}" in
                        ;;
                esac
 
+               # Build libraries with -mstrict-align if 
--with-strict-align-lib is given.
+               case ${with_strict_align_lib} in
+               yes) strict_align_opt="/mstrict-align" ;;
+               ""|no)  ;;
+               *)
+                       echo "Unknown option: 
--with-strict-align-lib=${with_strict_align_lib}" 1>&2
+                       exit 1
+                       ;;
+               esac
+
+
                # Handle --with-multilib-default
                if echo "${with_multilib_default}" \
                | grep -E -e '[[:space:]]' -e '//' -e '/$' -e '^/' > /dev/null 
2>&1; then
@@ -5250,6 +5261,9 @@ case "${target}" in
                                        ;;
                        esac
 
+                       # Use mstrict-align for building libraries if 
--with-strict-align-lib is given.
+                       
loongarch_multilib_list_make="${loongarch_multilib_list_make}${strict_align_opt}"
+
                        # Check for repeated configuration of the same multilib 
variant.
                        if echo "${elem_abi_base}/${elem_abi_ext}" \
                         | grep -E "^(${all_abis%|})$" >/dev/null 2>&1; then
-- 
2.36.0

Reply via email to