> Other than consolidating the eight bytes of the two instructions into a 
> single six-byte instruction, why bother?

If the condition is false, (possibly) does not reference storage, potentially 
saving cache and so forth. The PoOp seems to be silent on whether the storage 
is referenced if the condition is false.

Also saves a register, and that is important to the compilers.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]] On 
Behalf Of Dan Greiner
Sent: Thursday, June 20, 2019 10:57 AM
To: [email protected]
Subject: Re: BIC documentation - unclear?

The following BRANCH INDIRECT ON CONDITION instruction:

         BIC  8,1234(5,6)

is functionally equivalent to the following two instructions, except that BIC 
does not alter any registers (unlike the second example which modifies general 
register 14). 

         LG    14,1234(5,6)
         BCR   8,14


Other than consolidating the eight bytes of the two instructions into a single 
six-byte instruction, why bother?

BIC is intended to work in conjunction with the new guarded-storage facility 
(GSF) introduced in the z14. GSF is intended to facilitate garbage collection 
for languages such as Java that periodically require urban renewal of blighted 
storage. Once a GSF handling routing has finished its magic, the clean-up 
function is left with an 8-byte return address in the program stack.  Other 
than the program-stack pointer, no other register is available to perform the 
two-instruction branch back to the return address, as shown above. See chapter 
4 of the current PoO (SA22-7832-11) for a description of GSF ... particularly 
programming note 1 on page 4-72 for a brief summary of GSF's function. 

Since BIC is a problem-state instruction, it can be used for other purposes 
too. For example, if you have a table of 8-byte branch addresses that are 
computationally indexed, you can use BIC to effect the branching.  This may be 
handy following a TRT instruction, or in other software-emulated finite-state 
machine code.

As to the often-cited lamentation that more examples should be provided in the 
PoO, the reader is directed to the first sentence in Chapter 1: "This 
publication provides, for reference purposes, a detailed description of 
z/Architecture.™" Although some programming examples are provided in Appendix 
A, the PoO was never intended to be a textbook on assembler-language 
programming. As Mike Stack would assert in his Assembler Language Boot Camp 
sessions as SHARE, learning assembler is like learning a foreign language ... 
it's hard. When John Ehrman was still with IBM, we tried to entice him into 
crafting additional examples for Appendix A, but his was the better solution: 
He came up with a marvelous text book instead (as I recall, this text is 
available on the Marist web site).

Reply via email to