Advertisement
maujogador

valBitmob

Dec 14th, 2015
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.18 KB | None | 0 0
  1. static unsigned int bit_mob0(const UINT64 p1,const UINT64 p0){// same as bitmob, only slower. But proven correct - only used to validate bitmob.
  2.     UINT64 fl1,fr1,ml1,mr1,s1,t;
  3.     fl1=p1|p0&p1<<8; fr1=p1|p0&p1>>8;
  4.     ml1=p0&p0<<8; mr1=p0&p0>>8;    
  5.     fl1|=ml1&fl1<<16; fr1|=mr1&fr1>>16;
  6.     ml1&=ml1<<16; mr1&=mr1>>16;
  7.     fl1|=ml1&fl1<<32; fr1|=mr1&fr1>>32;
  8.     t=(fl1&p0)<<8 | (fr1&p0)>>8;
  9.     s1=p0&0x7E7E7E7E7E7E7E7E; // hor
  10.     fl1=p1|s1&p1<<1; fr1=p1|s1&p1>>1;
  11.     ml1=s1&s1<<1; mr1=s1&s1>>1;
  12.     fl1|=ml1&fl1<<2; fr1|=mr1&fr1>>2;
  13.     ml1&=ml1<<2; mr1&=mr1>>2;
  14.     fl1|=ml1&fl1<<4; fr1|=mr1&fr1>>4;
  15.     t|=(fl1&s1)<<1 | (fr1&s1)>>1;
  16.     s1=p0&0x007E7E7E7E7E7E00; // diag1
  17.     fl1=p1|s1&p1<<7; fr1=p1|s1&p1>>7;
  18.     ml1=s1&s1<<7; mr1=s1&s1>>7;
  19.     fl1|=ml1&fl1<<14; fr1|=mr1&fr1>>14;
  20.     ml1&=ml1<<14; mr1&=mr1>>14;
  21.     fl1|=ml1&fl1<<28; fr1|=mr1&fr1>>28;
  22.     t|=(fl1&s1)<<7 | (fr1&s1)>>7;
  23.     fl1=p1|s1&p1<<9; fr1=p1|s1&p1>>9; // diag2
  24.     ml1=s1&s1<<9; mr1=s1&s1>>9;
  25.     fl1|=ml1&fl1<<18; fr1|=mr1&fr1>>18;
  26.     ml1&=ml1<<18; mr1&=mr1>>18;
  27.     fl1|=ml1&fl1<<36; fr1|=mr1&fr1>>36;
  28.     t|=(fl1&s1)<<9 | (fr1&s1)>>9;
  29.     return((unsigned int)__popcnt64(t&(~(p0|p1))));
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement