1 /*
2 Copyright Rene Rivera 2008-2015
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_ARCHITECTURE_SUPERH_H
9 #define BOOST_PREDEF_ARCHITECTURE_SUPERH_H
10 
11 #include <boost/predef/version_number.h>
12 #include <boost/predef/make.h>
13 
14 /* tag::reference[]
15 = `BOOST_ARCH_SH`
16 
17 http://en.wikipedia.org/wiki/SuperH[SuperH] architecture:
18 If available versions [1-5] are specifically detected.
19 
20 [options="header"]
21 |===
22 | {predef_symbol} | {predef_version}
23 
24 | `+__sh__+` | {predef_detection}
25 
26 | `+__SH5__+` | 5.0.0
27 | `+__SH4__+` | 4.0.0
28 | `+__sh3__+` | 3.0.0
29 | `+__SH3__+` | 3.0.0
30 | `+__sh2__+` | 2.0.0
31 | `+__sh1__+` | 1.0.0
32 |===
33 */ // end::reference[]
34 
35 #define BOOST_ARCH_SH BOOST_VERSION_NUMBER_NOT_AVAILABLE
36 
37 #if defined(__sh__)
38 #   undef BOOST_ARCH_SH
39 #   if !defined(BOOST_ARCH_SH) && (defined(__SH5__))
40 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(5,0,0)
41 #   endif
42 #   if !defined(BOOST_ARCH_SH) && (defined(__SH4__))
43 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(4,0,0)
44 #   endif
45 #   if !defined(BOOST_ARCH_SH) && (defined(__sh3__) || defined(__SH3__))
46 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(3,0,0)
47 #   endif
48 #   if !defined(BOOST_ARCH_SH) && (defined(__sh2__))
49 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(2,0,0)
50 #   endif
51 #   if !defined(BOOST_ARCH_SH) && (defined(__sh1__))
52 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(1,0,0)
53 #   endif
54 #   if !defined(BOOST_ARCH_SH)
55 #       define BOOST_ARCH_SH BOOST_VERSION_NUMBER_AVAILABLE
56 #   endif
57 #endif
58 
59 #if BOOST_ARCH_SH
60 #   define BOOST_ARCH_SH_AVAILABLE
61 #endif
62 
63 #if BOOST_ARCH_SH
64 #   if BOOST_ARCH_SH >= BOOST_VERSION_NUMBER(5,0,0)
65 #       undef BOOST_ARCH_WORD_BITS_64
66 #       define BOOST_ARCH_WORD_BITS_64 BOOST_VERSION_NUMBER_AVAILABLE
67 #   elif BOOST_ARCH_SH >= BOOST_VERSION_NUMBER(3,0,0)
68 #       undef BOOST_ARCH_WORD_BITS_32
69 #       define BOOST_ARCH_WORD_BITS_32 BOOST_VERSION_NUMBER_AVAILABLE
70 #   else
71 #       undef BOOST_ARCH_WORD_BITS_16
72 #       define BOOST_ARCH_WORD_BITS_16 BOOST_VERSION_NUMBER_AVAILABLE
73 #   endif
74 #endif
75 
76 #define BOOST_ARCH_SH_NAME "SuperH"
77 
78 #endif
79 
80 #include <boost/predef/detail/test.h>
81 BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SH,BOOST_ARCH_SH_NAME)
82