1 /* -*- mode: C -*-
2  *
3  * Copyright (c) 2008 The University of Utah
4  * All rights reserved.
5  *
6  * This file is part of `csmith', a random generator of C programs.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  *   * Redistributions of source code must retain the above copyright notice,
12  *     this list of conditions and the following disclaimer.
13  *
14  *   * Redistributions in binary form must reproduce the above copyright
15  *     notice, this list of conditions and the following disclaimer in the
16  *     documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef VOLATILE_RUNTIME_H
32 #define VOLATILE_RUNTIME_H
33 
34 /*****************************************************************************/
35 
36 #ifndef WRAP_VOLATILES
37 #  define WRAP_VOLATILES 0
38 #endif
39 
40 #if WRAP_VOLATILES
41 /*
42  * Wrap accesses to volatile variables with function calls.
43  */
44 #  include <stdint.h>
45 
46 #  define DECLARE_VOLATILE_WRAPPERS(type)						\
47 	type volatile_##type##_ptr_read(volatile type *p);			\
48 	volatile type *volatile_##type##_ptr_id(volatile type *p);
49 
50 DECLARE_VOLATILE_WRAPPERS(int8_t)
51 DECLARE_VOLATILE_WRAPPERS(int16_t)
52 DECLARE_VOLATILE_WRAPPERS(int32_t)
53 DECLARE_VOLATILE_WRAPPERS(int64_t)
54 DECLARE_VOLATILE_WRAPPERS(uint8_t)
55 DECLARE_VOLATILE_WRAPPERS(uint16_t)
56 DECLARE_VOLATILE_WRAPPERS(uint32_t)
57 DECLARE_VOLATILE_WRAPPERS(uint64_t)
58 
59 #  undef DECLARE_VOLATILE_WRAPPERS
60 
61 #  define VOL_LVAL(var, type)	(*(volatile_##type##_ptr_id(&(var))))
62 #  define VOL_RVAL(var, type)	(volatile_##type##_ptr_read(&(var)))
63 
64 #else
65 /*
66  * Access volatile variables directly.
67  */
68 #  define VOL_LVAL(var, type) (var)
69 #  define VOL_RVAL(var, type) (var)
70 
71 #endif /* WRAP_VOLATILES */
72 
73 /*****************************************************************************/
74 
75 #endif /* VOLATILE_RUNTIME_H */
76 
77 /*
78  * Local Variables:
79  * c-basic-offset: 4
80  * tab-width: 4
81  * End:
82  */
83 
84 /* End of file. */
85