Do we have access to an instruction which counts leading zero bits? Interesting problem, Louis
> On 28 Jul 2019, at 19:51, Henry Rich <[email protected]> wrote: > > Many of the members of this Forum will remember the days of assembler language > > ...and who could less than merry be > when writing out BXLE? > > AND, OR, XOR were our meat. Those days are returning. > > You have two integer variables a and b and you want to do something if one or > both of them are 0. In C, you might write > > if(a==0 || b==0)stmt; > > but that will generate the code > > cmp a,0 > bz stmt > cmp b,0 > bnz notstmt > stmt: > ... > notstmt: > > Here's the problem: your machine is very slow at branch instructions. Each > branch takes 30 times as long as a regular instruction. (I am describing a > state-of-the-art Intel CPU when it cannot predict the branches effectively, > perhaps because the data is... unpredictable). > > Obviously, you want to use only one branch instruction. You may use as many > arithmetic and logic instructions as you like, but only one branch. The > usual condition codes, ZNCV, are available. How tight can you make the code? > > Example: suppose the problem were to execute stmt if one or both of a and b > is NOT zero. Then you would simply write > > or a,b > bnz notstmt > ... > > Checking for zero seems to be harder. > > No hurry. I have pondered this problem for over a year, and just today I > found a solution I consider acceptable. > > Henry Rich > > > > > > > > --- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
