On Tue, 2024-05-07 at 17:07 +0800, Xi Ruoyao wrote: > Hmm, after this change the default (-march=la64v1.0) is enabling LSX: > > $ echo "int dummy;" | cc -c -v |& tail -n1 > COLLECT_GCC_OPTIONS='-c' '-v' '-mabi=lp64d' '-march=la64v1.0' '- > mfpu=64' > '-msimd=lsx' '-mcmodel=normal' '-mtune=generic' > > Is this expected or there's something wrong?
Note that https://github.com/loongson/la-toolchain-conventions?tab=readme-ov-file#configuring-the-target-isa says: LoongArch V1.1 features: Enable or disable features introduced by LoongArch V1.1. The LSX / LASX part of the LoongArch v1.1 update should only be enabled with lsx / lasx itself enabled. So to me -march=la64v1.0 should not imply -mlsx. > On Tue, 2024-04-23 at 11:31 +0800, Lulu Cheng wrote: > > Pushed to r14-10083. > > > > 在 2024/4/23 上午10:42, Yang Yujie 写道: > > > These ISA versions are defined as -march= parameters and > > > are recommended for building binaries for distribution. > > > > > > 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: Make la64v1.0 the default ISA preset of the > > > lp64d ABI. > > > * config/loongarch/genopts/loongarch-strings: Define > > > la64v1.0, la64v1.1. > > > * config/loongarch/genopts/loongarch.opt.in: Likewise. > > > * config/loongarch/loongarch-c.cc > > > (LARCH_CPP_SET_PROCESSOR): Likewise. > > > (loongarch_cpu_cpp_builtins): Likewise. > > > * config/loongarch/loongarch-cpu.cc (get_native_prid): > > > Likewise. > > > (fill_native_cpu_config): Likewise. > > > * config/loongarch/loongarch-def.cc (array_tune): > > > Likewise. > > > * config/loongarch/loongarch-def.h: Likewise. > > > * config/loongarch/loongarch-driver.cc > > > (driver_set_m_parm): > > > Likewise. > > > (driver_get_normalized_m_opts): Likewise. > > > * config/loongarch/loongarch-opts.cc > > > (default_tune_for_arch): Likewise. > > > (TUNE_FOR_ARCH): Likewise. > > > (arch_str): Likewise. > > > (loongarch_target_option_override): Likewise. > > > * config/loongarch/loongarch-opts.h (TARGET_uARCH_LA464): > > > Likewise. > > > (TARGET_uARCH_LA664): Likewise. > > > * config/loongarch/loongarch-str.h (STR_CPU_ABI_DEFAULT): > > > Likewise. > > > (STR_ARCH_ABI_DEFAULT): Likewise. > > > (STR_TUNE_GENERIC): Likewise. > > > (STR_ARCH_LA64V1_0): Likewise. > > > (STR_ARCH_LA64V1_1): Likewise. > > > * config/loongarch/loongarch.cc > > > (loongarch_cpu_sched_reassociation_width): Likewise. > > > (loongarch_asm_code_end): Likewise. > > > * config/loongarch/loongarch.opt: Likewise. > > > * doc/invoke.texi: Likewise. > > > --- > > > gcc/config.gcc | 34 ++++---- > > > .../loongarch/genopts/loongarch-strings | 5 +- > > > gcc/config/loongarch/genopts/loongarch.opt.in | 43 ++++++++-- > > > gcc/config/loongarch/loongarch-c.cc | 37 +++------ > > > gcc/config/loongarch/loongarch-cpu.cc | 35 ++++---- > > > gcc/config/loongarch/loongarch-def.cc | 83 > > > +++++++++++++-- > > > ---- > > > gcc/config/loongarch/loongarch-def.h | 37 ++++++--- > > > gcc/config/loongarch/loongarch-driver.cc | 8 +- > > > gcc/config/loongarch/loongarch-opts.cc | 66 +++++++++++-- > > > -- > > > gcc/config/loongarch/loongarch-opts.h | 4 +- > > > gcc/config/loongarch/loongarch-str.h | 5 +- > > > gcc/config/loongarch/loongarch.cc | 11 +-- > > > gcc/config/loongarch/loongarch.opt | 43 ++++++++-- > > > gcc/doc/invoke.texi | 57 ++++++++----- > > > 14 files changed, 300 insertions(+), 168 deletions(-) > > > > > > diff --git a/gcc/config.gcc b/gcc/config.gcc > > > index 5df3c52f8e9..929695c25ab 100644 > > > --- a/gcc/config.gcc > > > +++ b/gcc/config.gcc > > > @@ -5072,7 +5072,7 @@ case "${target}" in > > > > > > # Perform initial sanity checks on --with-* > > > options. > > > case ${with_arch} in > > > - "" | abi-default | loongarch64 | la[46]64) ;; # > > > OK, > > > append here. > > > + "" | la64v1.[01] | abi-default | loongarch64 | > > > la[46]64) ;; # OK, append here. > > > native) > > > if test x${host} != x${target}; then > > > echo "--with-arch=native is > > > illegal > > > for cross-compiler." 1>&2 > > > @@ -5119,10 +5119,18 @@ case "${target}" in > > > > > > # Infer ISA-related default options from the ABI: > > > pass 1 > > > case ${abi_base}/${abi_ext} in > > > - lp64*/base) > > > + lp64d/base) > > > # architectures that support lp64* ABI > > > - arch_pattern="native|abi- > > > default|loongarch64|la[46]64" > > > - # default architecture for lp64* ABI > > > + arch_pattern="native|abi- > > > default|la64v1.[01]|loongarch64|la[46]64" > > > + > > > + # default architecture for lp64d ABI > > > + arch_default="la64v1.0" > > > + ;; > > > + lp64[fs]/base) > > > + # architectures that support lp64* ABI > > > + arch_pattern="native|abi- > > > default|la64v1.[01]|loongarch64|la[46]64" > > > + > > > + # default architecture for lp64[fs] ABI > > > arch_default="abi-default" > > > ;; > > > *) > > > @@ -5194,15 +5202,7 @@ case "${target}" in > > > > > > > > > # Check default with_tune configuration using > > > with_arch. > > > - case ${with_arch} in > > > - loongarch64) > > > - tune_pattern="native|abi- > > > default|loongarch64|la[46]64" > > > - ;; > > > - *) > > > - # By default, $with_tune == $with_arch > > > - tune_pattern="*" > > > - ;; > > > - esac > > > + tune_pattern="native|generic|loongarch64|la[46]64 > > > " > > > > > > case ${with_tune} in > > > "") ;; # OK > > > @@ -5252,7 +5252,7 @@ case "${target}" in > > > # Fixed: use the default > > > gcc configuration for all multilib > > > # builds by default. > > > with_multilib_default="" > > > ;; > > > - > > > arch,native|arch,loongarch64|arch > > > ,la[46]64) # OK, append here. > > > + arch,native|arch,la64v1.[01]|arch > > > ,l > > > oongarch64|arch,la[46]64) # OK, append here. > > > with_multilib_default="/m > > > ar > > > ch=${component}" ;; > > > arch,*) > > > with_multilib_default="/m > > > ar > > > ch=abi-default" > > > @@ -5352,7 +5352,7 @@ case "${target}" in > > > if test x${parse_state} = > > > x"arch"; > > > then > > > # -march option > > > case ${component} in > > > - native | abi-default | > > > loongarch64 | la[46]64) # OK, append here. > > > + native | abi-default | > > > la64v1.[01] | loongarch64 | la[46]64) # OK, append here. > > > # Append -march > > > spec for each multilib variant. > > > loongarch_multili > > > b_ > > > list_make="${loongarch_multilib_list_make}/march=${component}" > > > parse_state="opts > > > " > > > @@ -5925,7 +5925,7 @@ case ${target} in > > > # See macro definitions from loongarch-opts.h and > > > loongarch-cpu.h. > > > > > > # Architecture > > > - tm_defines="${tm_defines} > > > DEFAULT_CPU_ARCH=CPU_$(echo ${with_arch} | tr a-z- A-Z_)" > > > + tm_defines="${tm_defines} > > > DEFAULT_CPU_ARCH=ARCH_$(echo ${with_arch} | tr a-z.- A-Z__)" > > > > > > # Base ABI type > > > tm_defines="${tm_defines} > > > DEFAULT_ABI_BASE=ABI_BASE_$(echo ${abi_base} | tr a-z- A-Z_)" > > > @@ -5937,7 +5937,7 @@ case ${target} in > > > > > > # Microarchitecture > > > if test x${with_tune} != x; then > > > - tm_defines="${tm_defines} > > > DEFAULT_CPU_TUNE=CPU_$(echo ${with_tune} | tr a-z- A-Z_)" > > > + tm_defines="${tm_defines} > > > DEFAULT_CPU_TUNE=TUNE_$(echo ${with_tune} | tr a-z.- A-Z__)" > > > fi > > > > > > # FPU adjustment > > > diff --git a/gcc/config/loongarch/genopts/loongarch-strings > > > b/gcc/config/loongarch/genopts/loongarch-strings > > > index e434a89c9ee..e9ebd254bfa 100644 > > > --- a/gcc/config/loongarch/genopts/loongarch-strings > > > +++ b/gcc/config/loongarch/genopts/loongarch-strings > > > @@ -23,10 +23,13 @@ OPTSTR_ARCH arch > > > OPTSTR_TUNE tune > > > > > > STR_CPU_NATIVE native > > > -STR_CPU_ABI_DEFAULT abi-default > > > +STR_ARCH_ABI_DEFAULT abi-default > > > +STR_TUNE_GENERIC generic > > > STR_CPU_LOONGARCH64 loongarch64 > > > STR_CPU_LA464 la464 > > > STR_CPU_LA664 la664 > > > +STR_ARCH_LA64V1_0 la64v1.0 > > > +STR_ARCH_LA64V1_1 la64v1.1 > > > > > > # Base architecture > > > STR_ISA_BASE_LA64 la64 > > > diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in > > > b/gcc/config/loongarch/genopts/loongarch.opt.in > > > index 50ea47a161f..d00950cb4f4 100644 > > > --- a/gcc/config/loongarch/genopts/loongarch.opt.in > > > +++ b/gcc/config/loongarch/genopts/loongarch.opt.in > > > @@ -95,30 +95,55 @@ Enable LoongArch Advanced SIMD Extension > > > (LASX, > > > 256-bit). > > > > > > ;; Base target models (implies ISA & tune parameters) > > > Enum > > > -Name(cpu_type) Type(int) > > > -LoongArch CPU types: > > > +Name(arch_type) Type(int) > > > +LoongArch ARCH presets: > > > > > > EnumValue > > > -Enum(cpu_type) String(@@STR_CPU_NATIVE@@) Value(CPU_NATIVE) > > > +Enum(arch_type) String(@@STR_CPU_NATIVE@@) Value(ARCH_NATIVE) > > > > > > EnumValue > > > -Enum(cpu_type) String(@@STR_CPU_ABI_DEFAULT@@) > > > Value(CPU_ABI_DEFAULT) > > > +Enum(arch_type) String(@@STR_ARCH_ABI_DEFAULT@@) > > > Value(ARCH_ABI_DEFAULT) > > > > > > EnumValue > > > -Enum(cpu_type) String(@@STR_CPU_LOONGARCH64@@) > > > Value(CPU_LOONGARCH64) > > > +Enum(arch_type) String(@@STR_CPU_LOONGARCH64@@) > > > Value(ARCH_LOONGARCH64) > > > > > > EnumValue > > > -Enum(cpu_type) String(@@STR_CPU_LA464@@) Value(CPU_LA464) > > > +Enum(arch_type) String(@@STR_CPU_LA464@@) Value(ARCH_LA464) > > > > > > EnumValue > > > -Enum(cpu_type) String(@@STR_CPU_LA664@@) Value(CPU_LA664) > > > +Enum(arch_type) String(@@STR_CPU_LA664@@) Value(ARCH_LA664) > > > + > > > +EnumValue > > > +Enum(arch_type) String(@@STR_ARCH_LA64V1_0@@) > > > Value(ARCH_LA64V1_0) > > > + > > > +EnumValue > > > +Enum(arch_type) String(@@STR_ARCH_LA64V1_1@@) > > > Value(ARCH_LA64V1_1) > > > > > > m@@OPTSTR_ARCH@@= > > > -Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_arch) > > > Init(M_OPT_UNSET) Save > > > +Target RejectNegative Joined Enum(arch_type) Var(la_opt_cpu_arch) > > > Init(M_OPT_UNSET) Save > > > -m@@OPTSTR_ARCH@@=PROCESSOR Generate code for the given > > > PROCESSOR ISA. > > > > > > +Enum > > > +Name(tune_type) Type(int) > > > +LoongArch TUNE presets: > > > + > > > +EnumValue > > > +Enum(tune_type) String(@@STR_CPU_NATIVE@@) Value(TUNE_NATIVE) > > > + > > > +EnumValue > > > +Enum(tune_type) String(@@STR_TUNE_GENERIC@@) Value(TUNE_GENERIC) > > > + > > > +EnumValue > > > +Enum(tune_type) String(@@STR_CPU_LOONGARCH64@@) > > > Value(TUNE_LOONGARCH64) > > > + > > > +EnumValue > > > +Enum(tune_type) String(@@STR_CPU_LA464@@) Value(TUNE_LA464) > > > + > > > +EnumValue > > > +Enum(tune_type) String(@@STR_CPU_LA664@@) Value(TUNE_LA664) > > > + > > > m@@OPTSTR_TUNE@@= > > > -Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_tune) > > > Init(M_OPT_UNSET) Save > > > +Target RejectNegative Joined Enum(tune_type) Var(la_opt_cpu_tune) > > > Init(M_OPT_UNSET) Save > > > -m@@OPTSTR_TUNE@@=PROCESSOR Generate optimized code for > > > PROCESSOR. > > > > > > > > > diff --git a/gcc/config/loongarch/loongarch-c.cc > > > b/gcc/config/loongarch/loongarch-c.cc > > > index 4d88c1729ff..c1eab28db4b 100644 > > > --- a/gcc/config/loongarch/loongarch-c.cc > > > +++ b/gcc/config/loongarch/loongarch-c.cc > > > @@ -31,29 +31,6 @@ along with GCC; see the file COPYING3. If not > > > see > > > #define builtin_define(TXT) cpp_define (pfile, TXT) > > > #define builtin_assert(TXT) cpp_assert (pfile, TXT) > > > > > > -/* Define preprocessor macros for the -march and -mtune options. > > > - PREFIX is either _LOONGARCH_ARCH or _LOONGARCH_TUNE, INFO is > > > - the selected processor. If INFO's canonical name is "foo", > > > - define PREFIX to be "foo", and define an additional macro > > > - PREFIX_FOO. */ > > > -#define LARCH_CPP_SET_PROCESSOR(PREFIX, > > > CPU_TYPE) \ > > > - > > > do > > > \ > > > - > > > { > > > \ > > > - char *macro, > > > *p; \ > > > - int cpu_type = > > > (CPU_TYPE); \ > > > - > > > > > > \ > > > - macro = concat ((PREFIX), > > > "_", \ > > > - loongarch_cpu_strings[cpu_type], > > > NULL); \ > > > - for (p = macro; *p != 0; > > > p++) \ > > > - *p = TOUPPER > > > (*p); \ > > > - > > > > > > \ > > > - builtin_define > > > (macro); \ > > > - builtin_define_with_value > > > ((PREFIX), \ > > > - loongarch_cpu_strings[cpu_type], > > > 1); \ > > > - free > > > (macro); \ > > > - > > > } > > > \ > > > - while (0) > > > - > > > void > > > loongarch_cpu_cpp_builtins (cpp_reader *pfile) > > > { > > > @@ -61,11 +38,17 @@ loongarch_cpu_cpp_builtins (cpp_reader *pfile) > > > builtin_assert ("cpu=loongarch"); > > > builtin_define ("__loongarch__"); > > > > > > - LARCH_CPP_SET_PROCESSOR ("_LOONGARCH_ARCH", > > > la_target.cpu_arch); > > > - LARCH_CPP_SET_PROCESSOR ("_LOONGARCH_TUNE", > > > la_target.cpu_tune); > > > + builtin_define_with_value ("__loongarch_arch", > > > + > > > loongarch_arch_strings[la_target.cpu_arch], 1); > > > + > > > + builtin_define_with_value ("__loongarch_tune", > > > + > > > loongarch_tune_strings[la_target.cpu_tune], 1); > > > + > > > + builtin_define_with_value ("_LOONGARCH_ARCH", > > > + > > > loongarch_arch_strings[la_target.cpu_arch], 1); > > > > > > - LARCH_CPP_SET_PROCESSOR ("__loongarch_arch", > > > la_target.cpu_arch); > > > - LARCH_CPP_SET_PROCESSOR ("__loongarch_tune", > > > la_target.cpu_tune); > > > + builtin_define_with_value ("_LOONGARCH_TUNE", > > > + > > > loongarch_tune_strings[la_target.cpu_tune], 1); > > > > > > /* Base architecture / ABI. */ > > > if (TARGET_64BIT) > > > diff --git a/gcc/config/loongarch/loongarch-cpu.cc > > > b/gcc/config/loongarch/loongarch-cpu.cc > > > index 97ac5fed9d8..80e4494ba19 100644 > > > --- a/gcc/config/loongarch/loongarch-cpu.cc > > > +++ b/gcc/config/loongarch/loongarch-cpu.cc > > > @@ -62,7 +62,7 @@ cache_cpucfg (void) > > > uint32_t > > > get_native_prid (void) > > > { > > > - /* Fill loongarch_cpu_default_config[CPU_NATIVE] with cpucfg > > > data, > > > + /* Fill loongarch_cpu_default_config[ARCH_NATIVE] with cpucfg > > > data, > > > see "Loongson Architecture Reference Manual" > > > (Volume 1, Section 2.2.10.5) */ > > > return cpucfg_cache[0]; > > > @@ -76,13 +76,14 @@ get_native_prid_str (void) > > > return (const char*) prid_str; > > > } > > > > > > -/* Fill property tables for CPU_NATIVE. */ > > > +/* Fill property tables for ARCH_NATIVE / TUNE_NATIVE. */ > > > void > > > fill_native_cpu_config (struct loongarch_target *tgt) > > > { > > > - int arch_native_p = tgt->cpu_arch == CPU_NATIVE; > > > - int tune_native_p = tgt->cpu_tune == CPU_NATIVE; > > > - int native_cpu_type = CPU_NATIVE; > > > + int arch_native_p = tgt->cpu_arch == ARCH_NATIVE; > > > + int tune_native_p = tgt->cpu_tune == TUNE_NATIVE; > > > + int native_cpu_arch = ARCH_NATIVE; > > > + int native_cpu_tune = TUNE_NATIVE; > > > > > > /* Nothing needs to be done unless "-march/tune=native" > > > is given or implied. */ > > > @@ -99,11 +100,13 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > switch (cpucfg_cache[0] & 0x00ffff00) > > > { > > > case 0x0014c000: /* LA464 */ > > > - native_cpu_type = CPU_LA464; > > > + native_cpu_arch = ARCH_LA464; > > > + native_cpu_tune = TUNE_LA464; > > > break; > > > > > > case 0x0014d000: /* LA664 */ > > > - native_cpu_type = CPU_LA664; > > > + native_cpu_arch = ARCH_LA664; > > > + native_cpu_tune = TUNE_LA664; > > > break; > > > > > > default: > > > @@ -119,7 +122,7 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > if (arch_native_p) > > > { > > > int tmp; > > > - tgt->cpu_arch = native_cpu_type; > > > + tgt->cpu_arch = native_cpu_arch; > > > > > > auto &preset = loongarch_cpu_default_isa[tgt->cpu_arch]; > > > > > > @@ -127,8 +130,8 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > With: base architecture (ARCH) > > > At: cpucfg_words[1][1:0] */ > > > > > > - if (native_cpu_type != CPU_NATIVE) > > > - tmp = loongarch_cpu_default_isa[native_cpu_type].base; > > > + if (native_cpu_arch != ARCH_NATIVE) > > > + tmp = loongarch_cpu_default_isa[native_cpu_arch].base; > > > else > > > switch (cpucfg_cache[1] & 0x3) > > > { > > > @@ -173,7 +176,7 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > } > > > > > > /* Check consistency with PRID presets. */ > > > - if (native_cpu_type != CPU_NATIVE && tmp != preset.fpu) > > > + if (native_cpu_arch != ARCH_NATIVE && tmp != preset.fpu) > > > warning (0, "floating-point unit %qs differs from PRID > > > preset %qs", > > > loongarch_isa_ext_strings[tmp], > > > loongarch_isa_ext_strings[preset.fpu]); > > > @@ -182,7 +185,7 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > preset.fpu = tmp; > > > > > > > > > - /* Fill: loongarch_cpu_default_isa[CPU_NATIVE].simd > > > + /* Fill: loongarch_cpu_default_isa[ARCH_NATIVE].simd > > > With: SIMD extension type (LSX, LASX) > > > At: cpucfg_words[2][7:6] */ > > > > > > @@ -212,7 +215,7 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > /* Check consistency with PRID presets. */ > > > > > > /* > > > - if (native_cpu_type != CPU_NATIVE && tmp != preset.simd) > > > + if (native_cpu_arch != ARCH_NATIVE && tmp != preset.simd) > > > warning (0, "SIMD extension %qs differs from PRID preset > > > %qs", > > > loongarch_isa_ext_strings[tmp], > > > loongarch_isa_ext_strings[preset.simd]); > > > @@ -229,10 +232,10 @@ fill_native_cpu_config (struct > > > loongarch_target *tgt) > > > if (cpucfg_cache[entry.cpucfg_word] & entry.cpucfg_bit) > > > hw_isa_evolution |= entry.isa_evolution_bit; > > > > > > - if (native_cpu_type != CPU_NATIVE) > > > + if (native_cpu_arch != ARCH_NATIVE) > > > { > > > /* Check if the local CPU really supports the features > > > of > > > the base > > > - ISA of probed native_cpu_type. If any feature is > > > not > > > detected, > > > + ISA of probed native_cpu_arch. If any feature is > > > not > > > detected, > > > either GCC or the hardware is buggy. */ > > > if ((preset.evolution & hw_isa_evolution) != > > > hw_isa_evolution) > > > warning (0, > > > @@ -247,7 +250,7 @@ fill_native_cpu_config (struct > > > loongarch_target > > > *tgt) > > > > > > if (tune_native_p) > > > { > > > - tgt->cpu_tune = native_cpu_type; > > > + tgt->cpu_tune = native_cpu_tune; > > > > > > /* Fill: loongarch_cpu_cache[tgt->cpu_tune] > > > With: cache size info > > > diff --git a/gcc/config/loongarch/loongarch-def.cc > > > b/gcc/config/loongarch/loongarch-def.cc > > > index 63a8f108f4e..d19628f3454 100644 > > > --- a/gcc/config/loongarch/loongarch-def.cc > > > +++ b/gcc/config/loongarch/loongarch-def.cc > > > @@ -31,39 +31,64 @@ template <class T, int N> > > > using array = loongarch_def_array<T, N>; > > > > > > template <class T> > > > -using array_tune = array<T, N_TUNE_TYPES>; > > > +using array_arch = array<T, N_ARCH_TYPES>; > > > > > > template <class T> > > > -using array_arch = array<T, N_ARCH_TYPES>; > > > +using array_tune = array<T, N_TUNE_TYPES>; > > > > > > -/* CPU property tables. */ > > > -array_tune<const char *> loongarch_cpu_strings = array_tune<const > > > char *> () > > > - .set (CPU_NATIVE, STR_CPU_NATIVE) > > > - .set (CPU_ABI_DEFAULT, STR_CPU_ABI_DEFAULT) > > > - .set (CPU_LOONGARCH64, STR_CPU_LOONGARCH64) > > > - .set (CPU_LA464, STR_CPU_LA464) > > > - .set (CPU_LA664, STR_CPU_LA664); > > > +array_arch<const char *> loongarch_arch_strings = > > > array_arch<const > > > char *> () > > > + .set (ARCH_NATIVE, STR_CPU_NATIVE) > > > + .set (ARCH_ABI_DEFAULT, STR_ARCH_ABI_DEFAULT) > > > + .set (ARCH_LOONGARCH64, STR_CPU_LOONGARCH64) > > > + .set (ARCH_LA464, STR_CPU_LA464) > > > + .set (ARCH_LA664, STR_CPU_LA664) > > > + .set (ARCH_LA64V1_0, STR_ARCH_LA64V1_0) > > > + .set (ARCH_LA64V1_1, STR_ARCH_LA64V1_1); > > > + > > > +array_tune<const char *> loongarch_tune_strings = > > > array_tune<const > > > char *> () > > > + .set (TUNE_NATIVE, STR_CPU_NATIVE) > > > + .set (TUNE_GENERIC, STR_TUNE_GENERIC) > > > + .set (TUNE_LOONGARCH64, STR_CPU_LOONGARCH64) > > > + .set (TUNE_LA464, STR_CPU_LA464) > > > + .set (TUNE_LA664, STR_CPU_LA664); > > > > > > array_arch<loongarch_isa> loongarch_cpu_default_isa = > > > array_arch<loongarch_isa> () > > > - .set (CPU_LOONGARCH64, > > > + .set (ARCH_LOONGARCH64, > > > loongarch_isa () > > > .base_ (ISA_BASE_LA64) > > > .fpu_ (ISA_EXT_FPU64)) > > > - .set (CPU_LA464, > > > + > > > + .set (ARCH_LA464, > > > loongarch_isa () > > > .base_ (ISA_BASE_LA64) > > > .fpu_ (ISA_EXT_FPU64) > > > .simd_ (ISA_EXT_SIMD_LASX)) > > > - .set (CPU_LA664, > > > + > > > + .set (ARCH_LA664, > > > loongarch_isa () > > > .base_ (ISA_BASE_LA64) > > > .fpu_ (ISA_EXT_FPU64) > > > .simd_ (ISA_EXT_SIMD_LASX) > > > + .evolution_ (OPTION_MASK_ISA_DIV32 | > > > OPTION_MASK_ISA_LD_SEQ_SA > > > + | OPTION_MASK_ISA_LAM_BH | > > > OPTION_MASK_ISA_LAMCAS > > > + | OPTION_MASK_ISA_FRECIPE)) > > > + .set (ARCH_LA64V1_0, > > > + loongarch_isa () > > > + .base_ (ISA_BASE_LA64) > > > + .fpu_ (ISA_EXT_FPU64) > > > + .simd_ (ISA_EXT_SIMD_LSX)) > > > + > > > + .set (ARCH_LA64V1_1, > > > + loongarch_isa () > > > + .base_ (ISA_BASE_LA64) > > > + .fpu_ (ISA_EXT_FPU64) > > > + .simd_ (ISA_EXT_SIMD_LSX) > > > .evolution_ (OPTION_MASK_ISA_DIV32 | > > > OPTION_MASK_ISA_LD_SEQ_SA > > > | OPTION_MASK_ISA_LAM_BH | > > > OPTION_MASK_ISA_LAMCAS > > > | OPTION_MASK_ISA_FRECIPE)); > > > > > > + > > > static inline loongarch_cache la464_cache () > > > { > > > return loongarch_cache () > > > @@ -75,9 +100,10 @@ static inline loongarch_cache la464_cache () > > > > > > array_tune<loongarch_cache> loongarch_cpu_cache = > > > array_tune<loongarch_cache> () > > > - .set (CPU_LOONGARCH64, la464_cache ()) > > > - .set (CPU_LA464, la464_cache ()) > > > - .set (CPU_LA664, la464_cache ()); > > > + .set (TUNE_GENERIC, la464_cache ()) > > > + .set (TUNE_LOONGARCH64, la464_cache ()) > > > + .set (TUNE_LA464, la464_cache ()) > > > + .set (TUNE_LA664, la464_cache ()); > > > > > > static inline loongarch_align la464_align () > > > { > > > @@ -91,9 +117,10 @@ static inline loongarch_align la664_align () > > > > > > array_tune<loongarch_align> loongarch_cpu_align = > > > array_tune<loongarch_align> () > > > - .set (CPU_LOONGARCH64, la664_align ()) > > > - .set (CPU_LA464, la464_align ()) > > > - .set (CPU_LA664, la664_align ()); > > > + .set (TUNE_GENERIC, la664_align ()) > > > + .set (TUNE_LOONGARCH64, la664_align ()) > > > + .set (TUNE_LA464, la464_align ()) > > > + .set (TUNE_LA664, la664_align ()); > > > > > > /* Default RTX cost initializer. */ > > > loongarch_rtx_cost_data::loongarch_rtx_cost_data () > > > @@ -117,7 +144,7 @@ > > > loongarch_rtx_cost_data::loongarch_rtx_cost_data > > > () > > > any known "-mtune" type). */ > > > array_tune<loongarch_rtx_cost_data> loongarch_cpu_rtx_cost_data > > > = > > > array_tune<loongarch_rtx_cost_data> () > > > - .set (CPU_LA664, > > > + .set (TUNE_LA664, > > > loongarch_rtx_cost_data () > > > .movcf2gr_ (COSTS_N_INSNS (1)) > > > .movgr2cf_ (COSTS_N_INSNS (1))); > > > @@ -140,16 +167,18 @@ const loongarch_rtx_cost_data > > > loongarch_rtx_cost_optimize_size = > > > .movcf2gr_ (COST_COMPLEX_INSN); > > > > > > array_tune<int> loongarch_cpu_issue_rate = array_tune<int> () > > > - .set (CPU_NATIVE, 4) > > > - .set (CPU_LOONGARCH64, 4) > > > - .set (CPU_LA464, 4) > > > - .set (CPU_LA664, 6); > > > + .set (TUNE_NATIVE, 4) > > > + .set (TUNE_GENERIC, 4) > > > + .set (TUNE_LOONGARCH64, 4) > > > + .set (TUNE_LA464, 4) > > > + .set (TUNE_LA664, 6); > > > > > > array_tune<int> loongarch_cpu_multipass_dfa_lookahead = > > > array_tune<int> () > > > - .set (CPU_NATIVE, 4) > > > - .set (CPU_LOONGARCH64, 4) > > > - .set (CPU_LA464, 4) > > > - .set (CPU_LA664, 6); > > > + .set (TUNE_NATIVE, 4) > > > + .set (TUNE_GENERIC, 4) > > > + .set (TUNE_LOONGARCH64, 4) > > > + .set (TUNE_LA464, 4) > > > + .set (TUNE_LA664, 6); > > > > > > /* Wiring string definitions from loongarch-str.h to global > > > arrays > > > with standard index values from loongarch-opts.h, so we can > > > diff --git a/gcc/config/loongarch/loongarch-def.h > > > b/gcc/config/loongarch/loongarch-def.h > > > index 60ce3e230f1..ef7d183df50 100644 > > > --- a/gcc/config/loongarch/loongarch-def.h > > > +++ b/gcc/config/loongarch/loongarch-def.h > > > @@ -177,21 +177,32 @@ struct loongarch_target > > > { > > > struct loongarch_isa isa; > > > struct loongarch_abi abi; > > > - int cpu_arch; /* CPU_ */ > > > - int cpu_tune; /* same */ > > > + int cpu_arch; /* ARCH_ */ > > > + int cpu_tune; /* TUNE_ */ > > > int cmodel; /* CMODEL_ */ > > > int tls_dialect; /* TLS_ */ > > > }; > > > > > > -/* CPU model */ > > > +/* ISA target presets (-march=*) */ > > > enum { > > > - CPU_NATIVE = 0, > > > - CPU_ABI_DEFAULT = 1, > > > - CPU_LOONGARCH64 = 2, > > > - CPU_LA464 = 3, > > > - CPU_LA664 = 4, > > > - N_ARCH_TYPES = 5, > > > - N_TUNE_TYPES = 5 > > > + ARCH_NATIVE = 0, > > > + ARCH_ABI_DEFAULT = 1, > > > + ARCH_LOONGARCH64 = 2, > > > + ARCH_LA464 = 3, > > > + ARCH_LA664 = 4, > > > + ARCH_LA64V1_0 = 5, > > > + ARCH_LA64V1_1 = 6, > > > + N_ARCH_TYPES = 7, > > > +}; > > > + > > > +/* Tune target presets (-mtune=*) */ > > > +enum { > > > + TUNE_NATIVE = 0, > > > + TUNE_GENERIC = 1, > > > + TUNE_LOONGARCH64 = 2, > > > + TUNE_LA464 = 3, > > > + TUNE_LA664 = 4, > > > + N_TUNE_TYPES = 5, > > > }; > > > > > > /* TLS types. */ > > > @@ -200,9 +211,11 @@ enum { > > > TLS_DESCRIPTORS = 1 > > > }; > > > > > > -/* CPU model properties */ > > > +/* Target preset properties */ > > > extern loongarch_def_array<const char *, N_ARCH_TYPES> > > > - loongarch_cpu_strings; > > > + loongarch_arch_strings; > > > +extern loongarch_def_array<const char *, N_TUNE_TYPES> > > > + loongarch_tune_strings; > > > extern loongarch_def_array<loongarch_isa, N_ARCH_TYPES> > > > loongarch_cpu_default_isa; > > > extern loongarch_def_array<int, N_TUNE_TYPES> > > > diff --git a/gcc/config/loongarch/loongarch-driver.cc > > > b/gcc/config/loongarch/loongarch-driver.cc > > > index 8c4ed34698b..628dcdc3b77 100644 > > > --- a/gcc/config/loongarch/loongarch-driver.cc > > > +++ b/gcc/config/loongarch/loongarch-driver.cc > > > @@ -85,10 +85,10 @@ driver_set_m_parm (int argc, const char > > > **argv) > > > loongarch_isa_ext_strings, 0, > > > N_ISA_EXT_TYPES) > > > > > > LARCH_DRIVER_PARSE_PARM (la_target.cpu_arch, ARCH, \ > > > - loongarch_cpu_strings, 0, > > > N_ARCH_TYPES) > > > + loongarch_arch_strings, 0, > > > N_ARCH_TYPES) > > > > > > LARCH_DRIVER_PARSE_PARM (la_target.cpu_tune, TUNE, \ > > > - loongarch_cpu_strings, 0, > > > N_TUNE_TYPES) > > > + loongarch_tune_strings, 0, > > > N_TUNE_TYPES) > > > > > > LARCH_DRIVER_PARSE_PARM (la_target.cmodel, CMODEL, \ > > > loongarch_cmodel_strings, 0, > > > N_CMODEL_TYPES) > > > @@ -190,7 +190,7 @@ driver_get_normalized_m_opts (int argc, const > > > char **argv ATTRIBUTE_UNUSED) > > > APPEND_VAL (loongarch_abi_base_strings[la_target.abi.base]); > > > > > > APPEND_OPT (ARCH); > > > - APPEND_VAL (loongarch_cpu_strings[la_target.cpu_arch]); > > > + APPEND_VAL (loongarch_arch_strings[la_target.cpu_arch]); > > > > > > APPEND_OPT (ISA_EXT_FPU); > > > APPEND_VAL (loongarch_isa_ext_strings[la_target.isa.fpu]); > > > @@ -202,7 +202,7 @@ driver_get_normalized_m_opts (int argc, const > > > char **argv ATTRIBUTE_UNUSED) > > > APPEND_VAL (loongarch_cmodel_strings[la_target.cmodel]); > > > > > > APPEND_OPT (TUNE); > > > - APPEND_VAL (loongarch_cpu_strings[la_target.cpu_tune]); > > > + APPEND_VAL (loongarch_tune_strings[la_target.cpu_tune]); > > > > > > obstack_1grow (&opts_obstack, '\0'); > > > > > > diff --git a/gcc/config/loongarch/loongarch-opts.cc > > > b/gcc/config/loongarch/loongarch-opts.cc > > > index 7b21cc311a8..8408a70e5ca 100644 > > > --- a/gcc/config/loongarch/loongarch-opts.cc > > > +++ b/gcc/config/loongarch/loongarch-opts.cc > > > @@ -101,6 +101,7 @@ static int abi_compat_p (const struct > > > loongarch_isa *isa, > > > struct loongarch_abi abi); > > > static int abi_default_cpu_arch (struct loongarch_abi abi, > > > struct loongarch_isa *isa); > > > +static int default_tune_for_arch (int arch, int fallback); > > > > > > /* Mandatory configure-time defaults. */ > > > #ifndef DEFAULT_ABI_BASE > > > @@ -259,35 +260,35 @@ loongarch_config_target (struct > > > loongarch_target *target, > > > /* If cpu_tune is not set using neither -mtune nor --with- > > > tune, > > > the current cpu_arch is used as its default. */ > > > t.cpu_tune = constrained.tune ? target->cpu_tune > > > - : (constrained.arch ? target->cpu_arch : > > > - (with_default_tune ? DEFAULT_CPU_TUNE : > > > DEFAULT_CPU_ARCH)); > > > + : (constrained.arch > > > + ? default_tune_for_arch (target->cpu_arch, > > > with_default_tune > > > + ? DEFAULT_CPU_TUNE : > > > TUNE_GENERIC) > > > + : (with_default_tune ? DEFAULT_CPU_TUNE > > > + : default_tune_for_arch (DEFAULT_CPU_ARCH, > > > TUNE_GENERIC))); > > > > > > > > > /* Handle -march/tune=native */ > > > #ifdef __loongarch__ > > > /* For native compilers, gather local CPU information > > > - and fill the "CPU_NATIVE" index of arrays defined in > > > - loongarch-cpu.c. */ > > > + and fill the "ARCH_NATIVE/TUNE_NATIVE" index of arrays > > > + defined in loongarch-cpu.c. */ > > > > > > fill_native_cpu_config (&t); > > > > > > #else > > > - if (t.cpu_arch == CPU_NATIVE) > > > + if (t.cpu_arch == ARCH_NATIVE) > > > fatal_error (UNKNOWN_LOCATION, > > > "%qs does not work on a cross compiler", > > > "-m" OPTSTR_ARCH "=" STR_CPU_NATIVE); > > > > > > - else if (t.cpu_tune == CPU_NATIVE) > > > + else if (t.cpu_tune == TUNE_NATIVE) > > > fatal_error (UNKNOWN_LOCATION, > > > "%qs does not work on a cross compiler", > > > "-m" OPTSTR_TUNE "=" STR_CPU_NATIVE); > > > #endif > > > > > > - /* Handle -march/tune=abi-default */ > > > - if (t.cpu_tune == CPU_ABI_DEFAULT) > > > - t.cpu_tune = abi_default_cpu_arch (t.abi, NULL); > > > - > > > - if (t.cpu_arch == CPU_ABI_DEFAULT) > > > + /* Handle -march=abi-default */ > > > + if (t.cpu_arch == ARCH_ABI_DEFAULT) > > > { > > > t.cpu_arch = abi_default_cpu_arch (t.abi, &(t.isa)); > > > loongarch_cpu_default_isa[t.cpu_arch] = t.isa; > > > @@ -438,16 +439,16 @@ config_target_isa: > > > so we adjust that first if it is not constrained. */ > > > int fallback_arch = abi_default_cpu_arch (t.abi, NULL); > > > > > > - if (t.cpu_arch == CPU_NATIVE) > > > + if (t.cpu_arch == ARCH_NATIVE) > > > warning (0, "your native CPU architecture (%qs) " > > > "does not support %qs ABI, falling back to %<- > > > m%s=%s%>", > > > arch_str (&t), abi_str (t.abi), OPTSTR_ARCH, > > > - loongarch_cpu_strings[fallback_arch]); > > > + loongarch_arch_strings[fallback_arch]); > > > else > > > warning (0, "default CPU architecture (%qs) " > > > "does not support %qs ABI, falling back to %<- > > > m%s=%s%>", > > > arch_str (&t), abi_str (t.abi), OPTSTR_ARCH, > > > - loongarch_cpu_strings[fallback_arch]); > > > + loongarch_arch_strings[fallback_arch]); > > > > > > t.cpu_arch = fallback_arch; > > > constrained.arch = 1; > > > @@ -664,11 +665,40 @@ abi_default_cpu_arch (struct loongarch_abi > > > abi, > > > case ABI_BASE_LP64F: > > > case ABI_BASE_LP64S: > > > *isa = isa_required (abi); > > > - return CPU_LOONGARCH64; > > > + return ARCH_LOONGARCH64; > > > } > > > gcc_unreachable (); > > > } > > > > > > +static inline int > > > +default_tune_for_arch (int arch, int fallback) > > > +{ > > > + int ret; > > > + switch (arch) > > > + { > > > + > > > +#define TUNE_FOR_ARCH(NAME) \ > > > + case ARCH_##NAME: \ > > > + ret = TUNE_##NAME; \ > > > + break; > > > + > > > + TUNE_FOR_ARCH(NATIVE) > > > + TUNE_FOR_ARCH(LOONGARCH64) > > > + TUNE_FOR_ARCH(LA464) > > > + TUNE_FOR_ARCH(LA664) > > > + > > > +#undef TUNE_FOR_ARCH > > > + > > > + case ARCH_ABI_DEFAULT: > > > + case ARCH_LA64V1_0: > > > + case ARCH_LA64V1_1: > > > + ret = fallback; > > > + } > > > + > > > + gcc_assert (0 <= ret && ret < N_TUNE_TYPES); > > > + return ret; > > > +} > > > + > > > static const char* > > > abi_str (struct loongarch_abi abi) > > > { > > > @@ -731,7 +761,7 @@ isa_str (const struct loongarch_isa *isa, char > > > separator) > > > static const char* > > > arch_str (const struct loongarch_target *target) > > > { > > > - if (target->cpu_arch == CPU_NATIVE) > > > + if (target->cpu_arch == ARCH_NATIVE) > > > { > > > /* Describe a native CPU with unknown PRID. */ > > > const char* isa_string = isa_str (&target->isa, ','); > > > @@ -741,7 +771,7 @@ arch_str (const struct loongarch_target > > > *target) > > > APPEND_STRING (isa_string) > > > } > > > else > > > - APPEND_STRING (loongarch_cpu_strings[target->cpu_arch]); > > > + APPEND_STRING (loongarch_arch_strings[target->cpu_arch]); > > > > > > APPEND1 ('\0') > > > return XOBFINISH (&msg_obstack, const char *); > > > @@ -956,7 +986,7 @@ loongarch_target_option_override (struct > > > loongarch_target *target, > > > /* Other arch-specific overrides. */ > > > switch (target->cpu_arch) > > > { > > > - case CPU_LA664: > > > + case ARCH_LA664: > > > /* Enable -mrecipe=all for LA664 by default. */ > > > if (!opts_set->x_recip_mask) > > > { > > > diff --git a/gcc/config/loongarch/loongarch-opts.h > > > b/gcc/config/loongarch/loongarch-opts.h > > > index 9844b27ed27..f80482357ac 100644 > > > --- a/gcc/config/loongarch/loongarch-opts.h > > > +++ b/gcc/config/loongarch/loongarch-opts.h > > > @@ -127,8 +127,8 @@ struct loongarch_flags { > > > (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 == > > > CPU_LA464) > > > -#define TARGET_uARCH_LA664 (la_target.cpu_tune == > > > CPU_LA664) > > > +#define TARGET_uARCH_LA464 (la_target.cpu_tune == > > > TUNE_LA464) > > > +#define TARGET_uARCH_LA664 (la_target.cpu_tune == > > > TUNE_LA664) > > > > > > /* Note: optimize_size may vary across functions, > > > while -m[no]-memcpy imposes a global constraint. */ > > > diff --git a/gcc/config/loongarch/loongarch-str.h > > > b/gcc/config/loongarch/loongarch-str.h > > > index 20da2b169ed..47f761babb2 100644 > > > --- a/gcc/config/loongarch/loongarch-str.h > > > +++ b/gcc/config/loongarch/loongarch-str.h > > > @@ -27,10 +27,13 @@ along with GCC; see the file COPYING3. If not > > > see > > > #define OPTSTR_TUNE "tune" > > > > > > #define STR_CPU_NATIVE "native" > > > -#define STR_CPU_ABI_DEFAULT "abi-default" > > > +#define STR_ARCH_ABI_DEFAULT "abi-default" > > > +#define STR_TUNE_GENERIC "generic" > > > #define STR_CPU_LOONGARCH64 "loongarch64" > > > #define STR_CPU_LA464 "la464" > > > #define STR_CPU_LA664 "la664" > > > +#define STR_ARCH_LA64V1_0 "la64v1.0" > > > +#define STR_ARCH_LA64V1_1 "la64v1.1" > > > > > > #define STR_ISA_BASE_LA64 "la64" > > > > > > diff --git a/gcc/config/loongarch/loongarch.cc > > > b/gcc/config/loongarch/loongarch.cc > > > index 6b92e7034c5..e7835ae34ae 100644 > > > --- a/gcc/config/loongarch/loongarch.cc > > > +++ b/gcc/config/loongarch/loongarch.cc > > > @@ -9609,9 +9609,10 @@ loongarch_cpu_sched_reassociation_width > > > (struct loongarch_target *target, > > > > > > switch (target->cpu_tune) > > > { > > > - case CPU_LOONGARCH64: > > > - case CPU_LA464: > > > - case CPU_LA664: > > > + case TUNE_GENERIC: > > > + case TUNE_LOONGARCH64: > > > + case TUNE_LA464: > > > + case TUNE_LA664: > > > /* Vector part. */ > > > if (LSX_SUPPORTED_MODE_P (mode) || LASX_SUPPORTED_MODE_P > > > (mode)) > > > { > > > @@ -10980,9 +10981,9 @@ loongarch_asm_code_end (void) > > > if (flag_verbose_asm) > > > { > > > fprintf (asm_out_file, "\n%s CPU: %s\n", > > > ASM_COMMENT_START, > > > - loongarch_cpu_strings [la_target.cpu_arch]); > > > + loongarch_arch_strings[la_target.cpu_arch]); > > > fprintf (asm_out_file, "%s Tune: %s\n", ASM_COMMENT_START, > > > - loongarch_cpu_strings [la_target.cpu_tune]); > > > + loongarch_tune_strings[la_target.cpu_tune]); > > > fprintf (asm_out_file, "%s Base ISA: %s\n", > > > ASM_COMMENT_START, > > > loongarch_isa_base_strings [la_target.isa.base]); > > > DUMP_FEATURE (ISA_HAS_FRECIPE); > > > diff --git a/gcc/config/loongarch/loongarch.opt > > > b/gcc/config/loongarch/loongarch.opt > > > index 773747f2add..91cb5236ad8 100644 > > > --- a/gcc/config/loongarch/loongarch.opt > > > +++ b/gcc/config/loongarch/loongarch.opt > > > @@ -103,30 +103,55 @@ Enable LoongArch Advanced SIMD Extension > > > (LASX, 256-bit). > > > > > > ;; Base target models (implies ISA & tune parameters) > > > Enum > > > -Name(cpu_type) Type(int) > > > -LoongArch CPU types: > > > +Name(arch_type) Type(int) > > > +LoongArch ARCH presets: > > > > > > EnumValue > > > -Enum(cpu_type) String(native) Value(CPU_NATIVE) > > > +Enum(arch_type) String(native) Value(ARCH_NATIVE) > > > > > > EnumValue > > > -Enum(cpu_type) String(abi-default) Value(CPU_ABI_DEFAULT) > > > +Enum(arch_type) String(abi-default) Value(ARCH_ABI_DEFAULT) > > > > > > EnumValue > > > -Enum(cpu_type) String(loongarch64) Value(CPU_LOONGARCH64) > > > +Enum(arch_type) String(loongarch64) Value(ARCH_LOONGARCH64) > > > > > > EnumValue > > > -Enum(cpu_type) String(la464) Value(CPU_LA464) > > > +Enum(arch_type) String(la464) Value(ARCH_LA464) > > > > > > EnumValue > > > -Enum(cpu_type) String(la664) Value(CPU_LA664) > > > +Enum(arch_type) String(la664) Value(ARCH_LA664) > > > + > > > +EnumValue > > > +Enum(arch_type) String(la64v1.0) Value(ARCH_LA64V1_0) > > > + > > > +EnumValue > > > +Enum(arch_type) String(la64v1.1) Value(ARCH_LA64V1_1) > > > > > > march= > > > -Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_arch) > > > Init(M_OPT_UNSET) Save > > > +Target RejectNegative Joined Enum(arch_type) Var(la_opt_cpu_arch) > > > Init(M_OPT_UNSET) Save > > > -march=PROCESSOR Generate code for the given PROCESSOR > > > ISA. > > > > > > +Enum > > > +Name(tune_type) Type(int) > > > +LoongArch TUNE presets: > > > + > > > +EnumValue > > > +Enum(tune_type) String(native) Value(TUNE_NATIVE) > > > + > > > +EnumValue > > > +Enum(tune_type) String(generic) Value(TUNE_GENERIC) > > > + > > > +EnumValue > > > +Enum(tune_type) String(loongarch64) Value(TUNE_LOONGARCH64) > > > + > > > +EnumValue > > > +Enum(tune_type) String(la464) Value(TUNE_LA464) > > > + > > > +EnumValue > > > +Enum(tune_type) String(la664) Value(TUNE_LA664) > > > + > > > mtune= > > > -Target RejectNegative Joined Enum(cpu_type) Var(la_opt_cpu_tune) > > > Init(M_OPT_UNSET) Save > > > +Target RejectNegative Joined Enum(tune_type) Var(la_opt_cpu_tune) > > > Init(M_OPT_UNSET) Save > > > -mtune=PROCESSOR Generate optimized code for PROCESSOR. > > > > > > > > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > > > index 5d5e70c3033..6cfb77a0f8a 100644 > > > --- a/gcc/doc/invoke.texi > > > +++ b/gcc/doc/invoke.texi > > > @@ -1049,7 +1049,7 @@ Objective-C and Objective-C++ Dialects}. > > > -msign-extend-enabled -muser-enabled} > > > > > > @emph{LoongArch Options} > > > -@gccoptlist{-march=@var{cpu-type} -mtune=@var{cpu-type} > > > -mabi=@var{base-abi-type} > > > +@gccoptlist{-march=@var{arch-type} -mtune=@var{tune-type} > > > -mabi=@var{base-abi-type} > > > -mfpu=@var{fpu-type} -msimd=@var{simd-type} > > > -msoft-float -msingle-float -mdouble-float -mlsx -mno-lsx -mlasx > > > - > > > mno-lasx > > > -mbranch-cost=@var{n} -mcheck-zero-division -mno-check-zero- > > > division > > > @@ -26839,34 +26839,51 @@ These command-line options are defined > > > for > > > LoongArch targets: > > > > > > @table @gcctabopt > > > @opindex march > > > -@item -march=@var{cpu-type} > > > -Generate instructions for the machine type @var{cpu-type}. In > > > contrast to > > > -@option{-mtune=@var{cpu-type}}, which merely tunes the generated > > > code > > > -for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} > > > allows GCC > > > -to generate code that may not run at all on processors other than > > > the one > > > -indicated. Specifying @option{-march=@var{cpu-type}} implies > > > -@option{-mtune=@var{cpu-type}}, except where noted otherwise. > > > +@item -march=@var{arch-type} > > > +Generate instructions for the machine type @var{arch-type}. > > > +@option{-march=@var{arch-type}} allows GCC to generate code that > > > +may not run at all on processors other than the one indicated. > > > > > > -The choices for @var{cpu-type} are: > > > +The choices for @var{arch-type} are: > > > > > > @table @samp > > > @item native > > > -This selects the CPU to generate code for at compilation time by > > > determining > > > -the processor type of the compiling machine. Using @option{- > > > march=native} > > > -enables all instruction subsets supported by the local machine > > > (hence > > > -the result might not run on different machines). Using @option{- > > > mtune=native} > > > -produces code optimized for the local machine under the > > > constraints > > > -of the selected instruction set. > > > +Local processor type detected by the native compiler. > > > @item loongarch64 > > > -A generic CPU with 64-bit extensions. > > > +Generic LoongArch 64-bit processor. > > > @item la464 > > > -LoongArch LA464 CPU with LBT, LSX, LASX, LVZ. > > > +LoongArch LA464-based processor with LSX, LASX. > > > +@item la664 > > > +LoongArch LA664-based processor with LSX, LASX > > > +and all LoongArch v1.1 instructions. > > > +@item la64v1.0 > > > +LoongArch64 ISA version 1.0. > > > +@item la64v1.1 > > > +LoongArch64 ISA version 1.1. > > > @end table > > > > > > +More information about LoongArch ISA versions can be found at > > > +@uref{https://github.com/loongson/la-toolchain-conventions}. > > > + > > > @opindex mtune > > > -@item -mtune=@var{cpu-type} > > > -Optimize the output for the given processor, specified by > > > microarchitecture > > > -name. > > > +@item -mtune=@var{tune-type} > > > +Optimize the generated code for the given processor target. > > > + > > > +The choices for @var{tune-type} are: > > > + > > > +@table @samp > > > +@item native > > > +Local processor type detected by the native compiler. > > > +@item generic > > > +Generic LoongArch processor. > > > +@item loongarch64 > > > +Generic LoongArch 64-bit processor. > > > +@item la464 > > > +LoongArch LA464 core. > > > +@item la664 > > > +LoongArch LA664 core. > > > +@end table > > > + > > > > > > @opindex mabi > > > @item -mabi=@var{base-abi-type} > > > -- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University