diff options
author | Steve Ellcey <sellcey@mips.com> | 2013-03-25 23:12:01 +0000 |
---|---|---|
committer | Steve Ellcey <sje@gcc.gnu.org> | 2013-03-25 23:12:01 +0000 |
commit | 855e0d0b07d88325a59da5814be9c3e157d45226 (patch) | |
tree | 8840e5195460da8bebf3f6b8d770f613ca1e5b0a /gcc | |
parent | f02296ddb9d4a183b90600659341baf91436f7d9 (diff) | |
download | gcc-855e0d0b07d88325a59da5814be9c3e157d45226.zip gcc-855e0d0b07d88325a59da5814be9c3e157d45226.tar.gz gcc-855e0d0b07d88325a59da5814be9c3e157d45226.tar.bz2 |
mmips-cpus.def (74kc, [...]): Add PTF_AVOID_IMADD.
2013-03-25 Steve Ellcey <sellcey@mips.com>
* config/mips/mmips-cpus.def (74kc, 74kf2_1, 74kf, 74kf, 74kf1_1,
74kfx, 74kx, 74kf3_2): Add PTF_AVOID_IMADD.
* config/mips/mips.c (mips_option_override): Set IMADD default.
* config/mips/mips.h (PTF_AVOID_IMADD): New.
(ISA_HAS_MADD_MSUB): Remove MIPS16 check.
(GENERATE_MADD_MSUB): Remove TUNE_74K check, add MIPS16 check.
* config/mips/mips.md (mimadd): New flag for integer madd/msub.
* doc/invoke.texi (-mimadd/-mno-imadd): New.
From-SVN: r197072
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/mips/mips-cpus.def | 14 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 15 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 22 | ||||
-rw-r--r-- | gcc/config/mips/mips.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 11 |
6 files changed, 61 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9db0629..fbaaaaa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-03-25 Steve Ellcey <sellcey@mips.com> + + * config/mips/mmips-cpus.def (74kc, 74kf2_1, 74kf, 74kf, 74kf1_1, + 74kfx, 74kx, 74kf3_2): Add PTF_AVOID_IMADD. + * config/mips/mips.c (mips_option_override): Set IMADD default. + * config/mips/mips.h (PTF_AVOID_IMADD): New. + (ISA_HAS_MADD_MSUB): Remove MIPS16 check. + (GENERATE_MADD_MSUB): Remove TUNE_74K check, add MIPS16 check. + * config/mips/mips.md (mimadd): New flag for integer madd/msub. + * doc/invoke.texi (-mimadd/-mno-imadd): New. + 2013-03-25 Jeff Law <law@redhat.com> * tree-ssa-dom.c (record_equivalences_from_incoming_edge): Rework diff --git a/gcc/config/mips/mips-cpus.def b/gcc/config/mips/mips-cpus.def index 1cc1999..9e5fd16 100644 --- a/gcc/config/mips/mips-cpus.def +++ b/gcc/config/mips/mips-cpus.def @@ -121,13 +121,13 @@ MIPS_CPU ("34kfx", PROCESSOR_24KF1_1, 33, 0) MIPS_CPU ("34kx", PROCESSOR_24KF1_1, 33, 0) MIPS_CPU ("34kn", PROCESSOR_24KC, 33, 0) /* 34K with MT but no DSP. */ -MIPS_CPU ("74kc", PROCESSOR_74KC, 33, 0) /* 74K with DSPr2. */ -MIPS_CPU ("74kf2_1", PROCESSOR_74KF2_1, 33, 0) -MIPS_CPU ("74kf", PROCESSOR_74KF2_1, 33, 0) -MIPS_CPU ("74kf1_1", PROCESSOR_74KF1_1, 33, 0) -MIPS_CPU ("74kfx", PROCESSOR_74KF1_1, 33, 0) -MIPS_CPU ("74kx", PROCESSOR_74KF1_1, 33, 0) -MIPS_CPU ("74kf3_2", PROCESSOR_74KF3_2, 33, 0) +MIPS_CPU ("74kc", PROCESSOR_74KC, 33, PTF_AVOID_IMADD) /* 74K with DSPr2. */ +MIPS_CPU ("74kf2_1", PROCESSOR_74KF2_1, 33, PTF_AVOID_IMADD) +MIPS_CPU ("74kf", PROCESSOR_74KF2_1, 33, PTF_AVOID_IMADD) +MIPS_CPU ("74kf1_1", PROCESSOR_74KF1_1, 33, PTF_AVOID_IMADD) +MIPS_CPU ("74kfx", PROCESSOR_74KF1_1, 33, PTF_AVOID_IMADD) +MIPS_CPU ("74kx", PROCESSOR_74KF1_1, 33, PTF_AVOID_IMADD) +MIPS_CPU ("74kf3_2", PROCESSOR_74KF3_2, 33, PTF_AVOID_IMADD) MIPS_CPU ("1004kc", PROCESSOR_24KC, 33, 0) /* 1004K with MT/DSP. */ MIPS_CPU ("1004kf2_1", PROCESSOR_24KF2_1, 33, 0) diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 4957a150..d7a0749 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -16912,6 +16912,21 @@ mips_option_override (void) warning (0, "the %qs architecture does not support branch-likely" " instructions", mips_arch_info->name); + /* If the user hasn't specified -mimadd or -mno-imadd set + MASK_IMADD based on the target architecture and tuning + flags. */ + if ((target_flags_explicit & MASK_IMADD) == 0) + { + if (ISA_HAS_MADD_MSUB && + (mips_tune_info->tune_flags & PTF_AVOID_IMADD) == 0) + target_flags |= MASK_IMADD; + else + target_flags &= ~MASK_IMADD; + } + else if (TARGET_IMADD && !ISA_HAS_MADD_MSUB) + warning (0, "the %qs architecture does not support madd or msub" + " instructions", mips_arch_info->name); + /* The effect of -mabicalls isn't defined for the EABI. */ if (mips_abi == ABI_EABI && TARGET_ABICALLS) { diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 0db3698..dd694f3 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -47,8 +47,15 @@ extern int target_flags_explicit; PTF_AVOID_BRANCHLIKELY Set if it is usually not profitable to use branch-likely instructions for this target, typically because the branches are always predicted - taken and so incur a large overhead when not taken. */ -#define PTF_AVOID_BRANCHLIKELY 0x1 + taken and so incur a large overhead when not taken. + + PTF_AVOID_IMADD + Set if it is usually not profitable to use the integer MADD or MSUB + instructions because of the overhead of getting the result out of + the HI/LO registers. */ + +#define PTF_AVOID_BRANCHLIKELY 0x1 +#define PTF_AVOID_IMADD 0x2 /* Information about one recognized processor. Defined here for the benefit of TARGET_CPU_CPP_BUILTINS. */ @@ -874,14 +881,13 @@ struct mips_cpu_info { && !TARGET_MIPS16) /* ISA has integer multiply-accumulate instructions, madd and msub. */ -#define ISA_HAS_MADD_MSUB ((ISA_MIPS32 \ - || ISA_MIPS32R2 \ - || ISA_MIPS64 \ - || ISA_MIPS64R2) \ - && !TARGET_MIPS16) +#define ISA_HAS_MADD_MSUB (ISA_MIPS32 \ + || ISA_MIPS32R2 \ + || ISA_MIPS64 \ + || ISA_MIPS64R2) /* Integer multiply-accumulate instructions should be generated. */ -#define GENERATE_MADD_MSUB (ISA_HAS_MADD_MSUB && !TUNE_74K) +#define GENERATE_MADD_MSUB (TARGET_IMADD && !TARGET_MIPS16) /* ISA has floating-point madd and msub instructions 'd = a * b [+-] c'. */ #define ISA_HAS_FP_MADD4_MSUB4 ISA_HAS_FP4 diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt index f9e88b3..e11710d 100644 --- a/gcc/config/mips/mips.opt +++ b/gcc/config/mips/mips.opt @@ -58,6 +58,10 @@ mmad Target Report Var(TARGET_MAD) Use PMC-style 'mad' instructions +mimadd +Target Report Mask(IMADD) +Use integer madd/msub instructions + march= Target RejectNegative Joined Var(mips_arch_option) ToLower Enum(mips_arch_opt_value) -march=ISA Generate code for the given ISA diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 9b8b36a..3054e5c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -766,7 +766,7 @@ Objective-C and Objective-C++ Dialects}. -mcheck-zero-division -mno-check-zero-division @gol -mdivide-traps -mdivide-breaks @gol -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol --mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol +-mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp @gol -mfix-24k -mno-fix-24k @gol -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 @gol @@ -16481,6 +16481,15 @@ This option has no effect on abicalls code. The default is Enable (disable) use of the @code{mad}, @code{madu} and @code{mul} instructions, as provided by the R4650 ISA@. +@item -mimadd +@itemx -mno-imadd +@opindex mimadd +@opindex mno-imadd +Enable (disable) use of the @code{madd} and @code{msub} integer +instructions. The default is @option{-mimadd} on architectures +that support @code{madd} and @code{msub} except for the 74k +architecture where it was found to generate slower code. + @item -mfused-madd @itemx -mno-fused-madd @opindex mfused-madd |