This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2] [SPARC] Add -mfsmuld option


> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]