On Mon, 7 May 2018 08:15:45 -0400, Peter Relson <rel...@us.ibm.com> wrote:
>The term "32-bit program" has been repeated in this thread. It appears >that the OP means by this that the program can be AMODE 31 or AMODE 64 but >never directly touches bits 0-31 of a GR. Thanks for providing that clarification. You are totally correct. >It appears that the OP is interested in expanding the program to >accommodate twice as much storage as it has access today (which in general >is a very limited increase and one might call it short-sighted since how >often is "twice as much" enough, except as a temporary measure?), while >still having to deal with being in AMODE 64 when using the storage that >happens to be within the bar, but not wanting to use 8-byte data pointers >and not wanting to use the available instructions that set 8-byte >registers. Yes, this is correct. Based on your clarifications, I have updated my RFE. Basically just the last paragraph below. Can you tell me if any further clarification or rewording is required so that IBM at least fully understands my request, even if they reject it as too much work? Thanks. Paul. I would like GETMAIN to support a LOC=32 parameter, giving 32-bit programs access to a full 4 GiB instead of the current 2 GiB provided by LOC=31. The LOC=31 bits plus the top bit of the option byte seen here: https://www.ibm.com/support/knowledgecenter/SSLTBW_2.3.0/com.ibm.zos.v2r3.ieav200/svc120.htm can be used to signal a LOC=32 request. When the GETMAIN is executed in AM64, memory above 2 GiB is potentially returned. When executed in AM31, normal LOC=31 memory is obtained instead. This way the application will still work on older systems that aren't LOC=32 aware. When obtaining LOC=32 memory, the GETMAIN routine should search *down* the free memory chain to find a free area, to preserve the LOC=31 space, and if there is no fragmentation, allow a request for a single 3 GiB of memory to be satisfied (as a single block spanning the 2 GiB boundary). It is up to the application program to ensure that when manipulating the LOC=32 memory it is in AM64 and while in AM64 it does not attempt to use the top bit of any 32-bit register as a flag. Note that by "32-bit program" I mean a program that can be running in AM24 or AM31 or AM64, but never directly touches bits 0-31 of a general register. ie data pointers are always 4-bytes and no instruction that touches an 8-byte register is ever executed. This allows compact 32-bit programs to continue to be written instead of having the overhead of switching everything to 64-bit. A program would only need to be rewritten or rebuilt with a different compiler option if it started to exceed the 4 GiB limit rather than exceeding a 2 GiB limit. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN