Re: Specifics of `BASE_REG_CLASS` macro?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/31/2017 09:29 AM, Maxim Blinov wrote:
I would define BASE_REG_CLASS to be any register that can be used for
simple indirect addressing (that's the same as base+index with a zero
index) and the stack pointer.  It may not matter much in the end though.
Ok.

I think we've supported ports with similar restrictions in the past
(ia64?).  My biggest worry would be in trying to still allow sp+offset.

You might consider not allowing sp+offset initially until you've got
things mostly working, then look at allow sp+offset in limited cases to
improve the generated code.

​I am curious as to why (SP + offset) dereferencing is so problematic,
as compared to the general registers; could you elaborate?
It's potentially problematic because you don't generally have reg+offset addressing modes. Whether or not it actually causes a problem could well depend on other aspects of your target and things like reload's assumptions about how it can manipulate an insn.

So I would start by first ignoring that capability (sp+offset) and get the port running just using simple register indirect addressing modes. Then I'd look to try and exploit the ability to handle sp+offset. That way you can compare the before/after test results to help identify problematical areas.


P.S. When I reply, does it suffice to reply to `gcc-help`, or should I
also add you to the CC list?
gcc-help is sufficient.

jeff




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux