If I have code like this: char foo(char *p) { return (p[-1]); }
It generates a negative index, like this: * Function foo code L 2,=F'-1' L 3,0(11) SLR 15,15 IC 15,0(2,3) * Function foo epilogue See that (2,3) - that is adding both R2 + R3. R3 is a pointer to a location in 4 GiB space. R2 is now 0xFFFFFFFF In 64-bit mode, both of those values are added together and there is no address wrap, so it accesses memory above the 4 GiB boundary (between 4 GiB and 8 GiB to be precise) which I don't have access to. Is there a way of constraining index registers to positive values? I want it to instead generate ALR 3,2 to add these two values together using 32-bit arithmetic, causing truncation at 32 bits, then it can do IC 15,0(3) (ie no index) I'm using GCC 3.2.3 using the i370 target if it makes a difference. Thanks. Paul.