Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static unsigned int bit_mob0(const UINT64 p1,const UINT64 p0){// same as bitmob, only slower. But proven correct - only used to validate bitmob.
- UINT64 fl1,fr1,ml1,mr1,s1,t;
- fl1=p1|p0&p1<<8; fr1=p1|p0&p1>>8;
- ml1=p0&p0<<8; mr1=p0&p0>>8;
- fl1|=ml1&fl1<<16; fr1|=mr1&fr1>>16;
- ml1&=ml1<<16; mr1&=mr1>>16;
- fl1|=ml1&fl1<<32; fr1|=mr1&fr1>>32;
- t=(fl1&p0)<<8 | (fr1&p0)>>8;
- s1=p0&0x7E7E7E7E7E7E7E7E; // hor
- fl1=p1|s1&p1<<1; fr1=p1|s1&p1>>1;
- ml1=s1&s1<<1; mr1=s1&s1>>1;
- fl1|=ml1&fl1<<2; fr1|=mr1&fr1>>2;
- ml1&=ml1<<2; mr1&=mr1>>2;
- fl1|=ml1&fl1<<4; fr1|=mr1&fr1>>4;
- t|=(fl1&s1)<<1 | (fr1&s1)>>1;
- s1=p0&0x007E7E7E7E7E7E00; // diag1
- fl1=p1|s1&p1<<7; fr1=p1|s1&p1>>7;
- ml1=s1&s1<<7; mr1=s1&s1>>7;
- fl1|=ml1&fl1<<14; fr1|=mr1&fr1>>14;
- ml1&=ml1<<14; mr1&=mr1>>14;
- fl1|=ml1&fl1<<28; fr1|=mr1&fr1>>28;
- t|=(fl1&s1)<<7 | (fr1&s1)>>7;
- fl1=p1|s1&p1<<9; fr1=p1|s1&p1>>9; // diag2
- ml1=s1&s1<<9; mr1=s1&s1>>9;
- fl1|=ml1&fl1<<18; fr1|=mr1&fr1>>18;
- ml1&=ml1<<18; mr1&=mr1>>18;
- fl1|=ml1&fl1<<36; fr1|=mr1&fr1>>36;
- t|=(fl1&s1)<<9 | (fr1&s1)>>9;
- return((unsigned int)__popcnt64(t&(~(p0|p1))));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement