1/*
2Copyright Rene Ferdinand Rivera Morell 2020-2021
3Distributed under the Boost Software License, Version 1.0.
4(See accompanying file LICENSE_1_0.txt or copy at
5http://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
18Detects the native word size, in bits, for the current architecture. There are
19two 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
27They allow for both single checks and direct use of the size in code.
28
29NOTE: The word size is determined manually on each architecture. Hence use of
30the `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>
64BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS,BOOST_ARCH_WORD_BITS_NAME)
65
66#include <boost/predef/detail/test.h>
67BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_16,BOOST_ARCH_WORD_BITS_16_NAME)
68
69#include <boost/predef/detail/test.h>
70BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_32,BOOST_ARCH_WORD_BITS_32_NAME)
71
72#include <boost/predef/detail/test.h>
73BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_WORD_BITS_64,BOOST_ARCH_WORD_BITS_64_NAME)
74