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

Reply via email to