... should be "storage access" instead of "storage address" at the end of the
second paragraph, before the opening paranthese ...
-------- Original-Nachricht --------
Betreff: Re: 2GiB <= address < 4GiB
Datum: Wed, 05 Nov 2014 09:27:50 +0100
Von: Bernd Oppolzer <bernd.oppolzer@t-online.de>
An: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU>
Maybe it can be explained this way:
when we migrated from 24 bit to 31 bit, we had lots of problems when loading 24
bit addresses (for example parameter addresses) from fullwords and using them in
31 bit mode, and the addresses had some non zero values in the first (leftmost)
byte of the register (which was no problem in 24 bit mode). There was no way
around this but to clean the register's first byte before doing the storage
address (if the address was a 24 bit address in the beginning).
Now we have the same situation; the leftmost bit of the fullword is ignored when
using the addresses in storage access (in 31 bit mode), be it 0 or 1 ... and it
is 1 sometimes.
When expanding a 31 bit address to 64 bit, simply by adding 32 zero bits on the
left or by loading a fullword into the right half of a 64 bit register, the 31
bit address will be the wrong address, if the leftmost bit in the fullword was
set.
But this time we have the chance to flag such errors, simply by excluding this
address range (0x00000000_80000000 to 0x00000000_FFFFFFFF) from the range of
allowable 64 bit addresses in z/OS. It is, given the overall address range, not
too large.
This is, as I understand it, a design decision of z/OS; Linux and z/VM deciced
that they don't regard such problems as severe enough, or they even don't exist,
because Linux is 64 bits from the start (but I don't really know this, only a
guess).
Kind regards
Bernd
|