Rev 108 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
33 | pmbaty | 1 | /* last modified 01/18/09 */ |
2 | /* |
||
3 | ******************************************************************************* |
||
4 | * * |
||
5 | * This module is designed for the most efficient compiling, as it includes * |
||
6 | * all of the source files into one large wad so that the compiler can see * |
||
7 | * all function calls and inline whatever is appropriate. The includes are * |
||
8 | * loosely ordered so that the most common functions occur first, to help * |
||
9 | * with cache layout when the code is actually loaded. * |
||
10 | * * |
||
11 | ******************************************************************************* |
||
12 | */ |
||
154 | pmbaty | 13 | |
14 | #define TB_HAVE_THREADS |
||
15 | # ifdef TB_HAVE_THREADS |
||
16 | # ifndef _WIN32 // Pierre-Marie Baty -- fixed include guard |
||
17 | # define LOCK_T pthread_mutex_t |
||
18 | # define LOCK_INIT(x) pthread_mutex_init(&(x), NULL) |
||
19 | # define LOCK(x) pthread_mutex_lock(&(x)) |
||
20 | # define UNLOCK(x) pthread_mutex_unlock(&(x)) |
||
21 | # else |
||
22 | # define LOCK_T HANDLE |
||
23 | # define LOCK_INIT(x) do { x = CreateMutex(NULL, FALSE, NULL); } while (0) |
||
24 | # define LOCK(x) WaitForSingleObject(x, INFINITE) |
||
25 | # define UNLOCK(x) ReleaseMutex(x) |
||
26 | # endif |
||
27 | # else /* !TB_HAVE_THREADS */ |
||
28 | # define LOCK_T int |
||
29 | # define LOCK_INIT(x) |
||
30 | /* NOP */ |
||
31 | # define LOCK(x) |
||
32 | /* NOP */ |
||
33 | # define UNLOCK(x) |
||
34 | /* NOP */ |
||
35 | # endif |
||
36 | |||
37 | |||
38 | int __builtin_clzll (unsigned long long x) |
||
39 | { |
||
40 | // Returns the number of leading 0-bits in x, starting at the most significant bit position. |
||
41 | // If x is zero, the result is undefined. |
||
42 | // This uses a binary search (counting down) algorithm from Hacker's Delight. |
||
43 | |||
44 | unsigned long long y; |
||
45 | int n = 64; |
||
46 | |||
47 | y = x >> 32; if (y != 0) { n = n - 32; x = y; } |
||
48 | y = x >> 16; if (y != 0) { n = n - 16; x = y; } |
||
49 | y = x >> 8; if (y != 0) { n = n - 8; x = y; } |
||
50 | y = x >> 4; if (y != 0) { n = n - 4; x = y; } |
||
51 | y = x >> 2; if (y != 0) { n = n - 2; x = y; } |
||
52 | y = x >> 1; if (y != 0) return (n - 2); |
||
53 | |||
54 | return (n - (int) x); |
||
55 | } |
||
56 | |||
57 | |||
58 | int __builtin_ctzll (unsigned long long x) |
||
59 | { |
||
60 | // Returns the number of trailing 0-bits in x, starting at the least significant bit position. |
||
61 | // If x is zero, the result is undefined. |
||
62 | // This uses a binary search algorithm from Hacker's Delight. |
||
63 | |||
64 | int n = 1; |
||
65 | |||
66 | if ((x & 0x00000000FFFFFFFF) == 0) { n = n + 32; x = x >> 32; } |
||
67 | if ((x & 0x000000000000FFFF) == 0) { n = n + 16; x = x >> 16; } |
||
68 | if ((x & 0x00000000000000FF) == 0) { n = n + 8; x = x >> 8; } |
||
69 | if ((x & 0x000000000000000F) == 0) { n = n + 4; x = x >> 4; } |
||
70 | if ((x & 0x0000000000000003) == 0) { n = n + 2; x = x >> 2; } |
||
71 | |||
72 | return (n - (x & 1)); |
||
73 | } |
||
74 | |||
75 | |||
76 | int __builtin_popcountll (unsigned long long x) |
||
77 | { |
||
78 | // counts the number of 1-bits in x |
||
79 | |||
80 | x = (x & 0x5555555555555555ULL) + ((x >> 1) & 0x5555555555555555ULL); |
||
81 | x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL); |
||
82 | x = (x & 0x0F0F0F0F0F0F0F0FULL) + ((x >> 4) & 0x0F0F0F0F0F0F0F0FULL); |
||
83 | return (int) ((x * 0x0101010101010101ULL) >> 56); |
||
84 | } |
||
85 | |||
86 | |||
87 | #define __builtin_bswap32 _byteswap_ulong |
||
88 | |||
89 | |||
108 | pmbaty | 90 | #include "iterate.c" |
33 | pmbaty | 91 | #include "search.c" |
92 | #include "movgen.c" |
||
93 | #include "make.c" |
||
94 | #include "unmake.c" |
||
95 | #include "thread.c" |
||
96 | #include "repeat.c" |
||
97 | #include "next.c" |
||
108 | pmbaty | 98 | #include "history.c" |
33 | pmbaty | 99 | #include "quiesce.c" |
100 | #include "evaluate.c" |
||
101 | #include "hash.c" |
||
102 | #include "attacks.c" |
||
108 | pmbaty | 103 | #include "see.c" |
33 | pmbaty | 104 | #include "utility.c" |
154 | pmbaty | 105 | #include "tbprobe.c" |
33 | pmbaty | 106 | #include "book.c" |
108 | pmbaty | 107 | #include "autotune.c" |
33 | pmbaty | 108 | #include "analyze.c" |
109 | #include "annotate.c" |
||
110 | #include "bench.c" |
||
111 | #include "data.c" |
||
112 | #include "drawn.c" |
||
113 | #include "edit.c" |
||
114 | #include "epd.c" |
||
115 | #include "epdglue.c" |
||
116 | #include "evtest.c" |
||
117 | #include "init.c" |
||
118 | #include "input.c" |
||
119 | #include "interrupt.c" |
||
120 | #include "learn.c" |
||
121 | #include "main.c" |
||
122 | #include "option.c" |
||
123 | #include "output.c" |
||
124 | #include "ponder.c" |
||
125 | #include "resign.c" |
||
126 | #include "root.c" |
||
127 | #include "setboard.c" |
||
128 | #include "test.c" |
||
129 | #include "time.c" |
||
130 | #include "validate.c" |