1 | /* |
1 | /* |
2 | * libecb |
2 | * libecb - http://software.schmorp.de/pkg/libecb |
3 | * |
3 | * |
4 | * Copyright (©) 2009-2011 Marc Alexander Lehmann |
4 | * Copyright (©) 2009-2011 Marc Alexander Lehmann |
5 | * Copyright (©) 2011 Emanuele Giaquinta |
5 | * Copyright (©) 2011 Emanuele Giaquinta |
6 | * All rights reserved. |
6 | * All rights reserved. |
7 | * |
7 | * |
… | |
… | |
32 | |
32 | |
33 | #include <inttypes.h> |
33 | #include <inttypes.h> |
34 | |
34 | |
35 | /* many compilers define _GNUC_ to some versions but then only implement |
35 | /* many compilers define _GNUC_ to some versions but then only implement |
36 | * what their idiot authors think are the "more important" extensions, |
36 | * what their idiot authors think are the "more important" extensions, |
37 | * causing enourmous grief for some better fake benchmark numbers or so. |
37 | * causing enourmous grief in return for some better fake benchmark numbers. |
|
|
38 | * or so. |
38 | * we try to detect these and simply assume they are not gcc - if they have |
39 | * we try to detect these and simply assume they are not gcc - if they have |
39 | * an issue with that they should have done it right in the first place. |
40 | * an issue with that they should have done it right in the first place. |
40 | */ |
41 | */ |
41 | #ifndef ECB_GCC_VERSION |
42 | #ifndef ECB_GCC_VERSION |
42 | # if defined(__INTEL_COMPILER) || defined(__SUNPRO_C) || defined(__llvm__) |
43 | # if defined(__INTEL_COMPILER) || defined(__SUNPRO_C) || defined(__llvm__) |
… | |
… | |
150 | |
151 | |
151 | #if ECB_GCC_VERSION(4,5) |
152 | #if ECB_GCC_VERSION(4,5) |
152 | # define ecb_unreachable() __builtin_unreachable () |
153 | # define ecb_unreachable() __builtin_unreachable () |
153 | #else |
154 | #else |
154 | /* this seems to work fine, but gcc always emits a warning for it :/ */ |
155 | /* this seems to work fine, but gcc always emits a warning for it :/ */ |
155 | ECB_HEADER_INLINE void ecb_unreachable (void) ecb_attribute ((noreturn)); |
156 | ECB_HEADER_INLINE void ecb_unreachable (void) ecb_noreturn; |
156 | ECB_HEADER_INLINE void ecb_unreachable (void) { } |
157 | ECB_HEADER_INLINE void ecb_unreachable (void) { } |
157 | #endif |
158 | #endif |
158 | |
159 | |
159 | ECB_HEADER_INLINE unsigned char ecb_byteorder_helper () ecb_const; |
160 | ECB_HEADER_INLINE unsigned char ecb_byteorder_helper () ecb_const; |
160 | ECB_HEADER_INLINE unsigned char |
161 | ECB_HEADER_INLINE unsigned char |