BRANCH INDIRECT ON CONDITION (BIC) was primarily designed in support of the new 
guarded-storage facility (GSF).  GSF is described beginning on page 4-64 of the 
IBM z/Architecture Principles of Operation (SA22-7832-11). Programming note 1 
on p. 4-72 gives a (very) brief overview of GSF concepts.

Briefly, GSF provides support for programming languages that implement 
so-called "garbage collection" by allowing the language to designate sections 
of it's heap that are undergoing urban renewal. When the program loads a 
pointer to a program object (by means of the new LOAD GUARDED [LGG] or LOAD 
LOGICAL AND SHIFT GUARDED [LLGFSG] instructions), either (a) the instruction 
executes normally (i.e., the target location is not undergoing urban renewal), 
or (b) the target location is is in a guarded area, in which case a 
guarded-storage event (GSE) is recognized. In the case of GSE recognition, 
control branches to a pre-registered event handler, where the program can 
perform whatever fix-up is required to effect garbage collection, and then 
branch back to the original LGG / LLGFSG to try it again.

BIC provides the means by which the GSE handler can branch back with only a 
stack pointer. That is, after performing whatever garbage-collection is 
necessary, the GSE handler can restore any and all registers it altered, and 
then branch back to the LGG / LLGFSG with only the stack pointer. 

Using BIC for indexed branches was considered to be interesting (though 
secondary).

FYI: Although I was involved with the architecture definition of GSF and BIC, I 
am now retired.

Reply via email to