lowercase move flags macros

This commit is contained in:
2024-03-17 17:33:48 +01:00
parent db38b507ff
commit 49302c7a60
4 changed files with 26 additions and 24 deletions

View File

@@ -79,7 +79,7 @@ bool pseudo_is_legal(const pos_t *pos, const move_t move)
* 5th relative rank. To do so, we create an occupation bb without * 5th relative rank. To do so, we create an occupation bb without
* the 2 pawns. * the 2 pawns.
*/ */
if (IS_CAPTURE(move) && PIECE(pos->board[to]) == EMPTY) { if (is_capture(move) && PIECE(pos->board[to]) == EMPTY) {
/* from rank bitboard */ /* from rank bitboard */
bitboard_t rank5 = bb_sqrank[from]; bitboard_t rank5 = bb_sqrank[from];
/* enemy rooks/queens on from rank */ /* enemy rooks/queens on from rank */

View File

@@ -109,7 +109,7 @@ char *move_str(char *dst, const move_t move, __unused const int flags)
int len; int len;
sprintf(dst, "%s%s%n", sq_to_string(from), sq_to_string(to), &len); sprintf(dst, "%s%s%n", sq_to_string(from), sq_to_string(to), &len);
if (IS_PROMOTION(move)) { if (is_promotion(move)) {
piece_t promoted = move_promoted(move); piece_t promoted = move_promoted(move);
sprintf(dst + len, "%s", piece_to_low(promoted)); sprintf(dst + len, "%s", piece_to_low(promoted));
} }

View File

@@ -23,14 +23,14 @@
* 1 0 5 3 8 7 5 4 2 1 6 5 0 * 1 0 5 3 8 7 5 4 2 1 6 5 0
* S UUUUUUU FFFFFF ccc ppp tttttt ffffff * S UUUUUUU FFFFFF ccc ppp tttttt ffffff
* *
* bits len off range type mask get desc * bits len off range type mask get desc
* ffffff 6 0 0-5 square_t 077 &63 from * ffffff 6 0 0-5 square_t 077 &077 from
* tttttt 6 6 6-11 square_t 07700 (>>6)&63 to * tttttt 6 6 6-11 square_t 07700 (>>6) &077 to
* ppp 3 12 12-14 piece_type_t 070000 (>>12)&7 promoted * ppp 3 12 12-14 piece_type_t 070000 (>>12) &07 promoted
* ccc 3 15 15-17 piece_type_t 0700000 (>>15)&7 captured * ccc 3 15 15-17 piece_type_t 0700000 (>>15) &07 captured
* FFFFFF 6 18 18-23 move_flags_t 077000000 (>>18)&63 N/A flags * FFFFFF 6 18 18-23 move_flags_t 077000000 (>>18) &077 N/A flags
* UUUUUUU 7 24 24-30 unused 017700000000 future usage * UUUUUUU 7 24 24-30 unused 017700000000 future usage
* S 1 31 31-31 - 020000000000 sign * S 1 31 31-31 - 020000000000 sign
*/ */
typedef s32 move_t; typedef s32 move_t;
@@ -47,8 +47,6 @@ enum {
}; };
typedef enum { typedef enum {
//M_INVALID = -1,
//M_START = 18,
M_CAPTURE = mask(0), M_CAPTURE = mask(0),
M_ENPASSANT = mask(1), M_ENPASSANT = mask(1),
M_PROMOTION = mask(2), M_PROMOTION = mask(2),
@@ -57,21 +55,12 @@ typedef enum {
M_CHECK = mask(6) /* maybe unknown/useless ? */ M_CHECK = mask(6) /* maybe unknown/useless ? */
} move_flags_t; } move_flags_t;
#define MOVE_FLAGS(m) ((m) >> M_OFF_FLAGS)
#define IS_CAPTURE(m) (MOVE_FLAGS(m) & M_CAPTURE)
#define IS_ENPASSANT(m) (MOVE_FLAGS(m) & M_ENPASSANT)
#define IS_PROMOTION(m) (MOVE_FLAGS(m) & M_PROMOTION)
#define IS_CASTLE(m) (MOVE_FLAGS(m) & (M_CASTLE_K | M_CASTLE_Q))
#define IS_CASTLE_K(m) (MOVE_FLAGS(m) & M_CASTLE_K)
#define IS_CASTLE_Q(m) (MOVE_FLAGS(m) & M_CASTLE_Q)
#define IS_CHECK(m) (MOVE_FLAGS(m) & M_CHECK)
#define MOVES_MAX 256 #define MOVES_MAX 256
typedef struct __movelist_s { typedef struct __movelist_s {
move_t move[MOVES_MAX]; move_t move[MOVES_MAX];
int nmoves; /* total moves (fill) */ int nmoves; /* total moves (fill) */
int curmove; /* current move (use) */ //int curmove; /* current move (use) */
} movelist_t; } movelist_t;
static inline square_t move_from(move_t move) static inline square_t move_from(move_t move)
@@ -94,6 +83,19 @@ static inline piece_type_t move_captured(move_t move)
return (move >> M_OFF_CAPT) & 07; return (move >> M_OFF_CAPT) & 07;
} }
static inline move_flags_t move_flags(move_t move)
{
return (move >> M_OFF_FLAGS) & 077;
}
#define is_capture(m) (move_flags(m) & M_CAPTURE)
#define is_enpassant(m) (move_flags(m) & M_ENPASSANT)
#define is_promotion(m) (move_flags(m) & M_PROMOTION)
#define is_castle(m) (move_flags(m) & (M_CASTLE_K | M_CASTLE_Q))
#define is_castle_K(m) (move_flags(m) & M_CASTLE_K)
#define is_castle_Q(m) (move_flags(m) & M_CASTLE_Q)
#define is_check(m) (move_flags(m) & M_CHECK)
static inline move_t move_make(square_t from, square_t to) static inline move_t move_make(square_t from, square_t to)
{ {
return (to << M_OFF_TO) | from; return (to << M_OFF_TO) | from;

View File

@@ -263,8 +263,8 @@ int main(int __unused ac, __unused char**av)
printf("M: "); printf("M: ");
moves_print(&legal, 0); moves_print(&legal, 0);
} else { } else {
printf("[%s]\n\tMoves (OK): ", fen); printf("[%s]: OK (%d Moves)\n", fen, legal.nmoves);
moves_print(&fishpos->moves, 0); //moves_print(&fishpos->moves, 0);
} }
//compare_moves(&fishpos->moves, &legal); //compare_moves(&fishpos->moves, &legal);
//} else { //} else {