[PATCH] Disable updating VRSAVE everywhere except Darwin

Segher Boessenkool segher@kernel.crashing.org
Sat Sep 29 17:06:00 GMT 2012


> The following proposed patch disables setting, saving and restoring
> the VRSAVE register on all targets except Darwin.
>
> VRSAVE was removed from the AIX ABI and was suppose to have been
> removed from the PPC SVR4 ABI.  All recent versions of the Linux
> kernel set and maintain VRSAVE itself, as a process-level flag, not as
> individual bits, so no need for the compiler to set the register or to
> save and restore it across calls.  All uses of VRSAVE (e.g., GLibc)
> will continue to work using the value set by the kernel.

I don't think you can assume all embedded users do not use VRSAVE (or
even the majority).  And what about *BSD?

> *************** rs6000_stack_info (void)
> *** 17842,17848 ****
>     else
>       info_ptr->spe_gp_size = 0;
>
> !   if (TARGET_ALTIVEC_ABI)
>       info_ptr->vrsave_mask = compute_vrsave_mask ();
>     else
>       info_ptr->vrsave_mask = 0;
> --- 17838,17845 ----
>     else
>       info_ptr->spe_gp_size = 0;
>
> !   /* Only set VRSAVE register on Darwin.  */
> !   if (DEFAULT_ABI == ABI_DARWIN)
>       info_ptr->vrsave_mask = compute_vrsave_mask ();
>     else
>       info_ptr->vrsave_mask = 0;

This does completely disable VRSAVE setting -- it seems to me it
should be  if (TARGET_ALTIVEC_ABI && TARGET_ALTIVEC_VRSAVE)  in
the first place, and then you don't need the change when changing
the default for -mvrsave like this patch does?


Segher



More information about the Gcc-patches mailing list