This is the mail archive of the gcc-help@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: Emission of store_multiple and load_multiple patterns




Ian Lance Taylor-3 wrote:
> 
> noeljohn <noel.daniel@gmx.com> writes:
> 
>> Ian Lance Taylor-3 wrote:
>>> 
>>> noeljohn <noel.daniel@gmx.com> writes:
>>> 
>>>>         I am working on a new risc machine. I have defined the
>>>> "store_multiple" and "load_multiple" pattern and the system builds
>>>> fine.
>>>> But
>>>> when I compile the C program for a declared integer array, the
>>>> "store_multiple" and "load_multiple" patterns are not getting emitted.
>>>> Instead simple load and store patterns are emitted multiple times. As
>>>> per
>>>> actual working store_multiple and load_multiple patters need to get
>>>> emitted.
>>> 
>>> What do your store_multiple and load_multiple insns look like?
>>> 
>>> E.g., if they only work for consecutive registers, then gcc can only
>>> match them after register allocation, but there is no appropriate
>>> optimization pass to do so.  In that case you are going to have write
>>> peepholes for them, and you're going to have to generate them
>>> explicitly in your backend's prologue and epilogue generation.
>>> 
>>> 
>>> Ian
>>> 
>>> 
>>
>>
>> Thank you for replying.
>> According to my understanding, it works for consecutive registers as I am
>> just declaring an array in my test case. To be specific, how do I get
>> "rodata" section in assembly generated that contains only the
>> data(integers)
>> in the array declared,, because when I compile with other already build
>> processors, it creates this rodata section and then using a single
>> instruction stores all the elements of array in memory. 
> 
> 
> It's difficult to say how this works without more information.  Is the
> array being treated as a vector?
> 
> It's easy enough to get an rodata section in your assembly code, that
> should happen more or less automatically if you write
>     const int ai[] = { 1, 2, 3, 4 };
> I don't know how to load that using a load-multiple instruction unless
> it is being treated as a vector.
> 
> Ian
> 
> 

Hello Sir,
  The array as I have seen is not being treated as a vector. What it does is
it directly loads the integer array data into the stack. This is normally
done for processors which does not have a support for multiple loading and
storing of words. Is there any way by which we can convey gcc through macros
that our architecture supports this multiple loading and storing facility?
Awaiting for your help. 

noeljohn

-- 
View this message in context: http://old.nabble.com/Emission-of-store_multiple-and-load_multiple-patterns-tp26739724p27351551.html
Sent from the gcc - Help mailing list archive at Nabble.com.


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