Hi Paul,
> I just checked my copy of s390.md and I don’t see > LA being used for arithmetic. This would be the "*la_31" and "*la_31_and" patterns. (Note that the addition is implicit in the use of the "address_operand" constraint.) > If your copy of s390.md is using LA for arithmetic > then would it be possible to have an option to > use a normal mathematics instruction instead of > LA? LA was just an example. It doesn't usually make sense to reason on an "use instruction X" basis, that's not how compiler optimizations work. You rather start with a set of semantic invariants and then make sure those are preserved through all transformations. Therefore again my question, what is the actual goal you want to achieve? I'm still not sure I understand that ... > Also, I just realized – if GCC is using LA for maths > for 32-bit registers, then values will be limited to > 2 GiB instead of 4 GiB for unsigned, but that is not > the case. That's why GCC makes sure to only use the instruction when a 31-bit addition is wanted. This can be the case either when GCC can prove that the involved operands are pointer values (which are by definition restricted to 31-bit values in -m31 mode), or when there is an explict 31-bit addition (using e.g. an & 0x7fffffff) in the source code. Bye, Ulrich