JasPer 4.2.8
 
Loading...
Searching...
No Matches
jas_compiler.h
Go to the documentation of this file.
1/* __START_OF_JASPER_LICENSE__
2 *
3 * JasPer License Version 2.0
4 *
5 * Copyright (c) 2001-2006 Michael David Adams
6 * Copyright (c) 1999-2000 Image Power, Inc.
7 * Copyright (c) 1999-2000 The University of British Columbia
8 *
9 * All rights reserved.
10 *
11 * Permission is hereby granted, free of charge, to any person (the
12 * "User") obtaining a copy of this software and associated documentation
13 * files (the "Software"), to deal in the Software without restriction,
14 * including without limitation the rights to use, copy, modify, merge,
15 * publish, distribute, and/or sell copies of the Software, and to permit
16 * persons to whom the Software is furnished to do so, subject to the
17 * following conditions:
18 *
19 * 1. The above copyright notices and this permission notice (which
20 * includes the disclaimer below) shall be included in all copies or
21 * substantial portions of the Software.
22 *
23 * 2. The name of a copyright holder shall not be used to endorse or
24 * promote products derived from the Software without specific prior
25 * written permission.
26 *
27 * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
28 * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER
29 * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
30 * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
31 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
32 * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO
33 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
34 * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
35 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
36 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
37 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE
38 * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE
39 * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.
40 * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS
41 * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL
42 * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS
43 * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE
44 * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE
45 * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL
46 * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,
47 * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL
48 * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH
49 * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,
50 * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH
51 * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY
52 * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
53 *
54 * __END_OF_JASPER_LICENSE__
55 */
56
62#ifndef JAS_COMPILER_H
63#define JAS_COMPILER_H
64
65/* The configuration header file should be included first. */
66#include <jasper/jas_config.h>
67
68#ifdef _MSC_VER
69# ifndef __cplusplus
70# undef inline
71# define inline __inline
72# endif
73#endif
74
75#if defined(__GNUC__)
76# define JAS_DEPRECATED __attribute__((deprecated))
77#else
78# define JAS_DEPRECATED
79#endif
80
81#if defined(__GNUC__)
82# define JAS_ATTRIBUTE_CONST __attribute__((const))
83#else
84# define JAS_ATTRIBUTE_CONST
85#endif
86
87#if defined(__GNUC__)
88# define JAS_ATTRIBUTE_PURE __attribute__((pure))
89#else
90# define JAS_ATTRIBUTE_PURE
91#endif
92
93#if defined(__GNUC__)
94# define JAS_FORCE_INLINE inline __attribute__((always_inline))
95#else
96# define JAS_FORCE_INLINE inline
97#endif
98
99#if defined(__GNUC__)
100# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
101# define JAS_UNREACHABLE() __builtin_unreachable()
102# else
103# define JAS_UNREACHABLE()
104# endif
105#elif defined(__clang__)
106# define JAS_UNREACHABLE() __builtin_unreachable()
107#elif defined(_MSC_VER)
108# define JAS_UNREACHABLE() __assume(0)
109#else
110# define JAS_UNREACHABLE()
111#endif
112
113#if defined(__GNUC__)
114# define JAS_LIKELY(x) __builtin_expect (!!(x), 1)
115#else
116# define JAS_LIKELY(x) (x)
117#endif
118
119#if defined(__GNUC__)
120# define JAS_UNLIKELY(x) __builtin_expect (!!(x), 0)
121#else
122# define JAS_UNLIKELY(x) (x)
123#endif
124
125#if defined(__GNUC__) && __GNUC__ >= 6
126# define JAS_ATTRIBUTE_DISABLE_UBSAN \
127 __attribute__((no_sanitize_undefined))
128#elif defined(__clang__)
129# define JAS_ATTRIBUTE_DISABLE_UBSAN \
130 __attribute__((no_sanitize("undefined")))
131#else
132# define JAS_ATTRIBUTE_DISABLE_UBSAN
133#endif
134
135#ifdef __has_builtin
136#define jas_has_builtin(x) __has_builtin(x)
137#else
138#define jas_has_builtin(x) 0
139#endif
140
145#define JAS_UNUSED(x) ((void) x)
146
147#endif