This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH,rs6000] fix logic error with rs6000_gen_cell_microcode
- From: Andrew Pinski <pinskia at gmail dot com>
- To: Nathan Froyd <froydnj at codesourcery dot com>
- Cc: gcc-patches at gcc dot gnu dot org, dje dot gcc at gmail dot com
- Date: Mon, 1 Feb 2010 13:49:49 -0800
- Subject: Re: [PATCH,rs6000] fix logic error with rs6000_gen_cell_microcode
- References: <20100201214328.GA24251@codesourcery.com>
On Mon, Feb 1, 2010 at 1:43 PM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> Unfortunately, the next bit of code in rs6000_override_options is:
>
> Â/* If we are optimizing big endian systems for space, use the load/store
> Â Â multiple and string instructions unless we are not generating
> Â Â Cell microcode. Â*/
> Âif (BYTES_BIG_ENDIAN && optimize_size && !rs6000_gen_cell_microcode)
> Â Âtarget_flags |= ~target_flags_explicit & (MASK_MULTIPLE | MASK_STRING);
>
> Since rs6000_gen_cell_microcode is true in almost all cases, this
> condition disables use of load/store-multiple and string instructions if
> you're optimizing for size on a processor other than Cell.
Ok, I looked into the history of this code in the PS3 compiler and we just had:
if (rs6000_cpu != PROCESSOR_CELLPPU && BYTES_BIG_ENDIAN && optimize_size)
Which means when I converted it over to use rs6000_gen_cell_microcode,
I had messed up the conditional. Sorry about that and yes checking
rs6000_gen_cell_microcode to be true is the correct thing here.
Thanks,
Andrew Pinski