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: Make more use of register insv and ext*v expanders


Thanks for the support.

Adam Nemet <anemet@caviumnetworks.com> writes:
> Richard Sandiford <richard@codesourcery.com> writes:
>> If an expander FAILs on invalid memory operations, store_bit_field
>> and extract_bit_field just carry on as though no expander existed.
>> On ports that have both register and memory operations, it would be
>> better to try a register operation instead, just as if the memory
>> operand had been rejected outright.
>
> I haven't applied the patch and the diff is kind of hard to read so

[Yeah, it is, sorry about that.  It looked even worse in unified form.]

> let me just ask.  Once we fall back on the register case do you
> reverse the effect of advancing the memory operand to the first byte
> via adjust_address?  We really want to fetch the original aligned
> whole word on SLOW_BYTE_ACCESS targets (MIPS).

Do you mean this bit:

      /* Add OFFSET into OP0's address.  */
      if (MEM_P (xop0))
 	xop0 = adjust_address (xop0, byte_mode, offset);

?  If so, then yeah, we discard that adjustment for the register case.
The register code runs with op0, bitpos, etc. set to the same values
they have when entering the original MEM code; all the changes made
by the MEM attempt are stored in block-local variables.

Richard


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