There aren't a lot of additional mnemonics introduced retrospectively. When the new mnemonic is simply an alternative, such as LFI for IILF (which the architects agreed to let me add to HLASM), you can simply use OPSYN instructions to make them available with earlier OPTABLE levels. For more complex cases such as the high/low shifts you would need macros. Those shifts were tricky to implement because the code generation logic can only use the hex opcode to determine the processing required (so that it is unaffected by OPSYN) and more than one of the shifts maps to the same opcode, but we got round that by defining additional dummy predefined operand values which were used to distinguish the required functions.
Of course, if your code will be assembled elsewhere at the earlier OPTABLE level, you need to include the relevant OPSYN definitions with it. We considered retrofitting the new mnemonics to previous OPTABLE levels, but after previous nasty accidents involving clashes with user macros we felt it was important to guarantee that if you are assembling with a specific OPTABLE and have no errors, your code will not be broken by any maintenance. And as I said, there is a web document inside IBM, owned by the HLASM team, which contains helpful tables including OPTABLE levels and z/OS releases which prereq them, and it is not confidential, and it also links to an unofficial web version of Principles of Operation (which was only at the z16 level last time I refreshed it), but I did not manage to get it made available externally before I retired, partly because I wasn't familiar with the suggested tools. It should be possible, for example using GitHub pages. Jonathan Scott -----Original Message----- From: IBM Mainframe Assembler List <[email protected]> On Behalf Of Ngan, Robert Sent: 28 October 2025 21:24 To: [email protected] Subject: Re: LOAD ON CONDITION Yes, what is needed is something like the OPTABLE but would actually honor the ZSxx parameter for the actual instructions supported by a ZSxx machine, not what mnemonics HLASM add support for at the time the ZSxx machine was introduced. I want to be able to flag unsupported opcodes when assembling for (say) a Z15, but OPTABLE blocks the use of mnemonics introduced years after the actual opcode was introduced e.g. LFI, LOCRO, etc. Robert Ngan DXC Luxoft -----Original Message----- From: IBM Mainframe Assembler List <[email protected]> On Behalf Of Peter Relson Sent: Saturday, October 25, 2025 06:47 To: [email protected] Subject: Re: LOAD ON CONDITION The z/OS Planning for Installation book has a table that describes what new features are required for a given architecture level set (i.e., may be assumed, except for the unfortunate case where a function is subsequently withdrawn which does not happen often). Generally, the features are a subset of the features made available for a given machine.Colloquially, we may think of an architecture level set to a z14 or z15 or z16 or whatever but that is imprecise (although it does give a decent level of understanding). The ALS is not to a machine, it is to a set of functions.Thus, just because a machine introduces function X and that machine satisfies the ALS requirements, that does not mean that you may assume that X is available for your use when running the z/OS release with that ALS on that machine. There was definitely thought of an appendix in POp that shows in which machine generation a function was introduced. I don't know if that thought was implemented. While unpleasant, you can look at the instruction's definition, see the feature without which you get an operation exception, and try to work out in which machine that feature was introduced (or if it's part of an ALS, the planning for installation book might help). It's quite possible that something nicer already exists that I'm not remembering. Peter Relson
