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.
