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

Reply via email to