Maybe the laptop message will look better than the one from the phone.

]c=:#:i.4
0 0
0 1
1 0
1 1
   
   ]a=:0{"1 c
0 0 1 1
   
   ]b=:1{"1 c
0 1 0 1
  {:a*b
1
Linda
   

-----Original Message-----
From: Programming <[email protected]> On Behalf Of Henry 
Rich
Sent: Sunday, July 28, 2019 8:52 PM
To: [email protected]
Subject: [Jprogramming] A bit-twisting puzzle

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://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.avg.com&amp;data=02%7C01%7C%7C6648bb4819c44e85507908d713beebdb%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636999583026265298&amp;sdata=QV3cOJXlELCbYQkGW%2B2ifVLNLmlodT8sjNHBDHLOGlM%3D&amp;reserved=0

----------------------------------------------------------------------
For information about J forums see 
https://eur04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&amp;data=02%7C01%7C%7C6648bb4819c44e85507908d713beebdb%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636999583026265298&amp;sdata=hDyVKQTdQMAp4zgKQ%2BHUU7jEeu4AWT3JwhV37Gn7aYQ%3D&amp;reserved=0
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to