OSDN Git Service

マルチプロジェクト型にレポジトリを変更するために移動した
[toppersasp4lpc/asp.git] / asp / arch / gcc / tool_stddef.h
1 /*
2  *  TOPPERS Software
3  *      Toyohashi Open Platform for Embedded Real-Time Systems
4  * 
5  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6  *                              Toyohashi Univ. of Technology, JAPAN
7  *  Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
8  *              Graduate School of Information Science, Nagoya Univ., JAPAN
9  * 
10  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15  *      スコード中に含まれていること.
16  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19  *      の無保証規定を掲載すること.
20  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22  *      と.
23  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
25  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26  *        報告すること.
27  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31  *      免責すること.
32  * 
33  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37  *  の責任を負わない.
38  * 
39  *  @(#) $Id: tool_stddef.h 819 2008-03-18 12:58:50Z hiro $
40  */
41
42 /*
43  *              t_stddef.hの開発環境依存部(GCC用)
44  */
45
46 #ifndef TOPPERS_TOOL_STDDEF_H
47 #define TOPPERS_TOOL_STDDEF_H
48
49 /*
50  *  コンパイラの拡張機能のためのマクロ定義
51  */
52 #ifndef __cplusplus                                     /* C++にはinline がある */
53 #if __STDC_VERSION__ < 199901L          /* C99にはinline がある */
54 #define inline  __inline__                      /* インライン関数 */
55 #endif /* __STDC_VERSION__ < 199901L */
56 #endif /* __cplusplus */
57
58 #define Inline  static __inline__       /* インライン関数 */
59
60 #ifndef __cplusplus                                     /* C++にはasmがある */
61 #define asm             __asm__                         /* インラインアセンブラ */
62 #endif /* __cplusplus */
63
64 #define Asm             __asm__ volatile        /* インラインアセンブラ(最適化抑止)*/
65
66 #define NoReturn        __attribute__((__noreturn__))
67                                                                         /* リターンしない関数 */
68
69 /*
70  *  開発環境の標準インクルードファイルの利用
71  *
72  *  NULLの定義をstddef.hから,INT_MAX,INT_MIN,UINT_MAX,LONG_MAX,
73  *  LONG_MIN,ULONG_MAX,CHAR_BITの定義をlimits.hから取り込む.
74  *
75  *  C++/EC++では,標準仕様上はこれらのインクルードファイルが用意されて
76  *  いるとは限らないので注意が必要である(ほとんどの開発環境で用意され
77  *  ている).
78  */
79 #ifndef TOPPERS_MACRO_ONLY
80 #include <stddef.h>
81 #include <limits.h>
82 #endif /* TOPPERS_MACRO_ONLY */
83
84 /*
85  *  stdint.hの代用となる定義
86  *
87  *  開発環境にstdint.hが用意されておらず,各整数型のサイズがあるパター
88  *  ンに当てはまる場合に,stdint.hの代用となる定義を与える.
89  *
90  *  TOPPERS_STDINT_TYPE1: char/short/int/long longのビット長がそれぞれ
91  *                        8/16/32/64ビットで,ポインタのビット長がlong
92  *                        のビット長と一致する場合
93  */
94 #ifdef TOPPERS_STDINT_TYPE1
95
96 /*
97  *  コンパイラ依存のデータ型の定義
98  */
99 #ifndef TOPPERS_MACRO_ONLY
100
101 typedef signed char                     int8_t;         /* 符号付き8ビット整数 */
102 typedef unsigned char           uint8_t;        /* 符号無し8ビット整数 */
103
104 typedef signed short            int16_t;        /* 符号付き16ビット整数 */
105 typedef unsigned short          uint16_t;       /* 符号無し16ビット整数 */
106
107 typedef signed int                      int32_t;        /* 符号付き32ビット整数 */
108 typedef unsigned int            uint32_t;       /* 符号無し32ビット整数 */
109
110 typedef signed long long        int64_t;        /* 符号付き64ビット整数 */
111 typedef unsigned long long      uint64_t;       /* 符号無し64ビット整数 */
112
113 typedef int8_t                          int_least8_t;   /* 8ビット以上の符号付き整数 */
114 typedef uint8_t                         uint_least8_t;  /* 8ビット以上の符号無し整数 */
115
116 typedef long                            intptr_t;       /* ポインタを格納できる符号付き整数 */
117 typedef unsigned long           uintptr_t;      /* ポインタを格納できる符号無し整数 */
118
119 #endif /* TOPPERS_MACRO_ONLY */
120
121 /*
122  *  コンパイラ依存のデータ型の整数定数を作るマクロ
123  */
124 #ifndef INT8_C
125 #define INT8_C(val)                     (val)
126 #endif /* INT8_C */
127
128 #ifndef UINT8_C
129 #define UINT8_C(val)            (val ## U)
130 #endif /* UINT8_C */
131
132 #ifndef INT16_C
133 #define INT16_C(val)            (val)
134 #endif /* INT16_C */
135
136 #ifndef UINT16_C
137 #define UINT16_C(val)           (val ## U)
138 #endif /* UINT16_C */
139
140 #ifndef INT32_C
141 #define INT32_C(val)            (val)
142 #endif /* INT32_C */
143
144 #ifndef UINT32_C
145 #define UINT32_C(val)           (val ## U)
146 #endif /* UINT32_C */
147
148 #ifndef INT64_C
149 #define INT64_C(val)            (val ## LL)
150 #endif /* INT64_C */
151
152 #ifndef UINT64_C
153 #define UINT64_C(val)           (val ## ULL)
154 #endif /* UINT64_C */
155
156 /*
157  *  コンパイラ依存のデータ型に格納できる最大値と最小値の定義
158  */
159 #define INT8_MAX                        SCHAR_MAX
160 #define INT8_MIN                        SCHAR_MIN
161 #define UINT8_MAX                       UCHAR_MAX
162
163 #define INT16_MAX                       SHRT_MAX
164 #define INT16_MIN                       SHRT_MIN
165 #define UINT16_MAX                      USHRT_MAX
166
167 #define INT32_MAX                       INT_MAX
168 #define INT32_MIN                       INT_MIN
169 #define UINT32_MAX                      UINT_MAX
170
171 #define INT64_MAX                       LLONG_MAX
172 #define INT64_MIN                       LLONG_MIN
173 #define UINT64_MAX                      ULLONG_MAX
174
175 #define INT_LEAST8_MAX          INT8_MAX
176 #define INT_LEAST8_MIN          INT8_MIN
177 #define UINT_LEAST8_MAX         INT8_MAX
178
179 #endif /* TOPPERS_STDINT_TYPE1 */
180
181 /*
182  *  浮動小数点型に関する定義
183  *
184  *  TOPPERS_STDFLOAT_TYPE1: floatがIEEE754準拠の単精度浮動小数点数,
185  *                                                      doubleが倍精度浮動小数点数の場合
186  */
187 #ifdef TOPPERS_STDFLOAT_TYPE1
188 #ifndef TOPPERS_MACRO_ONLY
189
190 typedef float           float32_t;                      /* IEEE754準拠の単精度浮動小数点数 */
191 typedef double          double64_t;                     /* IEEE754準拠の倍精度浮動小数点数 */
192
193 #endif /* TOPPERS_MACRO_ONLY */
194
195 #define FLOAT32_MIN             1.17549435e-38F
196 #define FLOAT32_MAX             3.40282347e+38F
197 #define DOUBLE64_MIN    2.2250738585072014e-308
198 #define DOUBLE64_MAX    1.7976931348623157e+308
199
200 #endif /* TOPPERS_STDFLOAT_TYPE1 */
201 #endif /* TOPPERS_TOOL_STDDEF_H */