Sorry: LHI in the below should be AHI, of course.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Charles Mills
Sent: Wednesday, March 10, 2021 4:56 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Add 1, Subtract 1

1. "Instruction speed" is not exactly a concept anymore due to pipelining.
An instruction can take literally zero effective time because it overlaps
with something else such as a wait for cache. "Does an AHI or an LA take
longer?" is no longer a question that has an answer.

2. AHI is wonderful but not exactly the functional equivalent of LA and
BCTR. LA can add two registers plus an offset, AHI only one register. AHI
sets the condition code, which may be good for your situation, or bad. BCTR
is a branch instruction, which may affect cache performance, although modern
CPUs are probably smart enough to realize that BCTR x,0 is not really a
branch.

3. Code readability is much more important than instruction speed. CPUs are
fast; programmers are relatively very, very slow and error-prone. I like AHI
for its readability. LHI says what it does: adds an immediate value to a
register. Would a novice read BCTR as subtracting one? LHI also takes
equates, which improve maintainability. Prefix_Offset EQU
TablePrefix-TableStart / AHI R1,Prefix_Offset is a lot clearer than BCTR
R1,0 / BCTR R1,0.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Schmitt, Michael
Sent: Wednesday, March 10, 2021 3:26 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Add 1, Subtract 1

I was taught long ago to add 1 to a register using LA r#,1(,r#) and to
subtract 1 using BCTR r#,0.

Is the fastest way now to use AHI r#,1 and AHI r#,-1?

Reply via email to