Usage Notes

  1. The guest real addresses that you specify in Rx and Ry+1 must be in the same page of guest real storage. In XC virtual machines in access register mode, the ALET in Ax (or zero if Ax designates access register 0) must match the ALET in Ay+1 (or zero if Ay+1 designates access register 0).
  2. Because this DIAGNOSE code is intended mainly for system performance monitoring, it is recommended that the page addressed by Rx and Ry+1 also be resident in host storage at the time the DIAGNOSE instruction is executed. This can be accomplished by having the instruction itself on the same page or by locking the page in host storage; otherwise, DIAGNOSE code X'04' processing causes a page to be paged-in and therefore may affect the performance monitoring data.
  3. For a discussion of how z/VM processes addresses, see How Addresses Are Processed.
  4. For each address in the list of host addresses, z/VM provides the data obtained from that address. z/VM stores this data into the result field identified by Ry+1, and possibly by Ay+1 if the virtual machine is an XC virtual machine running in access-register mode.

    Entries in the list of addresses pointed to by Rx correspond (1-to-1) to the entries in the result field pointed to by Ry+1. Execution of this DIAGNOSE can be thought of as a loop that fetches the first element from the list of addresses (pointed to by Rx) and stores the data from that location into the first element of the result field (pointed to by Ry+1). Then the second address is fetched and the second data item is stored. This continues until the number of addresses in the count field have been fetched and the corresponding data stored or until an exception is encountered.

    Figure 1. DIAGNOSE X'04' Register Entries
    DIAGNOSE X'04' Register Entries. See surrounding text for a description of the diagram.

    It is possible for the results array to overlap the address array. If destructive overlap occurs, incorrect data may be returned. An addressing exception may be presented when destructive overlap causes an address to change before it is fetched.

    An overlap can occur only if the Ry+1 address is greater than the Rx address and yet within the bounds of the addresses to be examined.

  5. In a multiprocessor environment, each processor has a prefix register that it uses to relocate addresses between 0 and 4095 (8191 if the host is in z/Architecture® mode) to another frame in storage. The prefix register enables each processor to use a different frame to avoid conflict with other processors for such activity as interrupt code recording. Thus, the above range refers to different areas of storage, depending upon which processor generates the address. All references to host real storage are handled as if they were made on the master processor.
  6. Fetching and storing of data is consistent with the Enterprise Systems Architecture/390 Principles of Operation and z/Architecture Principles of Operation for both operands of the MOVE (MVC) instruction.
  7. Because real storage is volatile, the contents of host storage can change at any time after it is copied into the result field.
  8. The number of entries in the list that you specify in Ry must be greater than zero and cannot exceed:
    • 1024 if bit 0 of Ry is 0
    • 512 if bit 0 of Ry is 1
    Otherwise, a specification exception is returned.
  9. If bit 0 of Ry is 0 (indicating 31-bit addresses), bit 1 of Ry must be 0 (indicating a length of 4 bytes). If bit 0 of Ry is 1 (indicating 64-bit addresses), bit 1 of Ry must be 1 (indicating a length of 8 bytes).
  10. If the loaded data is greater than 4 KB in length, the frames backing the host logical storage pages are not necessarily contiguous in host real storage.