This is the mail archive of the gcc@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]

pre_modify/post_modify with scaled register


Hi,

The gccint docs for pre_modify/post_modify say that the address modifier
must be one of three forms:

(plus:m x z), (minus:m x z), or (plus:m x i), where z is an index register
and i is a constant.

Why isn?t (plus:m x (mult:m z i)) supported, for architectures that support
scaling of the index register (E.g. ARM?) 



Compiling:

int *f(int *p, int x, int z)
{
  p[z] = x;
  return p + z;
}

For ARM results in:

        str     r1, [r0, r2, asl #2]
        add     r0, r0, r2, asl #2

Rather than just:

        str     r1, [r0, r2, asl #2]!

Should this be improved by expanding what pre/post_modify supports, as
above, or perhaps a peephole optimisation?

Cheers,
Jon




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