If you have thought about this for a year then the following can't be the
answer, but here it is:

There is either a popcnt instruction, or you can implement it with
straight-line code without branching.  Whence:
if !(popcnt(a)&&popcnt(b)) stmt;



On Sun, Jul 28, 2019 at 5:51 PM 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