1 (* Builtins.def provides access to all built-in functions.
3 Copyright (C) 2001-2024 Free Software Foundation, Inc.
4 Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
6 This file is part of GNU Modula-2.
8 GNU Modula-2 is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GNU Modula-2 is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
18 Under Section 7 of GPL version 3, you are granted additional
19 permissions described in the GCC Runtime Library Exception, version
20 3.1, as published by the Free Software Foundation.
22 You should have received a copy of the GNU General Public License and
23 a copy of the GCC Runtime Library Exception along with this program;
24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25 <http://www.gnu.org/licenses/>. *)
27 DEFINITION MODULE Builtins
;
29 FROM SYSTEM
IMPORT ADDRESS
;
31 (* floating point intrinsic procedure functions *)
33 PROCEDURE __BUILTIN__
isnanf (x
: SHORTREAL
) : INTEGER ;
34 PROCEDURE __BUILTIN__
isnan (x
: REAL) : INTEGER ;
35 PROCEDURE __BUILTIN__
isnanl (x
: LONGREAL) : INTEGER ;
37 PROCEDURE __BUILTIN__
isfinitef (x
: SHORTREAL
) : INTEGER ;
38 PROCEDURE __BUILTIN__
isfinite (x
: REAL) : INTEGER ;
39 PROCEDURE __BUILTIN__
isfinitel (x
: LONGREAL) : INTEGER ;
41 PROCEDURE __BUILTIN__
sinf (x
: SHORTREAL
) : SHORTREAL
;
42 PROCEDURE __BUILTIN__
sin (x
: REAL) : REAL ;
43 PROCEDURE __BUILTIN__
sinl (x
: LONGREAL) : LONGREAL ;
45 PROCEDURE __BUILTIN__
cosf (x
: SHORTREAL
) : SHORTREAL
;
46 PROCEDURE __BUILTIN__
cos (x
: REAL) : REAL ;
47 PROCEDURE __BUILTIN__
cosl (x
: LONGREAL) : LONGREAL ;
49 PROCEDURE __BUILTIN__
sqrtf (x
: SHORTREAL
) : SHORTREAL
;
50 PROCEDURE __BUILTIN__
sqrt (x
: REAL) : REAL ;
51 PROCEDURE __BUILTIN__
sqrtl (x
: LONGREAL) : LONGREAL ;
53 PROCEDURE __BUILTIN__
atan2f (x
, y
: SHORTREAL
) : SHORTREAL
;
54 PROCEDURE __BUILTIN__
atan2 (x
, y
: REAL) : REAL ;
55 PROCEDURE __BUILTIN__
atan2l (x
, y
: LONGREAL) : LONGREAL ;
57 PROCEDURE __BUILTIN__
fabsf (x
: SHORTREAL
) : SHORTREAL
;
58 PROCEDURE __BUILTIN__
fabs (x
: REAL) : REAL ;
59 PROCEDURE __BUILTIN__
fabsl (x
: LONGREAL) : LONGREAL ;
61 PROCEDURE __BUILTIN__
logf (x
: SHORTREAL
) : SHORTREAL
;
62 PROCEDURE __BUILTIN__
log (x
: REAL) : REAL ;
63 PROCEDURE __BUILTIN__
logl (x
: LONGREAL) : LONGREAL ;
65 PROCEDURE __BUILTIN__
expf (x
: SHORTREAL
) : SHORTREAL
;
66 PROCEDURE __BUILTIN__
exp (x
: REAL) : REAL ;
67 PROCEDURE __BUILTIN__
expl (x
: LONGREAL) : LONGREAL ;
69 PROCEDURE __BUILTIN__
log10f (x
: SHORTREAL
) : SHORTREAL
;
70 PROCEDURE __BUILTIN__
log10 (x
: REAL) : REAL ;
71 PROCEDURE __BUILTIN__
log10l (x
: LONGREAL) : LONGREAL ;
73 PROCEDURE __BUILTIN__
exp10f (x
: SHORTREAL
) : SHORTREAL
;
74 PROCEDURE __BUILTIN__
exp10 (x
: REAL) : REAL ;
75 PROCEDURE __BUILTIN__
exp10l (x
: LONGREAL) : LONGREAL ;
77 PROCEDURE __BUILTIN__
ilogbf (x
: SHORTREAL
) : INTEGER ;
78 PROCEDURE __BUILTIN__
ilogb (x
: REAL) : INTEGER ;
79 PROCEDURE __BUILTIN__
ilogbl (x
: LONGREAL) : INTEGER ;
81 PROCEDURE __BUILTIN__
huge_val () : REAL ;
82 PROCEDURE __BUILTIN__
huge_valf () : SHORTREAL
;
83 PROCEDURE __BUILTIN__
huge_vall () : LONGREAL ;
85 PROCEDURE __BUILTIN__
modf (x
: REAL; VAR y
: REAL) : REAL ;
86 PROCEDURE __BUILTIN__
modff (x
: SHORTREAL
;
87 VAR y
: SHORTREAL
) : SHORTREAL
;
88 PROCEDURE __BUILTIN__
modfl (x
: LONGREAL; VAR y
: LONGREAL) : LONGREAL ;
90 PROCEDURE __BUILTIN__
signbit (r
: REAL) : INTEGER ;
91 PROCEDURE __BUILTIN__
signbitf (s
: SHORTREAL
) : INTEGER ;
92 PROCEDURE __BUILTIN__
signbitl (l
: LONGREAL) : INTEGER ;
94 PROCEDURE __BUILTIN__
nextafter (x
, y
: REAL) : REAL ;
95 PROCEDURE __BUILTIN__
nextafterf (x
, y
: SHORTREAL
) : SHORTREAL
;
96 PROCEDURE __BUILTIN__
nextafterl (x
, y
: LONGREAL) : LONGREAL ;
98 PROCEDURE __BUILTIN__
nexttoward (x
: REAL; y
: LONGREAL) : REAL ;
99 PROCEDURE __BUILTIN__
nexttowardf (x
: SHORTREAL
; y
: LONGREAL) : SHORTREAL
;
100 PROCEDURE __BUILTIN__
nexttowardl (x
, y
: LONGREAL) : LONGREAL ;
102 PROCEDURE __BUILTIN__
scalbln (x
: REAL; n
: LONGINT) : REAL ;
103 PROCEDURE __BUILTIN__
scalblnf (x
: SHORTREAL
; n
: LONGINT) : SHORTREAL
;
104 PROCEDURE __BUILTIN__
scalblnl (x
: LONGREAL; n
: LONGINT) : LONGREAL ;
106 PROCEDURE __BUILTIN__
scalbn (x
: REAL; n
: INTEGER) : REAL ;
107 PROCEDURE __BUILTIN__
scalbnf (x
: SHORTREAL
; n
: INTEGER) : SHORTREAL
;
108 PROCEDURE __BUILTIN__
scalbnl (x
: LONGREAL; n
: INTEGER) : LONGREAL ;
110 (* complex arithmetic intrincic procedure functions *)
112 PROCEDURE __BUILTIN__
cabsf (z
: SHORTCOMPLEX
) : SHORTREAL
;
113 PROCEDURE __BUILTIN__
cabs (z
: COMPLEX
) : REAL ;
114 PROCEDURE __BUILTIN__
cabsl (z
: LONGCOMPLEX
) : LONGREAL ;
116 PROCEDURE __BUILTIN__
cargf (z
: SHORTCOMPLEX
) : SHORTREAL
;
117 PROCEDURE __BUILTIN__
carg (z
: COMPLEX
) : REAL ;
118 PROCEDURE __BUILTIN__
cargl (z
: LONGCOMPLEX
) : LONGREAL ;
120 PROCEDURE __BUILTIN__
conjf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
121 PROCEDURE __BUILTIN__
conj (z
: COMPLEX
) : COMPLEX
;
122 PROCEDURE __BUILTIN__
conjl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
124 PROCEDURE __BUILTIN__
cpowerf (base
: SHORTCOMPLEX
;
125 exp
: SHORTREAL
) : SHORTCOMPLEX
;
126 PROCEDURE __BUILTIN__
cpower (base
: COMPLEX
; exp
: REAL) : COMPLEX
;
127 PROCEDURE __BUILTIN__
cpowerl (base
: LONGCOMPLEX
;
128 exp
: LONGREAL) : LONGCOMPLEX
;
130 PROCEDURE __BUILTIN__
csqrtf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
131 PROCEDURE __BUILTIN__
csqrt (z
: COMPLEX
) : COMPLEX
;
132 PROCEDURE __BUILTIN__
csqrtl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
134 PROCEDURE __BUILTIN__
cexpf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
135 PROCEDURE __BUILTIN__
cexp (z
: COMPLEX
) : COMPLEX
;
136 PROCEDURE __BUILTIN__
cexpl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
138 PROCEDURE __BUILTIN__
clnf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
139 PROCEDURE __BUILTIN__
cln (z
: COMPLEX
) : COMPLEX
;
140 PROCEDURE __BUILTIN__
clnl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
142 PROCEDURE __BUILTIN__
csinf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
143 PROCEDURE __BUILTIN__
csin (z
: COMPLEX
) : COMPLEX
;
144 PROCEDURE __BUILTIN__
csinl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
146 PROCEDURE __BUILTIN__
ccosf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
147 PROCEDURE __BUILTIN__
ccos (z
: COMPLEX
) : COMPLEX
;
148 PROCEDURE __BUILTIN__
ccosl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
150 PROCEDURE __BUILTIN__
ctanf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
151 PROCEDURE __BUILTIN__
ctan (z
: COMPLEX
) : COMPLEX
;
152 PROCEDURE __BUILTIN__
ctanl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
154 PROCEDURE __BUILTIN__
carcsinf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
155 PROCEDURE __BUILTIN__
carcsin (z
: COMPLEX
) : COMPLEX
;
156 PROCEDURE __BUILTIN__
carcsinl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
158 PROCEDURE __BUILTIN__
carccosf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
159 PROCEDURE __BUILTIN__
carccos (z
: COMPLEX
) : COMPLEX
;
160 PROCEDURE __BUILTIN__
carccosl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
162 PROCEDURE __BUILTIN__
carctanf (z
: SHORTCOMPLEX
) : SHORTCOMPLEX
;
163 PROCEDURE __BUILTIN__
carctan (z
: COMPLEX
) : COMPLEX
;
164 PROCEDURE __BUILTIN__
carctanl (z
: LONGCOMPLEX
) : LONGCOMPLEX
;
166 (* memory and string intrincic procedure functions *)
168 PROCEDURE __BUILTIN__
alloca (i
: CARDINAL) : ADDRESS
;
169 PROCEDURE __BUILTIN__
memcpy (dest
, src
: ADDRESS
;
170 nbytes
: CARDINAL) : ADDRESS
;
171 PROCEDURE __BUILTIN__
index (s
: ADDRESS
; c
: INTEGER) : ADDRESS
;
172 PROCEDURE __BUILTIN__
rindex (s
: ADDRESS
; c
: INTEGER) : ADDRESS
;
173 PROCEDURE __BUILTIN__
memcmp (s1
, s2
: ADDRESS
;
174 nbytes
: CARDINAL) : INTEGER ;
175 PROCEDURE __BUILTIN__
memset (s
: ADDRESS
; c
: INTEGER;
176 nbytes
: CARDINAL) : ADDRESS
;
177 PROCEDURE __BUILTIN__
memmove (s1
, s2
: ADDRESS
;
178 nbytes
: CARDINAL) : ADDRESS
;
179 PROCEDURE __BUILTIN__
strcat (dest
, src
: ADDRESS
) : ADDRESS
;
180 PROCEDURE __BUILTIN__
strncat (dest
, src
: ADDRESS
;
181 nbytes
: CARDINAL) : ADDRESS
;
182 PROCEDURE __BUILTIN__
strcpy (dest
, src
: ADDRESS
) : ADDRESS
;
183 PROCEDURE __BUILTIN__
strncpy (dest
, src
: ADDRESS
;
184 nbytes
: CARDINAL) : ADDRESS
;
185 PROCEDURE __BUILTIN__
strcmp (s1
, s2
: ADDRESS
) : INTEGER ;
186 PROCEDURE __BUILTIN__
strncmp (s1
, s2
: ADDRESS
;
187 nbytes
: CARDINAL) : INTEGER ;
188 PROCEDURE __BUILTIN__
strlen (s
: ADDRESS
) : INTEGER ;
189 PROCEDURE __BUILTIN__
strstr (haystack
, needle
: ADDRESS
) : ADDRESS
;
190 PROCEDURE __BUILTIN__
strpbrk (s
, accept
: ADDRESS
) : ADDRESS
;
191 PROCEDURE __BUILTIN__
strspn (s
, accept
: ADDRESS
) : CARDINAL ;
192 PROCEDURE __BUILTIN__
strcspn (s
, accept
: ADDRESS
) : CARDINAL ;
193 PROCEDURE __BUILTIN__
strchr (s
: ADDRESS
; c
: INTEGER) : ADDRESS
;
194 PROCEDURE __BUILTIN__
strrchr (s
: ADDRESS
; c
: INTEGER) : ADDRESS
;
197 longjmp - this GCC builtin restricts the val to always 1.
199 (* do not use these two builtins, as gcc, only really
200 anticipates that the Ada front end should use them
201 and it only uses them in its runtime exception handling.
202 We leave them here in the hope that someday they will
203 behave more like their libc counterparts. *)
205 PROCEDURE __BUILTIN__
longjmp (env
: ADDRESS
; val
: INTEGER) ;
206 PROCEDURE __BUILTIN__
setjmp (env
: ADDRESS
) : INTEGER ;
210 frame_address - returns the address of the frame.
211 The current frame is obtained if level is 0,
212 the next level up if level is 1 etc.
215 PROCEDURE __BUILTIN__
frame_address (level
: CARDINAL) : ADDRESS
;
219 return_address - returns the return address of function.
220 The current function return address is
221 obtained if level is 0,
222 the next level up if level is 1 etc.
225 PROCEDURE __BUILTIN__
return_address (level
: CARDINAL) : ADDRESS
;
229 alloca_trace - this is a no-op which is used for internal debugging.
232 PROCEDURE alloca_trace (returned
: ADDRESS
; nBytes
: CARDINAL) : ADDRESS
;