forgot to add files
[cparser] / builtins.h
1 /*
2  * This file is part of cparser.
3  * Copyright (C) 2007-2010 Matthias Braun <matze@braunis.de>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18  * 02111-1307, USA.
19  */
20 #ifndef BUILTINS_H
21 #define BUILTINS_H
22
23 /**
24  * GNU builtin or MS intrinsic functions.
25  */
26 typedef enum builtin_kind_t {
27         bk_none = 0,
28         bk_gnu_builtin_alloca,
29         bk_gnu_builtin_huge_val,
30         bk_gnu_builtin_huge_valf,
31         bk_gnu_builtin_huge_vall,
32         bk_gnu_builtin_inf,
33         bk_gnu_builtin_inff,
34         bk_gnu_builtin_infl,
35         bk_gnu_builtin_nan,
36         bk_gnu_builtin_nanf,
37         bk_gnu_builtin_nanl,
38         bk_gnu_builtin_va_end,
39         bk_gnu_builtin_expect,
40         bk_gnu_builtin_return_address,
41         bk_gnu_builtin_frame_address,
42         bk_gnu_builtin_ffs,
43         bk_gnu_builtin_clz,
44         bk_gnu_builtin_ctz,
45         bk_gnu_builtin_popcount,
46         bk_gnu_builtin_parity,
47         bk_gnu_builtin_prefetch,
48         bk_gnu_builtin_trap,
49         bk_gnu_builtin_object_size,
50         bk_gnu_builtin_abort,
51         bk_gnu_builtin_abs,
52         bk_gnu_builtin_labs,
53         bk_gnu_builtin_llabs,
54         bk_gnu_builtin_exit,
55         bk_gnu_builtin_malloc,
56         bk_gnu_builtin_memcmp,
57         bk_gnu_builtin_memcpy,
58         bk_gnu_builtin___memcpy_chk,
59         bk_gnu_builtin_memset,
60         bk_gnu_builtin_strlen,
61         bk_gnu_builtin_strcmp,
62         bk_gnu_builtin_strcpy,
63
64         bk_ms_rotl,
65         bk_ms_rotr,
66         bk_ms_rotl64,
67         bk_ms_rotr64,
68         bk_ms_byteswap_ushort,
69         bk_ms_byteswap_ulong,
70         bk_ms_byteswap_uint64,
71
72         bk_ms__debugbreak,
73         bk_ms_ReturnAddress,
74         bk_ms_AddressOfReturnAddress,
75         bk_ms__popcount,
76         bk_ms_enable,
77         bk_ms_disable,
78         bk_ms__inbyte,
79         bk_ms__inword,
80         bk_ms__indword,
81         bk_ms__outbyte,
82         bk_ms__outword,
83         bk_ms__outdword,
84         bk_ms__ud2,
85         bk_ms_BitScanForward,
86         bk_ms_BitScanReverse,
87         bk_ms_InterlockedExchange,
88         bk_ms_InterlockedExchange64,
89         bk_ms__readeflags,
90         bk_ms__writeeflags,
91 } builtin_kind_t;
92
93 /**
94  * Create predefined gnu builtins.
95  */
96 void create_gnu_builtins(void);
97
98 /**
99  * Create predefined MS intrinsics.
100  */
101 void create_microsoft_intrinsics(void);
102
103 /**
104  * Some of the gnu builtins are simply more elaborate declarations of
105  * library functions. Return the library function name so we can simply
106  * replace the builtins with these during code generation
107  */
108 entity_t *get_builtin_replacement(const entity_t *builtin_entity);
109
110 #endif