public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Lulu Cheng <chenglulu@loongson.cn>
To: Yang Yujie <yangyujie@loongson.cn>, gcc-patches@gcc.gnu.org
Cc: xuchenghua@loongson.cn, xry111@xry111.site
Subject: Re: [pushed][PATCH v4 2/2] LoongArch: Define builtin macros for ISA evolutions
Date: Tue, 23 Apr 2024 11:31:24 +0800	[thread overview]
Message-ID: <faffa635-89af-8275-1e13-120cd2c05990@loongson.cn> (raw)
In-Reply-To: <20240423024248.243759-2-yangyujie@loongson.cn>

Pushed to r14-10084.

在 2024/4/23 上午10:42, Yang Yujie 写道:
> Detailed description of these definitions can be found at
> https://github.com/loongson/la-toolchain-conventions, which
> the LoongArch GCC port aims to conform to.
>
> gcc/ChangeLog:
>
> 	* config.gcc: Add loongarch-evolution.o.
> 	* config/loongarch/genopts/genstr.sh: Enable generation of
> 	loongarch-evolution.[cc,h].
> 	* config/loongarch/t-loongarch: Likewise.
> 	* config/loongarch/genopts/gen-evolution.awk: New file.
> 	* config/loongarch/genopts/isa-evolution.in: Mark ISA version
> 	of introduction for each ISA evolution feature.
> 	* config/loongarch/loongarch-c.cc (loongarch_cpu_cpp_builtins):
> 	Define builtin macros for enabled ISA evolutions and the ISA
> 	version.
> 	* config/loongarch/loongarch-cpu.cc: Use loongarch-evolution.h.
> 	* config/loongarch/loongarch.h: Likewise.
> 	* config/loongarch/loongarch-cpucfg-map.h: Delete.
> 	* config/loongarch/loongarch-evolution.cc: New file.
> 	* config/loongarch/loongarch-evolution.h: New file.
> 	* config/loongarch/loongarch-opts.h (ISA_HAS_FRECIPE): Define.
> 	(ISA_HAS_DIV32): Likewise.
> 	(ISA_HAS_LAM_BH): Likewise.
> 	(ISA_HAS_LAMCAS): Likewise.
> 	(ISA_HAS_LD_SEQ_SA): Likewise.
> ---
>   gcc/config.gcc                                |   2 +-
>   .../loongarch/genopts/gen-evolution.awk       | 230 ++++++++++++++++++
>   gcc/config/loongarch/genopts/genstr.sh        |  82 ++-----
>   gcc/config/loongarch/genopts/isa-evolution.in |  10 +-
>   gcc/config/loongarch/loongarch-c.cc           |  23 ++
>   gcc/config/loongarch/loongarch-cpu.cc         |   2 +-
>   gcc/config/loongarch/loongarch-evolution.cc   |  60 +++++
>   ...rch-cpucfg-map.h => loongarch-evolution.h} |  46 +++-
>   gcc/config/loongarch/loongarch-opts.h         |  11 -
>   gcc/config/loongarch/loongarch.h              |   1 +
>   gcc/config/loongarch/t-loongarch              |  26 +-
>   11 files changed, 398 insertions(+), 95 deletions(-)
>   create mode 100644 gcc/config/loongarch/genopts/gen-evolution.awk
>   create mode 100644 gcc/config/loongarch/loongarch-evolution.cc
>   rename gcc/config/loongarch/{loongarch-cpucfg-map.h => loongarch-evolution.h} (52%)
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index 929695c25ab..3364fc27524 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -485,7 +485,7 @@ loongarch*-*-*)
>   	cpu_type=loongarch
>   	d_target_objs="loongarch-d.o"
>   	extra_headers="larchintrin.h lsxintrin.h lasxintrin.h"
> -	extra_objs="loongarch-c.o loongarch-builtins.o loongarch-cpu.o loongarch-opts.o loongarch-def.o"
> +	extra_objs="loongarch-c.o loongarch-builtins.o loongarch-cpu.o loongarch-opts.o loongarch-def.o loongarch-evolution.o"
>   	extra_gcc_objs="loongarch-driver.o loongarch-cpu.o loongarch-opts.o loongarch-def.o"
>   	extra_options="${extra_options} g.opt fused-madd.opt"
>   	;;
> diff --git a/gcc/config/loongarch/genopts/gen-evolution.awk b/gcc/config/loongarch/genopts/gen-evolution.awk
> new file mode 100644
> index 00000000000..4d105afa906
> --- /dev/null
> +++ b/gcc/config/loongarch/genopts/gen-evolution.awk
> @@ -0,0 +1,230 @@
> +#!/usr/bin/gawk
> +#
> +# A simple script that generates loongarch-evolution.h
> +# from genopts/isa-evolution.in
> +#
> +# Copyright (C) 2021-2024 Free Software Foundation, Inc.
> +#
> +# This file is part of GCC.
> +#
> +# GCC is free software; you can redistribute it and/or modify it under
> +# the terms of the GNU General Public License as published by the Free
> +# Software Foundation; either version 3, or (at your option) any later
> +# version.
> +#
> +# GCC is distributed in the hope that it will be useful, but WITHOUT
> +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
> +# License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with GCC; see the file COPYING3.  If not see
> +# <http://www.gnu.org/licenses/>.
> +
> +BEGIN {
> +    # isa_version_major[]
> +    # isa_version_minor[]
> +    # cpucfg_word[]
> +    # cpucfg_bit_in_word[]
> +    # name_capitalized[]
> +    # comment[]
> +}
> +
> +{
> +    cpucfg_word[NR] = $1
> +    cpucfg_bit_in_word[NR] = $2
> +    name[NR] = gensub(/-/, "_", "g", $3)
> +    name_capitalized[NR] = toupper(name[NR])
> +    isa_version_major[NR] = gensub(/^([1-9][0-9]*)\.([0-9]+)$/, "\\1", 1, $4)
> +    isa_version_minor[NR] = gensub(/^([1-9][0-9]*)\.([0-9]+)$/, "\\2", 1, $4)
> +
> +    $1 = $2 = $3 = $4 = ""
> +    sub (/^\s*/, "")
> +    comment[NR] = $0
> +}
> +
> +function copyright_header(from_year,to_year)
> +{
> +    print "   Copyright (C) " from_year "-" to_year \
> +          " Free Software Foundation, Inc."
> +    print ""
> +    print "This file is part of GCC."
> +    print ""
> +    print "GCC is free software; you can redistribute it and/or modify"
> +    print "it under the terms of the GNU General Public License as published by"
> +    print "the Free Software Foundation; either version 3, or (at your option)"
> +    print "any later version."
> +    print ""
> +    print "GCC is distributed in the hope that it will be useful,"
> +    print "but WITHOUT ANY WARRANTY; without even the implied warranty of"
> +    print "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
> +    print "GNU General Public License for more details."
> +    print ""
> +    print "You should have received a copy of the GNU General Public License"
> +    print "along with GCC; see the file COPYING3.  If not see"
> +    print "<http://www.gnu.org/licenses/>."
> +}
> +
> +function gen_cpucfg_map()
> +{
> +    print "static constexpr struct {"
> +    print "  int cpucfg_word;"
> +    print "  unsigned int cpucfg_bit;"
> +    print "  HOST_WIDE_INT isa_evolution_bit;"
> +    print "} cpucfg_map[] = {"
> +
> +    for (i = 1; i <= NR; i++)
> +    printf ("  { %d, 1u << %d, OPTION_MASK_ISA_%s },\n",
> +            cpucfg_word[i], cpucfg_bit_in_word[i], name_capitalized[i])
> +
> +    print "};"
> +}
> +
> +function gen_cpucfg_useful_idx()
> +{
> +    split("0 1 2 16 17 18 19", init_useful_idx)
> +
> +    delete idx_bucket
> +
> +    for (i in init_useful_idx)
> +        idx_bucket[init_useful_idx[i]] = 1
> +    delete init_useful_idx
> +
> +    for (i in cpucfg_word)
> +        idx_bucket[cpucfg_word[i]] = 1
> +
> +    delete idx_list
> +    for (i in idx_bucket)
> +        idx_list[length(idx_list)-1] = i+0
> +    delete idx_bucket
> +
> +    asort (idx_list)
> +
> +    print "static constexpr int cpucfg_useful_idx[] = {"
> +    for (i in idx_list)
> +        printf("  %d,\n", idx_list[i])
> +    print "};"
> +
> +    print ""
> +
> +    printf ("static constexpr int N_CPUCFG_WORDS = %d;\n",
> +            idx_list[length(idx_list)] + 1)
> +
> +    delete idx_list
> +}
> +
> +function gen_evolution_decl()
> +{
> +    print "/* ISA evolution features */"
> +    print "enum {"
> +
> +    for (i = 1; i <= NR; i++)
> +    print "  EVO_" name_capitalized[i] " = " i - 1 ","
> +
> +    print "  N_EVO_FEATURES = " NR
> +    print "};"
> +    print ""
> +
> +    print "/* Condition macros */"
> +    for (i = 1; i <= NR; i++)
> +    printf ("#define ISA_HAS_%s \\\n" \
> +            "  (la_target.isa.evolution & OPTION_MASK_ISA_%s)\n",
> +            name_capitalized[i], name_capitalized[i])
> +    print ""
> +
> +    print "/* Bitmasks on la_target.isa.evolution.  */"
> +    print "extern int la_evo_feature_masks[N_EVO_FEATURES];"
> +    print ""
> +    print "/* Builtin macro names for the evolution features.  */"
> +    print "extern const char* la_evo_macro_name[N_EVO_FEATURES];"
> +    print ""
> +    print "/* The ISA version where a specific feature is introduced.  */"
> +    print "extern int la_evo_version_major[N_EVO_FEATURES];"
> +    print "extern int la_evo_version_minor[N_EVO_FEATURES];"
> +}
> +
> +function gen_full_header()
> +{
> +    print "/* Generated automatically by \"genstr\" from \"isa-evolution.in\"."
> +    print "   Please do not edit this file directly."
> +    print ""
> +
> +    copyright_header(2023, 2024)
> +
> +    print "*/"
> +    print ""
> +
> +    print "#ifndef LOONGARCH_EVOLUTION_H"
> +    print "#define LOONGARCH_EVOLUTION_H"
> +    print ""
> +    print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)"
> +    print ""
> +    print "#include \"options.h\""
> +    print ""
> +
> +    gen_cpucfg_map()
> +
> +    print ""
> +
> +    gen_cpucfg_useful_idx()
> +
> +    print ""
> +
> +    gen_evolution_decl()
> +
> +    print ""
> +    print "#endif"
> +    print ""
> +    print "#endif /* LOONGARCH_EVOLUTION_H */"
> +}
> +
> +
> +function gen_full_source()
> +{
> +    print "/* Generated automatically by \"genstr\" from \"isa-evolution.in\"."
> +    print "   Please do not edit this file directly."
> +    print ""
> +
> +    copyright_header(2023, 2024)
> +
> +    print "*/"
> +    print ""
> +    print "#include \"config.h\""
> +    print "#include \"system.h\""
> +    print "#include \"coretypes.h\""
> +    print "#include \"options.h\""
> +    print ""
> +    print "#include \"loongarch-evolution.h\""
> +    print ""
> +
> +    print "int la_evo_feature_masks[] = {";
> +    for (i = 1; i <= NR; i++)
> +    print "  OPTION_MASK_ISA_" name_capitalized[i] ","
> +    print "};"
> +    print ""
> +
> +    print "const char* la_evo_macro_name[] = {";
> +    for (i = 1; i <= NR; i++)
> +    print "  \"__loongarch_" name[i] "\","
> +    print "};"
> +    print ""
> +
> +
> +    print "int la_evo_version_major[] = {"
> +    for (i = 1; i <= NR; i++)
> +    print "  " isa_version_major[i] ",    /* " name_capitalized[i] " */"
> +    print "};"
> +    print ""
> +
> +    print "int la_evo_version_minor[] = {"
> +    for (i = 1; i <= NR; i++)
> +    print "  " isa_version_minor[i] ",    /* " name_capitalized[i] " */"
> +    print "};"
> +}
> +
> +END {
> +    if (header_p)
> +        gen_full_header()
> +    else
> +        gen_full_source()
> +}
> diff --git a/gcc/config/loongarch/genopts/genstr.sh b/gcc/config/loongarch/genopts/genstr.sh
> index 724c9aaedac..5b3bf7fdf0c 100755
> --- a/gcc/config/loongarch/genopts/genstr.sh
> +++ b/gcc/config/loongarch/genopts/genstr.sh
> @@ -108,78 +108,30 @@ EOF
>         print("m"$3)
>         gsub(/-/, "_", $3)
>         print("Target Mask(ISA_"toupper($3)") Var(la_isa_evolution)")
> -      $1=""; $2=""; $3=""
> +      $1=""; $2=""; $3=""; $4=""
>         sub(/^ */, "", $0)
>         print($0)
>       }' isa-evolution.in
>   }
>   
> -gen_cpucfg_map() {
> -    cat <<EOF
> -/* Generated automatically by "genstr" from "isa-evolution.in".
> -   Please do not edit this file directly.
> -
> -   Copyright (C) 2023-2024 Free Software Foundation, Inc.
> -
> -This file is part of GCC.
> -
> -GCC is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 3, or (at your option)
> -any later version.
> -
> -GCC is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with GCC; see the file COPYING3.  If not see
> -<http://www.gnu.org/licenses/>.  */
> -
> -#ifndef LOONGARCH_CPUCFG_MAP_H
> -#define LOONGARCH_CPUCFG_MAP_H
> -
> -#include "options.h"
> -
> -static constexpr struct {
> -  int cpucfg_word;
> -  unsigned int cpucfg_bit;
> -  HOST_WIDE_INT isa_evolution_bit;
> -} cpucfg_map[] = {
> -EOF
> -
> -    # Generate the strings from isa-evolution.in.
> -    awk '{
> -      gsub(/-/, "_", $3)
> -      print("  { "$1", 1u << "$2", OPTION_MASK_ISA_"toupper($3)" },")
> -    }' isa-evolution.in
> -
> -    echo "};"
> -    echo
> -    echo "static constexpr int cpucfg_useful_idx[] = {"
> -
> -    awk 'BEGIN { print("  0,\n  1,\n  2,\n  16,\n  17,\n  18,\n  19,") }
> -	 {if ($1+0 > max+0) max=$1; print("  "$1",")}' \
> -	isa-evolution.in | sort -n | uniq
> -
> -    echo "};"
> -    echo ""
> -
> -    awk 'BEGIN { max=19 }
> -	 { if ($1+0 > max+0) max=$1 }
> -	 END { print "static constexpr int N_CPUCFG_WORDS = "1+max";" }' \
> -	isa-evolution.in
> -
> -    echo "#endif /* LOONGARCH_CPUCFG_MAP_H */"
> -}
> -
>   main() {
>       case "$1" in
> -	cpucfg-map) gen_cpucfg_map;;
> -	header) gen_defines;;
> -	opt) gen_options;;
> -	*) echo "Unknown Command: \"$1\". Available: cpucfg-map, header, opt"; exit 1;;
> +	evolution_h)
> +            awk -v header_p=1 -f gen-evolution.awk isa-evolution.in
> +            ;;
> +	evolution_c)
> +            awk -v header_p=0 -f gen-evolution.awk isa-evolution.in
> +            ;;
> +	header)
> +            gen_defines
> +            ;;
> +	opt)
> +            gen_options
> +            ;;
> +	*)
> +            echo "Unknown Command: \"$1\". Available: header, opt, evolution_h, evolution_c"
> +            exit 1
> +            ;;
>       esac
>   }
>   
> diff --git a/gcc/config/loongarch/genopts/isa-evolution.in b/gcc/config/loongarch/genopts/isa-evolution.in
> index 11a198b649f..50f72d5a0bc 100644
> --- a/gcc/config/loongarch/genopts/isa-evolution.in
> +++ b/gcc/config/loongarch/genopts/isa-evolution.in
> @@ -1,5 +1,5 @@
> -2	25	frecipe		Support frecipe.{s/d} and frsqrte.{s/d} instructions.
> -2	26	div32		Support div.w[u] and mod.w[u] instructions with inputs not sign-extended.
> -2	27	lam-bh		Support am{swap/add}[_db].{b/h} instructions.
> -2	28	lamcas		Support amcas[_db].{b/h/w/d} instructions.
> -3	23	ld-seq-sa	Do not need load-load barriers (dbar 0x700).
> +2	25	frecipe		1.1		Support frecipe.{s/d} and frsqrte.{s/d} instructions.
> +2	26	div32		1.1		Support div.w[u] and mod.w[u] instructions with inputs not sign-extended.
> +2	27	lam-bh		1.1		Support am{swap/add}[_db].{b/h} instructions.
> +2	28	lamcas		1.1		Support amcas[_db].{b/h/w/d} instructions.
> +3	23	ld-seq-sa	1.1		Do not need load-load barriers (dbar 0x700).
> diff --git a/gcc/config/loongarch/loongarch-c.cc b/gcc/config/loongarch/loongarch-c.cc
> index c1eab28db4b..c6763647cd1 100644
> --- a/gcc/config/loongarch/loongarch-c.cc
> +++ b/gcc/config/loongarch/loongarch-c.cc
> @@ -103,6 +103,29 @@ loongarch_cpu_cpp_builtins (cpp_reader *pfile)
>         builtin_define ("__loongarch_simd_width=256");
>       }
>   
> +  /* ISA evolution features */
> +  int max_v_major = 1, max_v_minor = 0;
> +
> +  for (int i = 0; i < N_EVO_FEATURES; i++)
> +    if (la_target.isa.evolution & la_evo_feature_masks[i])
> +      {
> +	builtin_define (la_evo_macro_name[i]);
> +
> +	int major = la_evo_version_major[i],
> +	    minor = la_evo_version_minor[i];
> +
> +	max_v_major = major > max_v_major ? major : max_v_major;
> +	max_v_minor = major == max_v_major
> +	  ? (minor > max_v_minor ? minor : max_v_minor): max_v_minor;
> +      }
> +
> +  /* Find the minimum ISA version required to run the target program.  */
> +  if (!(max_v_major == 1 && max_v_minor <= 1 && ISA_HAS_LASX))
> +    {
> +      builtin_define_with_int_value ("__loongarch_version_major", max_v_major);
> +      builtin_define_with_int_value ("__loongarch_version_minor", max_v_minor);
> +    }
> +
>     /* Add support for FLOAT128_TYPE on the LoongArch architecture.  */
>     builtin_define ("__FLOAT128_TYPE__");
>   
> diff --git a/gcc/config/loongarch/loongarch-cpu.cc b/gcc/config/loongarch/loongarch-cpu.cc
> index 80e4494ba19..8564ebb24ee 100644
> --- a/gcc/config/loongarch/loongarch-cpu.cc
> +++ b/gcc/config/loongarch/loongarch-cpu.cc
> @@ -28,8 +28,8 @@ along with GCC; see the file COPYING3.  If not see
>   #include "loongarch-def.h"
>   #include "loongarch-opts.h"
>   #include "loongarch-cpu.h"
> -#include "loongarch-cpucfg-map.h"
>   #include "loongarch-str.h"
> +#include "loongarch-evolution.h"
>   
>   
>   /* Native CPU detection with "cpucfg" */
> diff --git a/gcc/config/loongarch/loongarch-evolution.cc b/gcc/config/loongarch/loongarch-evolution.cc
> new file mode 100644
> index 00000000000..1fb4e3b01b8
> --- /dev/null
> +++ b/gcc/config/loongarch/loongarch-evolution.cc
> @@ -0,0 +1,60 @@
> +/* Generated automatically by "genstr" from "isa-evolution.in".
> +   Please do not edit this file directly.
> +
> +   Copyright (C) 2023-2024 Free Software Foundation, Inc.
> +
> +This file is part of GCC.
> +
> +GCC is free software; you can redistribute it and/or modify
> +it under the terms of the GNU General Public License as published by
> +the Free Software Foundation; either version 3, or (at your option)
> +any later version.
> +
> +GCC is distributed in the hope that it will be useful,
> +but WITHOUT ANY WARRANTY; without even the implied warranty of
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +GNU General Public License for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with GCC; see the file COPYING3.  If not see
> +<http://www.gnu.org/licenses/>.
> +*/
> +
> +#include "config.h"
> +#include "system.h"
> +#include "coretypes.h"
> +#include "options.h"
> +
> +#include "loongarch-evolution.h"
> +
> +int la_evo_feature_masks[] = {
> +  OPTION_MASK_ISA_FRECIPE,
> +  OPTION_MASK_ISA_DIV32,
> +  OPTION_MASK_ISA_LAM_BH,
> +  OPTION_MASK_ISA_LAMCAS,
> +  OPTION_MASK_ISA_LD_SEQ_SA,
> +};
> +
> +const char* la_evo_macro_name[] = {
> +  "__loongarch_frecipe",
> +  "__loongarch_div32",
> +  "__loongarch_lam_bh",
> +  "__loongarch_lamcas",
> +  "__loongarch_ld_seq_sa",
> +};
> +
> +int la_evo_version_major[] = {
> +  1,    /* FRECIPE */
> +  1,    /* DIV32 */
> +  1,    /* LAM_BH */
> +  1,    /* LAMCAS */
> +  1,    /* LD_SEQ_SA */
> +};
> +
> +int la_evo_version_minor[] = {
> +  1,    /* FRECIPE */
> +  1,    /* DIV32 */
> +  1,    /* LAM_BH */
> +  1,    /* LAMCAS */
> +  1,    /* LD_SEQ_SA */
> +};
> diff --git a/gcc/config/loongarch/loongarch-cpucfg-map.h b/gcc/config/loongarch/loongarch-evolution.h
> similarity index 52%
> rename from gcc/config/loongarch/loongarch-cpucfg-map.h
> rename to gcc/config/loongarch/loongarch-evolution.h
> index e035322d267..7e8e602c70c 100644
> --- a/gcc/config/loongarch/loongarch-cpucfg-map.h
> +++ b/gcc/config/loongarch/loongarch-evolution.h
> @@ -17,10 +17,13 @@ GNU General Public License for more details.
>   
>   You should have received a copy of the GNU General Public License
>   along with GCC; see the file COPYING3.  If not see
> -<http://www.gnu.org/licenses/>.  */
> +<http://www.gnu.org/licenses/>.
> +*/
>   
> -#ifndef LOONGARCH_CPUCFG_MAP_H
> -#define LOONGARCH_CPUCFG_MAP_H
> +#ifndef LOONGARCH_EVOLUTION_H
> +#define LOONGARCH_EVOLUTION_H
> +
> +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
>   
>   #include "options.h"
>   
> @@ -48,4 +51,39 @@ static constexpr int cpucfg_useful_idx[] = {
>   };
>   
>   static constexpr int N_CPUCFG_WORDS = 20;
> -#endif /* LOONGARCH_CPUCFG_MAP_H */
> +
> +/* ISA evolution features */
> +enum {
> +  EVO_FRECIPE = 0,
> +  EVO_DIV32 = 1,
> +  EVO_LAM_BH = 2,
> +  EVO_LAMCAS = 3,
> +  EVO_LD_SEQ_SA = 4,
> +  N_EVO_FEATURES = 5
> +};
> +
> +/* Condition macros */
> +#define ISA_HAS_FRECIPE \
> +  (la_target.isa.evolution & OPTION_MASK_ISA_FRECIPE)
> +#define ISA_HAS_DIV32 \
> +  (la_target.isa.evolution & OPTION_MASK_ISA_DIV32)
> +#define ISA_HAS_LAM_BH \
> +  (la_target.isa.evolution & OPTION_MASK_ISA_LAM_BH)
> +#define ISA_HAS_LAMCAS \
> +  (la_target.isa.evolution & OPTION_MASK_ISA_LAMCAS)
> +#define ISA_HAS_LD_SEQ_SA \
> +  (la_target.isa.evolution & OPTION_MASK_ISA_LD_SEQ_SA)
> +
> +/* Bitmasks on la_target.isa.evolution.  */
> +extern int la_evo_feature_masks[N_EVO_FEATURES];
> +
> +/* Builtin macro names for the evolution features.  */
> +extern const char* la_evo_macro_name[N_EVO_FEATURES];
> +
> +/* The ISA version where a specific feature is introduced.  */
> +extern int la_evo_version_major[N_EVO_FEATURES];
> +extern int la_evo_version_minor[N_EVO_FEATURES];
> +
> +#endif
> +
> +#endif /* LOONGARCH_EVOLUTION_H */
> diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h
> index f80482357ac..22efac71000 100644
> --- a/gcc/config/loongarch/loongarch-opts.h
> +++ b/gcc/config/loongarch/loongarch-opts.h
> @@ -115,17 +115,6 @@ struct loongarch_flags {
>   #define ISA_HAS_LASX \
>     (la_target.isa.simd == ISA_EXT_SIMD_LASX)
>   
> -#define ISA_HAS_FRECIPE \
> -  (la_target.isa.evolution & OPTION_MASK_ISA_FRECIPE)
> -#define ISA_HAS_DIV32 \
> -  (la_target.isa.evolution & OPTION_MASK_ISA_DIV32)
> -#define ISA_HAS_LAM_BH \
> -  (la_target.isa.evolution & OPTION_MASK_ISA_LAM_BH)
> -#define ISA_HAS_LAMCAS \
> -  (la_target.isa.evolution & OPTION_MASK_ISA_LAMCAS)
> -#define ISA_HAS_LD_SEQ_SA \
> -  (la_target.isa.evolution & OPTION_MASK_ISA_LD_SEQ_SA)
> -
>   /* TARGET_ macros for use in *.md template conditionals */
>   #define TARGET_uARCH_LA464	  (la_target.cpu_tune == TUNE_LA464)
>   #define TARGET_uARCH_LA664	  (la_target.cpu_tune == TUNE_LA664)
> diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h
> index db8a9eb9516..f7fe950f333 100644
> --- a/gcc/config/loongarch/loongarch.h
> +++ b/gcc/config/loongarch/loongarch.h
> @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3.  If not see
>   /* LoongArch external variables defined in loongarch.cc.  */
>   
>   #include "config/loongarch/loongarch-opts.h"
> +#include "config/loongarch/loongarch-evolution.h"
>   
>   #define SWITCHABLE_TARGET 1
>   
> diff --git a/gcc/config/loongarch/t-loongarch b/gcc/config/loongarch/t-loongarch
> index acf5da95310..6ce36a80fc1 100644
> --- a/gcc/config/loongarch/t-loongarch
> +++ b/gcc/config/loongarch/t-loongarch
> @@ -21,7 +21,7 @@ GTM_H += loongarch-multilib.h
>   OPTIONS_H_EXTRA += $(srcdir)/config/loongarch/loongarch-def.h	    \
>   		   $(srcdir)/config/loongarch/loongarch-def-array.h \
>   		   $(srcdir)/config/loongarch/loongarch-tune.h	    \
> -		   $(srcdir)/config/loongarch/loongarch-cpucfg-map.h
> +		   $(srcdir)/config/loongarch/loongarch-evolution.h
>   
>   # Canonical target triplet from config.gcc
>   LA_MULTIARCH_TRIPLET = $(patsubst LA_MULTIARCH_TRIPLET=%,%,$\
> @@ -62,7 +62,11 @@ loongarch-opts.o: $(srcdir)/config/loongarch/loongarch-opts.cc $(LA_STR_H)
>   	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
>   
>   loongarch-cpu.o: $(srcdir)/config/loongarch/loongarch-cpu.cc $(LA_STR_H) \
> -		 $(srcdir)/config/loongarch/loongarch-cpucfg-map.h
> +		 $(srcdir)/config/loongarch/loongarch-evolution.h
> +	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
> +
> +loongarch-evolution.o: $(srcdir)/config/loongarch/loongarch-evolution.cc $(LA_STR_H) \
> +	$(srcdir)/config/loongarch/loongarch-evolution.h
>   	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
>   
>   loongarch-def.o: $(srcdir)/config/loongarch/loongarch-def.cc $(LA_STR_H)
> @@ -84,11 +88,17 @@ s-loongarch-opt: $(srcdir)/config/loongarch/genopts/genstr.sh \
>       $(srcdir)/config/loongarch/loongarch.opt
>   	$(STAMP) s-loongarch-opt
>   
> -$(srcdir)/config/loongarch/loongarch-cpucfg-map.h: s-loongarch-cpucfg-map
> +$(srcdir)/config/loongarch/loongarch-evolution.h: s-loongarch-evolution
>   	@true
> -s-loongarch-cpucfg-map: $(srcdir)/config/loongarch/genopts/genstr.sh \
> -	$(srcdir)/config/loongarch/genopts/isa-evolution.in
> -	$(SHELL) $< cpucfg-map > tmp-cpucfg.h
> -	$(SHELL) $(srcdir)/../move-if-change tmp-cpucfg.h \
> -	    $(srcdir)/config/loongarch/loongarch-cpucfg-map.h
> +$(srcdir)/config/loongarch/loongarch-evolution.cc: s-loongarch-evolution
> +	@true
> +s-loongarch-evolution: $(srcdir)/config/loongarch/genopts/genstr.sh \
> +	$(srcdir)/config/loongarch/genopts/isa-evolution.in \
> +	$(srcdir)/config/loongarch/genopts/gen-evolution.awk
> +	$(SHELL) $< evolution_h > tmp-isa-evo.h
> +	$(SHELL) $< evolution_c > tmp-isa-evo.cc
> +	$(SHELL) $(srcdir)/../move-if-change tmp-isa-evo.h \
> +	    $(srcdir)/config/loongarch/loongarch-evolution.h
> +	$(SHELL) $(srcdir)/../move-if-change tmp-isa-evo.cc \
> +	    $(srcdir)/config/loongarch/loongarch-evolution.cc
>   	$(STAMP) $@


  reply	other threads:[~2024-04-23  3:31 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-23  2:42 [PATCH v4 1/2] LoongArch: Define ISA versions Yang Yujie
2024-04-23  2:42 ` [PATCH v4 2/2] LoongArch: Define builtin macros for ISA evolutions Yang Yujie
2024-04-23  3:31   ` Lulu Cheng [this message]
2024-04-23  2:45 ` [PATCH v4 1/2] LoongArch: Define ISA versions Yang Yujie
2024-04-23  3:31 ` Lulu Cheng
2024-05-07  9:07   ` [pushed] " Xi Ruoyao
2024-05-07  9:42     ` Xi Ruoyao
2024-05-07 10:01       ` Lulu Cheng
2024-05-07 10:12         ` Xi Ruoyao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=faffa635-89af-8275-1e13-120cd2c05990@loongson.cn \
    --to=chenglulu@loongson.cn \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=xry111@xry111.site \
    --cc=xuchenghua@loongson.cn \
    --cc=yangyujie@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).