AFAIK, the PL/X compiler shares a back-end with the other code
optimizers, so should produce excellent code. The compiler team is in
Toronto and I was lucky enough to talk to a few at Share in Orlando.
As it stands z/OS needs to run on machines as old as a z/800. So the
architecture level (ARCH(n)) of BCP code has to support old hardware. As
Bob Shannon mentioned, with z/OS going to a new version
IBM can safely recompile the BCP PL/X code for not so ancient boxes.
On 12/04/2012 11:14 PM, McKown, John wrote:
First thing to wonder about is: "Has IBM upgraded the PL/AS(current name?) compiler to
emit Relative and Immediate instructions?". Most of the BCP is supposedly written in
PL/AS, not HLASM. Second, for those modules which are written in HLASM, is it cost effective
to IBM to systematically update the source from the older instructions? Why would it be? The
new instructions may (or may not) be less resource efficient that the older versions.I doubt
that many are more efficient (LHI being more efficient seems likely). Many of the R&I
instructions are longer than the corresponding Base+Displacement instruction. The simpliest
thing for IBM would be to use the IEABRCX macro to change all the branch instructions to
branch relative instructions. But you can't do that type of OPSYN method to do something like
replacing the LA with an LARL. So replacing LA with LARL would require looking at every LA
instruction to see if it could be replaced by an LARL. The same with replacing selec!
te!
d L and LH with LHI, which would verifying that the value being loaded is indeed never
modified. And I don't see a general way to do it if they are inside a macro. And an LARL may
not be the best idea simply because it is 6 bytes instead of the LA instruction's 4 bytes.
So, at the very least, it will take up more space in the I-cache hardware. Other immediate
instructions may also require more bytes that the replaced instruction. So, IMO, a command
such as "Replace all base+displacement instructions in a program with the corresponding
R&I instruction, whenever possible." is not a good idea.
IMO, the only time to use a relative instruction is in "baseless" code. Only use
"baseless" coding when you are either out of registers or you need too many base
registers due to the size of the program. Which, in HLASM programs, usually means the program is
too big and should be split up somehow.
Again, the only time to use immediate instructions is when the value is a constant and
will fit into a halfword. Why a halfword? Because the LHI is the same number of bytes as
the LH or L instruction, taking up the same I-cache space. And because the immediate
instructions to load a fullword are larger than the base+displacement load instruction,
and so use more I-cache space. Space which may be better spend buffering more
instructions and let the D-cache hold the value instead of the I-cache holding the
equivalent of the instruction and data, and not using the D-cache. This is especially
true if there are two or more immediate instructions in the I-cache that are loading the
same value. In this case, assuming the duplicate instruction is something like "L
r,=F'10'", the F'10' would be held in the D-cache and so be likely be used almost as
fast, if not equally fast, as it would be by being encoded in the instruction in the
I-cache.
However, I will freely admit that I use R&I instructions in preference to B+D
instructions in most of my HLASM programs.
Oh, and one other reason to use at least one Branch instruction in your program
instead of a Brance Relative. If the start of a program starts with the
sequence:
USING *,15
B AROUND
DC C'some character string'
AROUND DS 0H
Then the SYSUDUMP will print "some character string" in the save area trace
portion of the dump. In most cases, this works because GPR15 points to the B instruction.
--
John McKown
Systems Engineer IV
IT
Administrative Services Group
HealthMarkets(r)
9151 Boulevard 26 * N. Richland Hills * TX 76010
(817) 255-3225 phone *
[email protected] * www.HealthMarkets.com
Confidentiality Notice: This e-mail message may contain confidential or
proprietary information. If you are not the intended recipient, please contact
the sender by reply e-mail and destroy all copies of the original message.
HealthMarkets(r) is the brand name for products underwritten and issued by the
insurance subsidiaries of HealthMarkets, Inc. -The Chesapeake Life Insurance
Company(r), Mid-West National Life Insurance Company of TennesseeSM and The
MEGA Life and Health Insurance Company.SM
-----Original Message-----
From: IBM Mainframe Discussion List
[mailto:[email protected]] On Behalf Of Miklos Szigetvari
Sent: Thursday, April 12, 2012 9:16 AM
To: [email protected]
Subject: Modernizing the BCP code ?
Hi
We try to modernize our code here, with relative instructions, long
displacements , immediate s etc etc
What about the control program ?
Just got some REXX IRXINIT dumps, and seems to me the code
is not very
modern.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN