This sort of discussion is periodically raised – within IBM as well as without 
– which caused me to come up with a definitive spreadsheet of what machine 
implemented each instruction, beginning with the S/360. Unfortunately, it also 
contained a lot of IBM confidential instructions, and I left it behind when I 
left the IBM Systems Architecture group. 

However, even with such a table, it leads to the common misconception of 
thinking an instruction is installed in a configuration ... just because it's 
installed on a particular machine. Many of the newer instructions – 
particularly the more complicated ones – require the assistance of a hypervisor 
(e.g., zVM or KVM) in order for them to be valid in a guest configuration.

Vector instructions are a good example ... there have been hundreds of them 
available ever since the z13, but if you're running on a z15 with a back-level 
(pre-z13) hypervisor, the instructions won't be available to a VM guest. This 
is because the back-level hypervisor is clueless as to the saving and restoring 
of the vector registers when a guest program is dispatched. There are numerous 
other examples of such instructions (don't get me started on transactional 
execution ... grumble, mutter). 

At execution time, the only safe way to ensure that an instruction is present 
in the configuration (other than taking a punch on the chin if it's not) is to 
query whether the respective facility is installed by means of the STFLE 
instruction. z/OS programmers, don't bother with STFLE, the OS stores this for 
you somewhere in the prefix or CVT ... I forget which. The PoO description of 
such newer instructions will indicate the facility to which it's associated in 
the list of program exceptions for the instruction.  The hypervisor will 
appropriately trim the STFLE results for whichever facilities it knows how to 
support.

Reply via email to