blob: f69c7ec0dac427f13fdd1396a6a483617b4c3484 [file] [log] [blame]
Thaminda Edirisooriya31f05212015-08-26 12:22:29 -07001/*
2 * Copyright (c) 2013, The Regents of the University of California (Regents).
3 * All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * 3. Neither the name of the Regents nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
17 * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
18 * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
19 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20 *
21 * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
24 * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
25 * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
26 */
27
28#ifndef _BITS_H
29#define _BITS_H
30
31#define CONST_POPCOUNT2(x) ((((x) >> 0) & 1) + (((x) >> 1) & 1))
32#define CONST_POPCOUNT4(x) (CONST_POPCOUNT2(x) + CONST_POPCOUNT2((x)>>2))
33#define CONST_POPCOUNT8(x) (CONST_POPCOUNT4(x) + CONST_POPCOUNT4((x)>>4))
34#define CONST_POPCOUNT16(x) (CONST_POPCOUNT8(x) + CONST_POPCOUNT8((x)>>8))
35#define CONST_POPCOUNT32(x) (CONST_POPCOUNT16(x) + CONST_POPCOUNT16((x)>>16))
36#define CONST_POPCOUNT64(x) (CONST_POPCOUNT32(x) + CONST_POPCOUNT32((x)>>32))
37#define CONST_POPCOUNT(x) CONST_POPCOUNT64(x)
38
39#define CONST_CTZ2(x) CONST_POPCOUNT2(((x) & -(x))-1)
40#define CONST_CTZ4(x) CONST_POPCOUNT4(((x) & -(x))-1)
41#define CONST_CTZ8(x) CONST_POPCOUNT8(((x) & -(x))-1)
42#define CONST_CTZ16(x) CONST_POPCOUNT16(((x) & -(x))-1)
43#define CONST_CTZ32(x) CONST_POPCOUNT32(((x) & -(x))-1)
44#define CONST_CTZ64(x) CONST_POPCOUNT64(((x) & -(x))-1)
45#define CONST_CTZ(x) CONST_CTZ64(x)
46
47#define STR(x) XSTR(x)
48#define XSTR(x) #x
49
50# define SLL32 sllw
51# define STORE sd
52# define LOAD ld
53# define LOG_REGBYTES 3
54
55#define REGBYTES (1 << LOG_REGBYTES)
56
57#endif