comparison gcc/config/avr/builtins.def @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* Copyright (C) 2012-2017 Free Software Foundation, Inc.
2
3 This file is part of GCC.
4
5 GCC is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 3, or (at your option) any later
8 version.
9
10 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GCC; see the file COPYING3. If not see
17 <http://www.gnu.org/licenses/>. */
18
19 /* This file contains the definitions and documentation for the
20 builtins defined in the AVR part of the GNU compiler.
21 Befor including this file, define a macro
22
23 DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, LIBNAME)
24
25 NAME: `__builtin_avr_name' will be the user-level name of the builtin.
26 `AVR_BUILTIN_NAME' will be the internal builtin's id.
27 N_ARGS: Number of input arguments. If special treatment is needed,
28 set to -1 and handle it by hand, see avr.c:avr_expand_builtin().
29 TYPE: A tree node describing the prototype of the built-in.
30 ICODE: Name of attached insn or expander. If special treatment in avr.c
31 is needed to expand the built-in, use `nothing'.
32 LIBNAME: Name of the attached implementation in libgcc which is used if
33 the builtin cannot be folded away and there is no insn. */
34
35 /* Mapped to respective instruction. */
36
37 DEF_BUILTIN (NOP, -1, void_ftype_void, nothing, NULL)
38 DEF_BUILTIN (SEI, 0, void_ftype_void, enable_interrupt, NULL)
39 DEF_BUILTIN (CLI, 0, void_ftype_void, disable_interrupt, NULL)
40 DEF_BUILTIN (WDR, 0, void_ftype_void, wdr, NULL)
41 DEF_BUILTIN (SLEEP, 0, void_ftype_void, sleep, NULL)
42
43 /* Mapped to respective instruction but might also be folded away
44 or emit as libgcc call if ISA does not provide the instruction. */
45
46 DEF_BUILTIN (SWAP, 1, uchar_ftype_uchar, rotlqi3_4, NULL)
47 DEF_BUILTIN (FMUL, 2, uint_ftype_uchar_uchar, fmul, NULL)
48 DEF_BUILTIN (FMULS, 2, int_ftype_char_char, fmuls, NULL)
49 DEF_BUILTIN (FMULSU, 2, int_ftype_char_uchar, fmulsu, NULL)
50
51 /* More complex stuff that cannot be mapped 1:1 to an instruction. */
52
53 DEF_BUILTIN (DELAY_CYCLES, -1, void_ftype_ulong, nothing, NULL)
54 DEF_BUILTIN (NOPS, -1, void_ftype_ulong, nothing, NULL)
55 DEF_BUILTIN (INSERT_BITS, 3, uchar_ftype_ulong_uchar_uchar, insert_bits, NULL)
56 DEF_BUILTIN (FLASH_SEGMENT, 1, char_ftype_const_memx_ptr, flash_segment, NULL)
57
58 /* ISO/IEC TR 18037 "Embedded C"
59 The following builtins are undocumented and used by stdfix.h. */
60
61 /* 7.18a.6 The fixed-point intrinsic functions. */
62
63 /* 7.18a.6.2 The fixed-point absolute value functions. */
64
65 DEF_BUILTIN (ABSHR, 1, hr_ftype_hr, ssabsqq2, "__ssabs_1")
66 DEF_BUILTIN (ABSR, 1, nr_ftype_nr, ssabshq2, "__ssabs_2")
67 DEF_BUILTIN (ABSLR, 1, lr_ftype_lr, ssabssq2, "__ssabs_4")
68 DEF_BUILTIN (ABSLLR, -1, llr_ftype_llr, nothing, "__ssabsdq2") // GCC extension
69
70 DEF_BUILTIN (ABSHK, 1, hk_ftype_hk, ssabsha2, "__ssabs_2")
71 DEF_BUILTIN (ABSK, 1, nk_ftype_nk, ssabssa2, "__ssabs_4")
72 DEF_BUILTIN (ABSLK, -1, lk_ftype_lk, nothing, "__ssabsda2")
73 DEF_BUILTIN (ABSLLK, -1, llk_ftype_llk, nothing, "__ssabsta2") // GCC extension
74
75 /* 7.18a.6.3 The fixed-point round functions. */
76
77 DEF_BUILTIN (ROUNDHR, 2, hr_ftype_hr_int, roundqq3, "__roundhr")
78 DEF_BUILTIN (ROUNDR, 2, nr_ftype_nr_int, roundhq3, "__roundr")
79 DEF_BUILTIN (ROUNDLR, 2, lr_ftype_lr_int, roundsq3, "__roundlr")
80 DEF_BUILTIN (ROUNDLLR, -1, llr_ftype_llr_int, nothing, "__rounddq3") // GCC extension
81
82 DEF_BUILTIN (ROUNDUHR, 2, uhr_ftype_uhr_int, rounduqq3, "__rounduhr")
83 DEF_BUILTIN (ROUNDUR, 2, unr_ftype_unr_int, rounduhq3, "__roundur")
84 DEF_BUILTIN (ROUNDULR, 2, ulr_ftype_ulr_int, roundusq3, "__roundulr")
85 DEF_BUILTIN (ROUNDULLR, -1, ullr_ftype_ullr_int, nothing, "__roundudq3") // GCC extension
86
87 DEF_BUILTIN (ROUNDHK, 2, hk_ftype_hk_int, roundha3, "__roundhk")
88 DEF_BUILTIN (ROUNDK, 2, nk_ftype_nk_int, roundsa3, "__roundk")
89 DEF_BUILTIN (ROUNDLK, -1, lk_ftype_lk_int, nothing, "__roundda3")
90 DEF_BUILTIN (ROUNDLLK, -1, llk_ftype_llk_int, nothing, "__roundta3") // GCC extension
91
92 DEF_BUILTIN (ROUNDUHK, 2, uhk_ftype_uhk_int, rounduha3, "__rounduhk")
93 DEF_BUILTIN (ROUNDUK, 2, unk_ftype_unk_int, roundusa3, "__rounduk")
94 DEF_BUILTIN (ROUNDULK, -1, ulk_ftype_ulk_int, nothing, "__rounduda3")
95 DEF_BUILTIN (ROUNDULLK, -1, ullk_ftype_ullk_int, nothing, "__rounduta3") // GCC extension
96
97 /* 7.18a.6.4 The fixed-point bit countls functions. */
98
99 DEF_BUILTIN (COUNTLSHR, -1, int_ftype_hr, nothing, "__countlsqi2")
100 DEF_BUILTIN (COUNTLSR, -1, int_ftype_nr, nothing, "__countlshi2")
101 DEF_BUILTIN (COUNTLSLR, -1, int_ftype_lr, nothing, "__countlssi2")
102 DEF_BUILTIN (COUNTLSLLR, -1, int_ftype_llr, nothing, "__countlsdi2") // GCC extension
103
104 DEF_BUILTIN (COUNTLSUHR, -1, int_ftype_uhr, nothing, "__countlsuqi2")
105 DEF_BUILTIN (COUNTLSUR, -1, int_ftype_unr, nothing, "__countlsuhi2")
106 DEF_BUILTIN (COUNTLSULR, -1, int_ftype_ulr, nothing, "__countlsusi2")
107 DEF_BUILTIN (COUNTLSULLR, -1, int_ftype_ullr, nothing, "__countlsudi2") // GCC extension
108
109 DEF_BUILTIN (COUNTLSHK, -1, int_ftype_hk, nothing, "__countlshi2")
110 DEF_BUILTIN (COUNTLSK, -1, int_ftype_nk, nothing, "__countlssi2")
111 DEF_BUILTIN (COUNTLSLK, -1, int_ftype_lk, nothing, "__countlsdi2")
112 DEF_BUILTIN (COUNTLSLLK, -1, int_ftype_llk, nothing, "__countlsdi2") // GCC extension
113
114 DEF_BUILTIN (COUNTLSUHK, -1, int_ftype_uhk, nothing, "__countlsuhi2")
115 DEF_BUILTIN (COUNTLSUK, -1, int_ftype_unk, nothing, "__countlsusi2")
116 DEF_BUILTIN (COUNTLSULK, -1, int_ftype_ulk, nothing, "__countlsudi2")
117 DEF_BUILTIN (COUNTLSULLK, -1, int_ftype_ullk, nothing, "__countlsudi2") // GCC extension
118
119 /* 7.18a.6.5 The bitwise fixed-point to integer conversion functions. */
120
121 DEF_BUILTIN (BITSHR, -1, inthr_ftype_hr, nothing, "__ret")
122 DEF_BUILTIN (BITSR, -1, intnr_ftype_nr, nothing, "__ret")
123 DEF_BUILTIN (BITSLR, -1, intlr_ftype_lr, nothing, "__ret")
124 DEF_BUILTIN (BITSLLR, -1, intllr_ftype_llr, nothing, "__ret") // GCC extension
125
126 DEF_BUILTIN (BITSUHR, -1, intuhr_ftype_uhr, nothing, "__ret")
127 DEF_BUILTIN (BITSUR, -1, intunr_ftype_unr, nothing, "__ret")
128 DEF_BUILTIN (BITSULR, -1, intulr_ftype_ulr, nothing, "__ret")
129 DEF_BUILTIN (BITSULLR, -1, intullr_ftype_ullr, nothing, "__ret") // GCC extension
130
131 DEF_BUILTIN (BITSHK, -1, inthk_ftype_hk, nothing, "__ret")
132 DEF_BUILTIN (BITSK, -1, intnk_ftype_nk, nothing, "__ret")
133 DEF_BUILTIN (BITSLK, -1, intlk_ftype_lk, nothing, "__ret")
134 DEF_BUILTIN (BITSLLK, -1, intllk_ftype_llk, nothing, "__ret") // GCC extension
135
136 DEF_BUILTIN (BITSUHK, -1, intuhk_ftype_uhk, nothing, "__ret")
137 DEF_BUILTIN (BITSUK, -1, intunk_ftype_unk, nothing, "__ret")
138 DEF_BUILTIN (BITSULK, -1, intulk_ftype_ulk, nothing, "__ret")
139 DEF_BUILTIN (BITSULLK, -1, intullk_ftype_ullk, nothing, "__ret") // GCC extension
140
141
142 /* 7.18a.6.6 The bitwise integer to fixed-point conversion functions. */
143
144 DEF_BUILTIN ( HRBITS, -1, hr_ftype_inthr, nothing, "__ret")
145 DEF_BUILTIN ( RBITS, -1, nr_ftype_intnr, nothing, "__ret")
146 DEF_BUILTIN ( LRBITS, -1, lr_ftype_intlr, nothing, "__ret")
147 DEF_BUILTIN ( LLRBITS, -1, llr_ftype_intllr, nothing, "__ret") // GCC extension
148
149 DEF_BUILTIN ( UHRBITS, -1, uhr_ftype_intuhr, nothing, "__ret")
150 DEF_BUILTIN ( URBITS, -1, unr_ftype_intunr, nothing, "__ret")
151 DEF_BUILTIN ( ULRBITS, -1, ulr_ftype_intulr, nothing, "__ret")
152 DEF_BUILTIN (ULLRBITS, -1, ullr_ftype_intullr, nothing, "__ret") // GCC extension
153
154 DEF_BUILTIN ( HKBITS, -1, hk_ftype_inthk, nothing, "__ret")
155 DEF_BUILTIN ( KBITS, -1, nk_ftype_intnk, nothing, "__ret")
156 DEF_BUILTIN ( LKBITS, -1, lk_ftype_intlk, nothing, "__ret")
157 DEF_BUILTIN ( LLKBITS, -1, llk_ftype_intllk, nothing, "__ret") // GCC extension
158
159 DEF_BUILTIN ( UHKBITS, -1, uhk_ftype_intuhk, nothing, "__ret")
160 DEF_BUILTIN ( UKBITS, -1, unk_ftype_intunk, nothing, "__ret")
161 DEF_BUILTIN ( ULKBITS, -1, ulk_ftype_intulk, nothing, "__ret")
162 DEF_BUILTIN (ULLKBITS, -1, ullk_ftype_intullk, nothing, "__ret") // GCC extension
163
164 /* Overloaded */
165
166 /* 7.18a.6.7 Type-generic fixed-point functions. */
167
168 DEF_BUILTIN (ABSFX, -1, void_ftype_void /* dummy */, nothing, NULL)
169 DEF_BUILTIN (ROUNDFX, -1, void_ftype_void /* dummy */, nothing, NULL)
170 DEF_BUILTIN (COUNTLSFX, -1, void_ftype_void /* dummy */, nothing, NULL)