As a guy who has wrestled with this sort of question as a lead ISV developer 
let me share my viewpoint.

Yes, I agree with @Peter and @Mark's general approach: decide how early a 
release of z/OS (or z/VM or z/VSE, if that's your thing) you are going to 
support -- presumably the oldest release that IBM is willing to support -- and 
then require at a minimum the oldest architecture level that it supports. Don't 
worry every time you code; set the level in the assembler (or C or COBOL or 
PL/I!) options and let the assembler catch your errors. Once in a while you may 
want to consider a particular new instruction as you code; that's where these 
spreadsheets and tables come in very handy.

The new instructions are all goodness and faster than their alternatives, but I 
doubt that using one particular new instruction is going to make a world of 
difference in the speed of your code. If it's in a tight loop that is executed 
millions of times then -- and only then -- it might be worth dual-pathing your 
code.

Once upon a time I used to worry "but what if there is some prospect out there 
with a z900 and a checkbook?" Well, I suspect there ARE shops out there with 
z900's but this just in: they are in "we're getting off the mainframe" mode and 
aren't prospects for new ISV software. And if I am wrong and one DOES show up 
with a large check then you can re-code and create a custom build just for 
them. One advantage of compiled languages as opposed to HLASM: no need to 
re-code, just change the ARCH() option and re-build.

Charles

-----Original Message-----
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Mark Hammack
Sent: Wednesday, May 15, 2024 8:28 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Instructions by Machine

Just my 2 cents but this makes sense.  A few years ago, my company
(actually lead developer at the time and I) decided that we would
"standardize" on supported versions of IBM operating systems.  z/SO 2.2 had
just gone 'end of life' and (per Peter's reference) required z10
hardware so that became our baseline.  We set the zarch parameter in the
HLASM configuration file and move on.  That actually helped yesterday when
I "accidentally" used an instruction (LFI) that isn't available until the
z16.  The assembler caught it, I changed my code and all is good for now.
The only time we've checked (in the software) what hardware was available
was back when 64 bit hardware was 'new'.  Since some customers may have had
64 bit and others not, we created separate load modules for each
environment and let a 'master' program decide which one to load.

Reply via email to