YES!

If necessary I'll write pages of comments for a single instruction. And 
documenting before coding is sound doctrine.

One caveat s that a comment that does not improve understanding is a hindrance, 
and I've warned students that I'll take of points for a comment like

         LA    R7,666(,R7)           Add 666 to register 7

Instead explain why you are adding that value to that register.

-- 
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3
עַם יִשְׂרָאֵל חַי
נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר




________________________________________
From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> on behalf 
of Jonathan Scott <00001b5498fc732f-dmarc-requ...@listserv.uga.edu>
Sent: Sunday, August 24, 2025 6:39 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU <ASSEMBLER-LIST@LISTSERV.UGA.EDU>
Subject: Re: Execute-Type Instructions


External Message: Use Caution


I totally agree that in most cases performance is achieved by using the right 
design and algorithms.  Simplicity and reliability of code is also very 
important, and for code which is not performance-critical there is little point 
in attempting local optimization at the expense of simplicity.  It is usually 
only for extremely intensively executed code (innermost loops) where any sort 
of local optimization is worth the effort.  It used to be that reordering 
sequences of instructions to avoid address generation interlocks and other 
pipeline blocks could achieve significant improvements, but recent IBM Z 
processors now handle much of that automatically.  Keeping things in registers 
(including vector registers) to avoid storage access is still useful, and some 
newer instructions can help simplify code as well as improving performance, for 
example the "interlocked-access facility 1" makes it simple and fast to use ASI 
to update shared counters.  The IBM Z hardware people have always said that you 
should use obvious standard sequences of code as those will be the ones that 
they are trying to optimise, so for example exclusive-or of a storage location 
with itself is typically interpreted as an instruction to store zeroes in that 
storage, and the standard MVC with offset of 1 byte is interpreted as an 
instruction to fill storage with a pad byte.  There are a few performance 
oddities that are worth noting at the algorithm level, for example if you 
repeatedly look at the same offset in many 4K pages you may get performance 
degradation because there are only a limited number of cache lines for each 
256-byte range, so it may be better to maintain a separate compact index 
containing the same information.

And comments are essential not just for future readers of the code, but also to 
ensure that the person writing the code can explain what they are doing, 
ensuring they have a full understanding.  I generally wrote the block comments 
before I wrote the code.  Back in the late 1970s I wrote a very concise piece 
of bit-twiddling code to set VSAM options which was particularly tricky to 
understand, despite detailed comments, and after finding myself rechecking it 
several times over the years, I added a comment saying "This code is correct.  
Do not waste time checking it.  If there is a bug, it is somewhere else!".  
Some years later, long after I had left that company, I received a note 
thanking me for how much time that comment had saved!

Jonathan Scott


Reply via email to