1 /* Copyright (C
) 2012-2024 Free Software Foundation
, Inc.
3 This file is part of GCC.
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
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
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
/>.
*/
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
23 DEF_BUILTIN(NAME
, N_ARGS
, TYPE, ICODE
, LIBNAME
)
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.cc: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.cc
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.
*/
35 /* Mapped to respective instruction.
*/
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
)
43 /* Mapped to respective instruction but might also be folded away
44 or emit as libgcc call if ISA does not provide the instruction.
*/
46 DEF_BUILTIN (SWAP
, 1, uintQI_ftype_uintQI
, rotlqi3_4
, NULL
)
47 DEF_BUILTIN (FMUL
, 2, uintHI_ftype_uintQI_uintQI
, fmul
, NULL
)
48 DEF_BUILTIN (FMULS
, 2, intHI_ftype_intQI_intQI
, fmuls
, NULL
)
49 DEF_BUILTIN (FMULSU
, 2, intHI_ftype_intQI_uintQI
, fmulsu
, NULL
)
51 /* More complex stuff that cannot be mapped
1:1 to an instruction.
*/
53 DEF_BUILTIN (DELAY_CYCLES
, -1, void_ftype_uintSI
, nothing
, NULL
)
54 DEF_BUILTIN (NOPS
, -1, void_ftype_uintSI
, nothing
, NULL
)
55 DEF_BUILTIN (MASK1
, 2, uintQI_ftype_uintQI_uintQI
, gen_mask1
, NULL
)
56 DEF_BUILTIN (INSERT_BITS
, 3, uintQI_ftype_uintSI_uintQI_uintQI
, insert_bits
, NULL
)
57 DEF_BUILTIN (FLASH_SEGMENT
, 1, intQI_ftype_const_memx_ptr
, flash_segment
, NULL
)
59 /* ISO
/IEC TR
18037 "Embedded C"
60 The following builtins are undocumented and used by stdfix.h.
*/
62 /* 7.18a
.6 The fixed
-point intrinsic functions.
*/
64 /* 7.18a
.6.2 The fixed
-point absolute value functions.
*/
66 DEF_BUILTIN (ABSHR
, 1, hr_ftype_hr
, ssabsqq2
, "__ssabs_1")
67 DEF_BUILTIN (ABSR
, 1, nr_ftype_nr
, ssabshq2
, "__ssabs_2")
68 DEF_BUILTIN (ABSLR
, 1, lr_ftype_lr
, ssabssq2
, "__ssabs_4")
69 DEF_BUILTIN (ABSLLR
, -1, llr_ftype_llr
, nothing
, "__ssabsdq2") // GCC extension
71 DEF_BUILTIN (ABSHK
, 1, hk_ftype_hk
, ssabsha2
, "__ssabs_2")
72 DEF_BUILTIN (ABSK
, 1, nk_ftype_nk
, ssabssa2
, "__ssabs_4")
73 DEF_BUILTIN (ABSLK
, -1, lk_ftype_lk
, nothing
, "__ssabsda2")
74 DEF_BUILTIN (ABSLLK
, -1, llk_ftype_llk
, nothing
, "__ssabsta2") // GCC extension
76 /* 7.18a
.6.3 The fixed
-point round functions.
*/
78 DEF_BUILTIN (ROUNDHR
, 2, hr_ftype_hr_int
, roundqq3
, "__roundhr")
79 DEF_BUILTIN (ROUNDR
, 2, nr_ftype_nr_int
, roundhq3
, "__roundr")
80 DEF_BUILTIN (ROUNDLR
, 2, lr_ftype_lr_int
, roundsq3
, "__roundlr")
81 DEF_BUILTIN (ROUNDLLR
, -1, llr_ftype_llr_int
, nothing
, "__rounddq3") // GCC extension
83 DEF_BUILTIN (ROUNDUHR
, 2, uhr_ftype_uhr_int
, rounduqq3
, "__rounduhr")
84 DEF_BUILTIN (ROUNDUR
, 2, unr_ftype_unr_int
, rounduhq3
, "__roundur")
85 DEF_BUILTIN (ROUNDULR
, 2, ulr_ftype_ulr_int
, roundusq3
, "__roundulr")
86 DEF_BUILTIN (ROUNDULLR
, -1, ullr_ftype_ullr_int
, nothing
, "__roundudq3") // GCC extension
88 DEF_BUILTIN (ROUNDHK
, 2, hk_ftype_hk_int
, roundha3
, "__roundhk")
89 DEF_BUILTIN (ROUNDK
, 2, nk_ftype_nk_int
, roundsa3
, "__roundk")
90 DEF_BUILTIN (ROUNDLK
, -1, lk_ftype_lk_int
, nothing
, "__roundda3")
91 DEF_BUILTIN (ROUNDLLK
, -1, llk_ftype_llk_int
, nothing
, "__roundta3") // GCC extension
93 DEF_BUILTIN (ROUNDUHK
, 2, uhk_ftype_uhk_int
, rounduha3
, "__rounduhk")
94 DEF_BUILTIN (ROUNDUK
, 2, unk_ftype_unk_int
, roundusa3
, "__rounduk")
95 DEF_BUILTIN (ROUNDULK
, -1, ulk_ftype_ulk_int
, nothing
, "__rounduda3")
96 DEF_BUILTIN (ROUNDULLK
, -1, ullk_ftype_ullk_int
, nothing
, "__rounduta3") // GCC extension
98 /* 7.18a
.6.4 The fixed
-point bit countls functions.
*/
100 DEF_BUILTIN (COUNTLSHR
, -1, int_ftype_hr
, nothing
, "__countlsqi2")
101 DEF_BUILTIN (COUNTLSR
, -1, int_ftype_nr
, nothing
, "__countlshi2")
102 DEF_BUILTIN (COUNTLSLR
, -1, int_ftype_lr
, nothing
, "__countlssi2")
103 DEF_BUILTIN (COUNTLSLLR
, -1, int_ftype_llr
, nothing
, "__countlsdi2") // GCC extension
105 DEF_BUILTIN (COUNTLSUHR
, -1, int_ftype_uhr
, nothing
, "__countlsuqi2")
106 DEF_BUILTIN (COUNTLSUR
, -1, int_ftype_unr
, nothing
, "__countlsuhi2")
107 DEF_BUILTIN (COUNTLSULR
, -1, int_ftype_ulr
, nothing
, "__countlsusi2")
108 DEF_BUILTIN (COUNTLSULLR
, -1, int_ftype_ullr
, nothing
, "__countlsudi2") // GCC extension
110 DEF_BUILTIN (COUNTLSHK
, -1, int_ftype_hk
, nothing
, "__countlshi2")
111 DEF_BUILTIN (COUNTLSK
, -1, int_ftype_nk
, nothing
, "__countlssi2")
112 DEF_BUILTIN (COUNTLSLK
, -1, int_ftype_lk
, nothing
, "__countlsdi2")
113 DEF_BUILTIN (COUNTLSLLK
, -1, int_ftype_llk
, nothing
, "__countlsdi2") // GCC extension
115 DEF_BUILTIN (COUNTLSUHK
, -1, int_ftype_uhk
, nothing
, "__countlsuhi2")
116 DEF_BUILTIN (COUNTLSUK
, -1, int_ftype_unk
, nothing
, "__countlsusi2")
117 DEF_BUILTIN (COUNTLSULK
, -1, int_ftype_ulk
, nothing
, "__countlsudi2")
118 DEF_BUILTIN (COUNTLSULLK
, -1, int_ftype_ullk
, nothing
, "__countlsudi2") // GCC extension
120 /* 7.18a
.6.5 The bitwise fixed
-point to integer conversion functions.
*/
122 DEF_BUILTIN (BITSHR
, -1, inthr_ftype_hr
, nothing
, "__ret")
123 DEF_BUILTIN (BITSR
, -1, intnr_ftype_nr
, nothing
, "__ret")
124 DEF_BUILTIN (BITSLR
, -1, intlr_ftype_lr
, nothing
, "__ret")
125 DEF_BUILTIN (BITSLLR
, -1, intllr_ftype_llr
, nothing
, "__ret") // GCC extension
127 DEF_BUILTIN (BITSUHR
, -1, intuhr_ftype_uhr
, nothing
, "__ret")
128 DEF_BUILTIN (BITSUR
, -1, intunr_ftype_unr
, nothing
, "__ret")
129 DEF_BUILTIN (BITSULR
, -1, intulr_ftype_ulr
, nothing
, "__ret")
130 DEF_BUILTIN (BITSULLR
, -1, intullr_ftype_ullr
, nothing
, "__ret") // GCC extension
132 DEF_BUILTIN (BITSHK
, -1, inthk_ftype_hk
, nothing
, "__ret")
133 DEF_BUILTIN (BITSK
, -1, intnk_ftype_nk
, nothing
, "__ret")
134 DEF_BUILTIN (BITSLK
, -1, intlk_ftype_lk
, nothing
, "__ret")
135 DEF_BUILTIN (BITSLLK
, -1, intllk_ftype_llk
, nothing
, "__ret") // GCC extension
137 DEF_BUILTIN (BITSUHK
, -1, intuhk_ftype_uhk
, nothing
, "__ret")
138 DEF_BUILTIN (BITSUK
, -1, intunk_ftype_unk
, nothing
, "__ret")
139 DEF_BUILTIN (BITSULK
, -1, intulk_ftype_ulk
, nothing
, "__ret")
140 DEF_BUILTIN (BITSULLK
, -1, intullk_ftype_ullk
, nothing
, "__ret") // GCC extension
143 /* 7.18a
.6.6 The bitwise integer to fixed
-point conversion functions.
*/
145 DEF_BUILTIN ( HRBITS
, -1, hr_ftype_inthr
, nothing
, "__ret")
146 DEF_BUILTIN ( RBITS
, -1, nr_ftype_intnr
, nothing
, "__ret")
147 DEF_BUILTIN ( LRBITS
, -1, lr_ftype_intlr
, nothing
, "__ret")
148 DEF_BUILTIN ( LLRBITS
, -1, llr_ftype_intllr
, nothing
, "__ret") // GCC extension
150 DEF_BUILTIN ( UHRBITS
, -1, uhr_ftype_intuhr
, nothing
, "__ret")
151 DEF_BUILTIN ( URBITS
, -1, unr_ftype_intunr
, nothing
, "__ret")
152 DEF_BUILTIN ( ULRBITS
, -1, ulr_ftype_intulr
, nothing
, "__ret")
153 DEF_BUILTIN (ULLRBITS
, -1, ullr_ftype_intullr
, nothing
, "__ret") // GCC extension
155 DEF_BUILTIN ( HKBITS
, -1, hk_ftype_inthk
, nothing
, "__ret")
156 DEF_BUILTIN ( KBITS
, -1, nk_ftype_intnk
, nothing
, "__ret")
157 DEF_BUILTIN ( LKBITS
, -1, lk_ftype_intlk
, nothing
, "__ret")
158 DEF_BUILTIN ( LLKBITS
, -1, llk_ftype_intllk
, nothing
, "__ret") // GCC extension
160 DEF_BUILTIN ( UHKBITS
, -1, uhk_ftype_intuhk
, nothing
, "__ret")
161 DEF_BUILTIN ( UKBITS
, -1, unk_ftype_intunk
, nothing
, "__ret")
162 DEF_BUILTIN ( ULKBITS
, -1, ulk_ftype_intulk
, nothing
, "__ret")
163 DEF_BUILTIN (ULLKBITS
, -1, ullk_ftype_intullk
, nothing
, "__ret") // GCC extension
167 /* 7.18a
.6.7 Type
-generic fixed
-point functions.
*/
169 DEF_BUILTIN (ABSFX
, -1, void_ftype_void
/* dummy
*/, nothing
, NULL
)
170 DEF_BUILTIN (ROUNDFX
, -1, void_ftype_void
/* dummy
*/, nothing
, NULL
)
171 DEF_BUILTIN (COUNTLSFX
, -1, void_ftype_void
/* dummy
*/, nothing
, NULL
)