This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH v2] [SPARC] Add -mfsmuld option
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: Sebastian Huber <sebastian dot huber at embedded-brains dot de>
- Cc: gcc-patches at gcc dot gnu dot org, software at gaisler dot com
- Date: Wed, 26 Jul 2017 14:13:26 +0200
- Subject: Re: [PATCH v2] [SPARC] Add -mfsmuld option
- Authentication-results: sourceware.org; auth=none
- References: <20170726085300.14685-1-sebastian.huber@embedded-brains.de>
> Add the -mfsmuld option to control the generation of the FsMULd
> instruction. In general, this instruction is available in architecture
> version V8 and V9 CPUs with FPU. Some CPUs of this category do not
> support this instruction properly, e.g. AT697E, AT697F and UT699. Some
> CPUs of this category do not implement it in hardware, e.g. LEON3/4 with
> GRFPU-lite.
>
> gcc/
> * config/sparc/sparc.c (dump_target_flag_bits): Dump MASK_FSMULD.
> (sparc_option_override): Honour MASK_FSMULD.
> * config/sparc/sparc.h (MASK_FEATURES): Add MASK_FSMULD.
> * config/sparc/sparc.md (muldf3_extend): Use TARGET_FSMULD.
> * config/sparc/sparc.opt (mfsmuld): New option.
> * doc/invoke.texi (mfsmuld): Document option.
OK for mainline and 7 branch modulo:
> @@ -1511,6 +1513,11 @@ sparc_option_override (void)
> target_flags |= MASK_LONG_DOUBLE_128;
> }
>
> + /* Enable the FSMULD instruction by default if not explicitly configured
> by + the user. It may be later disabled by the CPU target flags or if
> + !TARGET_FPU. */
> + target_flags |= MASK_FSMULD & ~target_flags_explicit;
I think that:
if (!(target_flags_explicit & MASK_FSMULD))
target_flags |= MASK_FSMULD;
is easier to grasp (and there is a precedent with MASK_LRA a few lines below).
> /* Code model selection. */
> sparc_cmodel = SPARC_DEFAULT_CMODEL;
>
> @@ -1603,11 +1610,11 @@ sparc_option_override (void)
> if (TARGET_VIS4B)
> target_flags |= MASK_VIS4 | MASK_VIS3 | MASK_VIS2 | MASK_VIS;
>
> - /* Don't allow -mvis, -mvis2, -mvis3, -mvis4, -mvis4b and -mfmaf if
> + /* Don't allow -mvis, -mvis2, -mvis3, -mvis4, -mvis4b, -mfmaf and
> -mfsmuld if FPU is disabled. */
> if (! TARGET_FPU)
> target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_VIS4
> - | MASK_VIS4B | MASK_FMAF);
> + | MASK_VIS4B | MASK_FMAF | MASK_FSMULD);
>
> /* -mvis assumes UltraSPARC+, so we are sure v9 instructions
> are available; -m64 also implies v9. */
> @@ -1641,6 +1648,9 @@ sparc_option_override (void)
> if (sparc_fix_ut699 || sparc_fix_ut700 || sparc_fix_gr712rc)
> sparc_fix_b2bst = 1;
>
> + if (sparc_fix_ut699)
> + target_flags &= ~MASK_FSMULD;
Add a stupid comment line here, something like:
"Disable FsMULd for the UT699 since it doesn't work correctly."
--
Eric Botcazou