1 /*
2 Copyright Rene Ferdinand Rivera Morell 2020-2021
3 Distributed under the Boost Software License, Version 1.0.
4 (See accompanying file LICENSE_1_0.txt or copy at
5 http://www.boost.org/LICENSE_1_0.txt)
6 */
7 
8 #ifndef BOOST_PREDEF_OTHER_WORD_SIZE_H
9 #define BOOST_PREDEF_OTHER_WORD_SIZE_H
10 
11 #include <boost/predef/architecture.h>
12 #include <boost/predef/version_number.h>
13 #include <boost/predef/make.h>
14 
15 /* tag::reference[]
16 = `BOOST_ARCH_WORD_BITS`
17 
18 Detects the native word size, in bits, for the current architecture. There are
19 two types of macros for this detection:
20 
21 * `BOOST_ARCH_WORD_BITS`, gives the number of word size bits
22   (16, 32, 64).
23 * `BOOST_ARCH_WORD_BITS_16`, `BOOST_ARCH_WORD_BITS_32`, and
24   `BOOST_ARCH_WORD_BITS_64`, indicate when the given word size is
25   detected.
26 
27 They allow for both single checks and direct use of the size in code.
28 
29 NOTE: The word size is determined manually on each architecture. Hence use of
30 the `wordsize.h` header will also include all the architecture headers.
31 
32 */ // end::reference[]
33 
34 #if !defined(BOOST_ARCH_WORD_BITS_64)
35 #   define BOOST_ARCH_WORD_BITS_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
36 #elif !defined(BOOST_ARCH_WORD_BITS)
37 #   define BOOST_ARCH_WORD_BITS 64
38 #endif
39 
40 #if !defined(BOOST_ARCH_WORD_BITS_32)
41 #   define BOOST_ARCH_WORD_BITS_32 BOOST_VERSION_NUMBER_NOT_AVAILABLE
42 #elif !defined(BOOST_ARCH_WORD_BITS)
43 #	  define BOOST_ARCH_WORD_BITS 32
44 #endif
45 
46 #if !defined(BOOST_ARCH_WORD_BITS_16)
47 #   define BOOST_ARCH_WORD_BITS_16 BOOST_VERSION_NUMBER_NOT_AVAILABLE
48 #elif !defined(BOOST_ARCH_WORD_BITS)
49 #   define BOOST_ARCH_WORD_BITS 16
50 #endif
51 
52 #if !defined(BOOST_ARCH_WORD_BITS)
53 #   define BOOST_ARCH_WORD_BITS 0
54 #endif
55 
56 #define BOOST_ARCH_WORD_BITS_NAME "Word Bits"
57 #define BOOST_ARCH_WORD_BITS_16_NAME "16-bit Word Size"
58 #define BOOST_ARCH_WORD_BITS_32_NAME "32-bit Word Size"
59 #define BOOST_ARCH_WORD_BITS_64_NAME "64-bit Word Size"
60 
61 #endif
62 
63 #include <boost/predef/detail/test.h>
64 BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS,BOOST_ARCH_WORD_BITS_NAME)
65 
66 #include <boost/predef/detail/test.h>
67 BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_16,BOOST_ARCH_WORD_BITS_16_NAME)
68 
69 #include <boost/predef/detail/test.h>
70 BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_32,BOOST_ARCH_WORD_BITS_32_NAME)
71 
72 #include <boost/predef/detail/test.h>
73 BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_64,BOOST_ARCH_WORD_BITS_64_NAME)
74