mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Noticed recently that bitcount16() isn't 16-bit clean due to signed
shift right. It doesn't actually matter in the current code since the input word only ever uses the bottom 9 bits, but if I ever extended Mines to work in a triangular grid then all 16 bits might be required. Fix this now, while I'm cleaning things up, so that it won't bite me unexpectedly in future. [originally from svn r6415]
This commit is contained in:
6
mines.c
6
mines.c
@ -275,14 +275,16 @@ static char *validate_params(game_params *params, int full)
|
||||
/*
|
||||
* Count the bits in a word. Only needs to cope with 16 bits.
|
||||
*/
|
||||
static int bitcount16(int word)
|
||||
static int bitcount16(int inword)
|
||||
{
|
||||
unsigned int word = inword;
|
||||
|
||||
word = ((word & 0xAAAA) >> 1) + (word & 0x5555);
|
||||
word = ((word & 0xCCCC) >> 2) + (word & 0x3333);
|
||||
word = ((word & 0xF0F0) >> 4) + (word & 0x0F0F);
|
||||
word = ((word & 0xFF00) >> 8) + (word & 0x00FF);
|
||||
|
||||
return word;
|
||||
return (int)word;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user