1/* Frv map GCC names to FR-V ABI.
2   Copyright (C) 2000-2022 Free Software Foundation, Inc.
3   Contributed by Red Hat, Inc.
4
5   This file is part of GCC.
6
7   GCC is free software; you can redistribute it and/or modify it under
8   the terms of the GNU General Public License as published by the Free
9   Software Foundation; either version 3, or (at your option) any later
10   version.
11
12   GCC is distributed in the hope that it will be useful, but WITHOUT
13   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15   for more details.
16
17   Under Section 7 of GPL version 3, you are granted additional
18   permissions described in the GCC Runtime Library Exception, version
19   3.1, as published by the Free Software Foundation.
20
21   You should have received a copy of the GNU General Public License and
22   a copy of the GCC Runtime Library Exception along with this program;
23   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24   <http://www.gnu.org/licenses/>.  */
25
26/* For each of the functions in the library that has a corresponding name in
27   the ABI, add an equivalence between the GCC name and the ABI name.  This is
28   in a separate file from frv.h so that fp-bit.c can be made to include it.  */
29
30#ifdef __GNUC__
31#ifdef __FRV_UNDERSCORE__
32#define RENAME_LIBRARY(OLD,NEW)						\
33__asm__ (".globl\t_" #NEW "\n"						\
34	 "_" #NEW "=_" #OLD "\n"					\
35	 "\t.type\t_" #NEW ",@function\n");
36
37#else
38#define RENAME_LIBRARY(OLD,NEW)						\
39__asm__ (".globl\t" #NEW "\n"						\
40	 #NEW "=" #OLD "\n"						\
41	 "\t.type\t" #NEW ",@function\n");
42#endif
43
44#define CREATE_DOUBLE_SHIFT(OLD,NEW)					\
45__asm__ (".text\n"							\
46	 "\t.globl\t" #NEW "\n"						\
47	 "\t.type\t" #NEW ",@function\n"				\
48	 #NEW ":\n"							\
49	 "\tor\tgr11, gr0, gr10\n"					\
50	 ".L" #OLD " = " #OLD "\n"					\
51	 "\tbra\t.L" #OLD "\n");
52
53#ifdef L_sf_to_df
54#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__extendsfdf2,__ftod)
55#endif
56
57#ifdef L_sf_to_si
58#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixsfsi,__ftoi)
59#endif
60
61#ifdef L_sf_to_usi
62#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfsi,__ftoui)
63#endif
64
65#ifdef L_df_to_si
66#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixdfsi,__dtoi)
67#endif
68
69#ifdef L_fixunssfsi
70#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfsi,__ftoui)
71#endif
72
73#ifdef L_fixunsdfsi
74#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunsdfsi,__dtoui)
75#endif
76
77#ifdef L_fixsfdi
78#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixsfdi,__ftoll)
79#endif
80
81#ifdef L_fixdfdi
82#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixdfdi,__dtoll)
83#endif
84
85#ifdef L_fixunssfdi
86#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfdi,__ftoull)
87#endif
88
89#ifdef L_fixunsdfdi
90#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunsdfdi,__dtoull)
91#endif
92
93#ifdef L_si_to_sf
94#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatsisf,__itof)
95#endif
96
97#ifdef L_di_to_sf
98#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdisf,__lltof)
99#endif
100
101#ifdef L_df_to_sf
102#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__truncdfsf2,__dtof)
103#endif
104
105#ifdef L_si_to_df
106#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatsidf,__itod)
107#endif
108
109#ifdef L_floatdisf
110#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdisf,__lltof)
111#endif
112
113#ifdef L_floatdidf
114#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdidf,__lltod)
115#endif
116
117#ifdef L_addsub_df
118#define DECLARE_LIBRARY_RENAMES \
119	RENAME_LIBRARY(__adddf3,__addd)
120	RENAME_LIBRARY(__subdf3,__subd)
121#endif
122
123#ifdef L_mul_df
124#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__muldf3,__muld)
125#endif
126
127#ifdef L_div_df
128#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divdf3,__divd)
129#endif
130
131#ifdef L_addsub_sf
132#define DECLARE_LIBRARY_RENAMES \
133	RENAME_LIBRARY(__addsf3,__addf) \
134	RENAME_LIBRARY(__subsf3,__subf)
135#endif
136
137#ifdef L_mul_sf
138#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__mulsf3,__mulf)
139#endif
140
141#ifdef L_div_sf
142#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divsf3,__divf)
143#endif
144
145#ifdef L_ashldi3
146#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__ashldi3,__sllll)
147#endif
148
149#ifdef L_lshrdi3
150#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__lshrdi3,__srlll)
151#endif
152
153#ifdef L_ashrdi3
154#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__ashrdi3,__srall)
155#endif
156
157#ifdef L_adddi3
158#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__adddi3,__addll)
159#endif
160
161#ifdef L_subdi3
162#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__subdi3,__subll)
163#endif
164
165#ifdef L_muldi3
166#define DECLARE_LIBRARY_RENAMES \
167	RENAME_LIBRARY(__muldi3,__mulll)
168	RENAME_LIBRARY(__muldi3,__umulll)
169#endif
170
171#ifdef L_divdi3
172#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divdi3,__divll)
173#endif
174
175#ifdef L_udivdi3
176#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__udivdi3,__udivll)
177#endif
178
179#ifdef L_moddi3
180#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__moddi3,__modll)
181#endif
182
183#ifdef L_umoddi3
184#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__umoddi3,__umodll)
185#endif
186#endif /* __GNUC__ */
187