/ src / entry_pt.c
entry_pt.c
  1  /*
  2   * Copyright (C) 2008-2020 Advanced Micro Devices, Inc. All rights reserved.
  3   *
  4   * Redistribution and use in source and binary forms, with or without modification,
  5   * are permitted provided that the following conditions are met:
  6   * 1. Redistributions of source code must retain the above copyright notice,
  7   *    this list of conditions and the following disclaimer.
  8   * 2. Redistributions in binary form must reproduce the above copyright notice,
  9   *    this list of conditions and the following disclaimer in the documentation
 10   *    and/or other materials provided with the distribution.
 11   * 3. Neither the name of the copyright holder nor the names of its contributors
 12   *    may be used to endorse or promote products derived from this software without
 13   *    specific prior written permission.
 14   *
 15   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 16   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 17   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 18   * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 19   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 20   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 21   * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 22   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 23   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 24   * POSSIBILITY OF SUCH DAMAGE.
 25   *
 26   */
 27  
 28  #include <libm_macros.h>
 29  #include <libm/amd_funcs_internal.h>
 30  #include <libm/compiler.h>
 31  #include <libm/cpu_features.h>
 32  #include <libm/iface.h>
 33  #include <libm/entry_pt.h>
 34  
 35  #ifdef __cplusplus
 36  extern "C"
 37  {
 38  #endif
 39  
 40  double G_ENTRY_PT(acos)(double x);
 41  double G_ENTRY_PT(acosh)(double x);
 42  double G_ENTRY_PT(asin)(double x);
 43  double G_ENTRY_PT(asinh)(double x);
 44  double G_ENTRY_PT(atan2)(double x, double y);
 45  double G_ENTRY_PT(atan)(double x);
 46  double G_ENTRY_PT(atanh)(double x);
 47  double G_ENTRY_PT(cbrt)(double x);
 48  double G_ENTRY_PT(ceil)(double x);
 49  double G_ENTRY_PT(copysign)(double x, double y);
 50  double G_ENTRY_PT(cos)(double x);
 51  double G_ENTRY_PT(cosh)(double x);
 52  double G_ENTRY_PT(cospi)(double x);
 53  double G_ENTRY_PT(exp10)(double x);
 54  double G_ENTRY_PT(exp2)(double x);
 55  double G_ENTRY_PT(exp)(double x);
 56  double G_ENTRY_PT(expm1)(double x);
 57  double G_ENTRY_PT(fabs)(double x);
 58  double G_ENTRY_PT(fastpow)(double x, double y);
 59  double G_ENTRY_PT(fdim)(double x, double y);
 60  double G_ENTRY_PT(floor)(double x);
 61  double G_ENTRY_PT(fma)(double x, double y, double z);
 62  double G_ENTRY_PT(fmax)(double x, double y);
 63  double G_ENTRY_PT(fmin)(double x, double y);
 64  double G_ENTRY_PT(fmod)(double x, double y);
 65  double G_ENTRY_PT(frexp)(double value, int *exp);
 66  double G_ENTRY_PT(hypot)(double x, double y);
 67  double G_ENTRY_PT(ldexp)(double x, int exp);
 68  double G_ENTRY_PT(log10)(double x);
 69  double G_ENTRY_PT(log1p)(double x);
 70  double G_ENTRY_PT(log2)(double x);
 71  double G_ENTRY_PT(logb)(double x);
 72  double G_ENTRY_PT(log)(double x);
 73  double G_ENTRY_PT(modf)(double x, double *iptr);
 74  double G_ENTRY_PT(nan)(const char *tagp);
 75  double G_ENTRY_PT(nearbyint)(double x);
 76  double G_ENTRY_PT(nextafter)(double x, double y);
 77  double G_ENTRY_PT(nexttoward)(double x, long double y);
 78  double G_ENTRY_PT(pow)(double x, double y);
 79  double G_ENTRY_PT(remainder)(double x, double y);
 80  double G_ENTRY_PT(remquo) (double x, double y, int *quo);
 81  double G_ENTRY_PT(rint)(double x);
 82  double G_ENTRY_PT(round)(double f);
 83  double G_ENTRY_PT(scalbln)(double x, long int n);
 84  double G_ENTRY_PT(scalbn)(double x, int n);
 85  double G_ENTRY_PT(sin)(double x);
 86  double G_ENTRY_PT(sinh)(double x);
 87  double G_ENTRY_PT(sinpi)(double x);
 88  double G_ENTRY_PT(sqrt)(double x);
 89  double G_ENTRY_PT(tan)(double x);
 90  double G_ENTRY_PT(tanh)(double x);
 91  double G_ENTRY_PT(tanpi)(double x);
 92  double G_ENTRY_PT(trunc)(double x);
 93  
 94  /*
 95   * required by NAG tests
 96   */
 97  double G_ENTRY_PT(remainder_piby2)(double x, double y);
 98  double G_ENTRY_PT(remainder_piby2d2f)(double x, double y);
 99  
100  /*
101   * Single Precision functions
102   */
103  float G_ENTRY_PT(acosf)(float x);
104  float G_ENTRY_PT(acoshf)(float x);
105  float G_ENTRY_PT(asinf)(float x);
106  float G_ENTRY_PT(asinhf)(float x);
107  float G_ENTRY_PT(atan2f)(float x, float y);
108  float G_ENTRY_PT(atanf)(float x);
109  float G_ENTRY_PT(atanhf)(float x);
110  float G_ENTRY_PT(cbrtf)(float x);
111  float G_ENTRY_PT(ceilf)(float x);
112  float G_ENTRY_PT(copysignf)(float x, float y);
113  float G_ENTRY_PT(cosf)(float x);
114  float G_ENTRY_PT(coshf)(float fx);
115  float G_ENTRY_PT(cospif)(float x);
116  float G_ENTRY_PT(exp10f)(float x);
117  float G_ENTRY_PT(exp2f)(float x);
118  float G_ENTRY_PT(expf)(float x);
119  float G_ENTRY_PT(expm1f)(float x);
120  float G_ENTRY_PT(fabsf)(float x);
121  float G_ENTRY_PT(fdimf)(float x, float y);
122  float G_ENTRY_PT(floorf)(float x);
123  float G_ENTRY_PT(fmaf)(float x, float y, float z);
124  float G_ENTRY_PT(fmaxf)(float x, float y);
125  float G_ENTRY_PT(fminf)(float x, float y);
126  float G_ENTRY_PT(fmodf)(float x, float y);
127  float G_ENTRY_PT(frexpf)(float value, int *exp);
128  float G_ENTRY_PT(hypotf)(float x, float y);
129  float G_ENTRY_PT(ldexpf)(float x, int exp);
130  float G_ENTRY_PT(log10f)(float x);
131  float G_ENTRY_PT(log1pf)(float x);
132  float G_ENTRY_PT(log2f)(float x);
133  float G_ENTRY_PT(logbf)(float x);
134  float G_ENTRY_PT(logf)(float x);
135  float G_ENTRY_PT(modff)(float x, float *iptr);
136  float G_ENTRY_PT(nanf)(const char *tagp);
137  float G_ENTRY_PT(nearbyintf)(float x);
138  float G_ENTRY_PT(nextafterf)(float x, float y);
139  float G_ENTRY_PT(nexttowardf)(float x, long double y);
140  float G_ENTRY_PT(powf)(float x, float y);
141  float G_ENTRY_PT(remainderf)(float x, float y);
142  float G_ENTRY_PT(remquof) (float x, float y, int *quo);
143  float G_ENTRY_PT(rintf)(float x);
144  float G_ENTRY_PT(roundf)(float f);
145  float G_ENTRY_PT(scalblnf)(float x, long int n);
146  float G_ENTRY_PT(scalbnf)(float x, int n);
147  float G_ENTRY_PT(sinf)(float x);
148  float G_ENTRY_PT(sinhf)(float x);
149  float G_ENTRY_PT(sinpif)(float x);
150  float G_ENTRY_PT(sqrtf)(float x);
151  float G_ENTRY_PT(tanf)(float x);
152  float G_ENTRY_PT(tanhf)(float x);
153  float G_ENTRY_PT(tanpif)(float x);
154  float G_ENTRY_PT(truncf)(float x);
155  
156  /*
157   * Integer variants
158   */
159  int G_ENTRY_PT(finite)(double x);
160  int G_ENTRY_PT(finitef)(float x);
161  int G_ENTRY_PT(ilogb)(double x);
162  int G_ENTRY_PT(ilogbf)(float x);
163  long int G_ENTRY_PT(lrint)(double x);
164  long int G_ENTRY_PT(lrintf)(float x);
165  long int G_ENTRY_PT(lround)(double d);
166  long int G_ENTRY_PT(lroundf)(float f);
167  long long int G_ENTRY_PT(llrint)(double x);
168  long long int G_ENTRY_PT(llrintf)(float x);
169  long long int G_ENTRY_PT(llround)(double d);
170  long long int G_ENTRY_PT(llroundf)(float f);
171  
172  void G_ENTRY_PT(vrda_cbrt)(int, double*, double*);
173  void G_ENTRY_PT(vrda_cos)(int, double*, double*);
174  void G_ENTRY_PT(vrda_exp)(int, double*, double*);
175  void G_ENTRY_PT(vrda_exp2)(int, double*, double*);
176  void G_ENTRY_PT(vrda_exp10)(int, double*, double*);
177  void G_ENTRY_PT(vrda_expm1)(int, double*, double*);
178  void G_ENTRY_PT(vrda_log)(int, double*, double*);
179  void G_ENTRY_PT(vrda_log10)(int, double*, double*);
180  void G_ENTRY_PT(vrda_log1p)(int, double*, double*);
181  void G_ENTRY_PT(vrda_log2)(int, double*, double*);
182  void G_ENTRY_PT(vrda_pow)(int, double*, double*);
183  void G_ENTRY_PT(vrda_sin)(int, double*, double*);
184  
185  
186  void G_ENTRY_PT(vrsa_cosf)(int, float*, float*);
187  void G_ENTRY_PT(vrsa_expf)(int, float*, float*);
188  void G_ENTRY_PT(vrsa_exp2f)(int, float*, float*);
189  void G_ENTRY_PT(vrsa_exp10f)(int, float*, float*);
190  void G_ENTRY_PT(vrsa_expm1f)(int, float*, float*);
191  void G_ENTRY_PT(vrsa_log1pf)(int, float*, float*);
192  void G_ENTRY_PT(vrsa_sinf)(int, float*, float*);
193  void G_ENTRY_PT(vrsa_log2f)(int, float*, float*);
194  void G_ENTRY_PT(vrsa_cbrtf)(int, float*, float*);
195  void G_ENTRY_PT(vrsa_log10f)(int, float*, float*);
196  void G_ENTRY_PT(vrsa_logf)(int, float*, float*);
197  
198  #ifndef _MSC_VER
199  void  G_ENTRY_PT(sincos)(double,double *,double *);
200  void  G_ENTRY_PT(sincosf)(float,float *,float *);
201  #endif
202  
203  __m128  G_ENTRY_PT(vrs4_cosf)(__m128);
204  __m128  G_ENTRY_PT(vrs4_cbrtf)(__m128);
205  __m128  G_ENTRY_PT(vrs4_expf)(__m128);
206  __m128  G_ENTRY_PT(vrs4_exp2f)(__m128);
207  __m128  G_ENTRY_PT(vrs4_exp10f)(__m128);
208  __m128  G_ENTRY_PT(vrs4_expm1f)(__m128);
209  __m128  G_ENTRY_PT(vrs4_logf)(__m128);
210  __m128  G_ENTRY_PT(vrs4_log2f)(__m128);
211  __m128  G_ENTRY_PT(vrs4_log10f)(__m128);
212  __m128  G_ENTRY_PT(vrs4_log1pf)(__m128);
213  __m128  G_ENTRY_PT(vrs4_sinf)(__m128);
214  __m128  G_ENTRY_PT(vrs4_tanf)(__m128);
215  __m128  G_ENTRY_PT(vrs4_powf)(__m128, __m128);
216  
217  __m256  G_ENTRY_PT(vrs8_logf)(__m256);
218  __m256  G_ENTRY_PT(vrs8_expf)(__m256);
219  __m256  G_ENTRY_PT(vrs8_sinf)(__m256);
220  __m256  G_ENTRY_PT(vrs8_tanf)(__m256);
221  __m256  G_ENTRY_PT(vrs8_cosf)(__m256);
222  __m256  G_ENTRY_PT(vrs8_powf)(__m256, __m256);
223  
224  __m128d G_ENTRY_PT(vrd2_cbrt)(__m128d);
225  __m128d G_ENTRY_PT(vrd2_cos)(__m128d);
226  __m128d G_ENTRY_PT(vrd2_cosh)(__m128d);
227  __m128d G_ENTRY_PT(vrd2_exp)(__m128d);
228  __m128d G_ENTRY_PT(vrd2_exp2)(__m128d);
229  __m128d G_ENTRY_PT(vrd2_exp10)(__m128d);
230  __m128d G_ENTRY_PT(vrd2_expm1)(__m128d);
231  __m128d G_ENTRY_PT(vrd2_log)(__m128d);
232  __m128d G_ENTRY_PT(vrd2_log2)(__m128d);
233  __m128d G_ENTRY_PT(vrd2_log10)(__m128d);
234  __m128d G_ENTRY_PT(vrd2_log1p)(__m128d);
235  __m128d G_ENTRY_PT(vrd2_pow)(__m128d, __m128d);
236  __m128d G_ENTRY_PT(vrd2_sin)(__m128d);
237  __m128d G_ENTRY_PT(vrd2_tan)(__m128d);
238  
239  __m256d G_ENTRY_PT(vrd4_cbrt)(__m256d);
240  __m256d G_ENTRY_PT(vrd4_cos)(__m256d);
241  __m256d G_ENTRY_PT(vrd4_exp)(__m256d);
242  __m256d G_ENTRY_PT(vrd4_exp2)(__m256d);
243  __m256d G_ENTRY_PT(vrd4_exp10)(__m256d);
244  __m256d G_ENTRY_PT(vrd4_expm1)(__m256d);
245  __m256d G_ENTRY_PT(vrd4_log)(__m256d);
246  __m256d G_ENTRY_PT(vrd4_log2)(__m256d);
247  __m256d G_ENTRY_PT(vrd4_log10)(__m256d);
248  __m256d G_ENTRY_PT(vrd4_log1p)(__m256d);
249  __m256d G_ENTRY_PT(vrd4_pow)(__m256d, __m256d);
250  __m256d G_ENTRY_PT(vrd4_sin)(__m256d);
251  __m256d G_ENTRY_PT(vrd4_tan)(__m256d);
252  
253  
254  #ifdef __cplusplus
255  }
256  #endif
257  
258  static void CONSTRUCTOR
259  init_map_entry_points(void)
260  {
261      /* First call __init_cpu_featues() via libm_cpu_get_features */
262  
263      /* Call interfaces to initialize functions */
264  
265      if (libm_cpu_feature_is_avx2_usable()) {
266  
267          g_amd_libm_ep_cbrt       =	FN_PROTOTYPE_FMA3(cbrt);
268          g_amd_libm_ep_cbrtf      =	FN_PROTOTYPE_FMA3(cbrtf);
269          g_amd_libm_ep_sin        =	FN_PROTOTYPE_FMA3(sin);
270  #ifndef _MSC_VER
271          g_amd_libm_ep_sincos     =	FN_PROTOTYPE_FMA3(sincos);
272          g_amd_libm_ep_sincosf    =	FN_PROTOTYPE_FMA3(sincosf);
273  #endif
274          g_amd_libm_ep_sinf       =	FN_PROTOTYPE_FMA3(sinf);
275          g_amd_libm_ep_cos        =	FN_PROTOTYPE_FMA3(cos) ;
276          g_amd_libm_ep_cosf       =	FN_PROTOTYPE_FMA3(cosf);
277          g_amd_libm_ep_tan        =	FN_PROTOTYPE_FMA3(tan);
278          g_amd_libm_ep_tanf       =	FN_PROTOTYPE_FMA3(tanf);
279          g_amd_libm_ep_vrd2_cbrt  =	FN_PROTOTYPE_FMA3(vrd2_cbrt);
280          g_amd_libm_ep_vrs4_cbrtf =	FN_PROTOTYPE_FMA3(vrs4_cbrtf);
281          g_amd_libm_ep_vrd2_cos   =	FN_PROTOTYPE_FMA3(vrd2_cos);
282          g_amd_libm_ep_vrs4_cosf  =	FN_PROTOTYPE_FMA3(vrs4_cosf);
283          g_amd_libm_ep_vrd2_sin   =	FN_PROTOTYPE_FMA3(vrd2_sin);
284          g_amd_libm_ep_vrs4_sinf  =	FN_PROTOTYPE_FMA3(vrs4_sinf);
285          g_amd_libm_ep_vrd2_tan   =	FN_PROTOTYPE_FMA3(vrd2_tan);
286          g_amd_libm_ep_vrs4_tanf  =	FN_PROTOTYPE_FMA3(vrs4_tanf);
287          g_amd_libm_ep_vrd2_log   =	FN_PROTOTYPE_FMA3(vrd2_log);
288          g_amd_libm_ep_vrd2_log2  =	FN_PROTOTYPE_FMA3(vrd2_log2);
289          g_amd_libm_ep_vrd2_log10 =	FN_PROTOTYPE_FMA3(vrd2_log10);
290          g_amd_libm_ep_vrd2_log1p =	FN_PROTOTYPE_FMA3(vrd2_log1p);
291          g_amd_libm_ep_vrs4_logf  =	FN_PROTOTYPE_FMA3(vrs4_logf);
292          g_amd_libm_ep_vrs4_powf  = FN_PROTOTYPE_BAS64(vrs4_powf);
293          g_amd_libm_ep_vrs4_log2f =	FN_PROTOTYPE_FMA3(vrs4_log2f);
294          g_amd_libm_ep_vrs4_log10f=	FN_PROTOTYPE_FMA3(vrs4_log10f);
295          g_amd_libm_ep_vrs4_log1pf=	FN_PROTOTYPE_FMA3(vrs4_log1pf);
296          g_amd_libm_ep_logf       =	FN_PROTOTYPE_FMA3(logf);
297          g_amd_libm_ep_log2f      =	FN_PROTOTYPE_FMA3(log2f);
298          g_amd_libm_ep_log10f     =	FN_PROTOTYPE_FMA3(log10f);
299          g_amd_libm_ep_log1pf     =	FN_PROTOTYPE_FMA3(log1pf);
300          g_amd_libm_ep_log        =	FN_PROTOTYPE_FMA3(log);
301          g_amd_libm_ep_log2       =	FN_PROTOTYPE_FMA3(log2);
302          g_amd_libm_ep_log10      =	FN_PROTOTYPE_FMA3(log10);
303          g_amd_libm_ep_log1p      =	FN_PROTOTYPE_FMA3(log1p);
304          g_amd_libm_ep_exp        =	FN_PROTOTYPE_FMA3(exp);
305          g_amd_libm_ep_exp2       =	FN_PROTOTYPE_FMA3(exp2);
306          g_amd_libm_ep_exp10      =	FN_PROTOTYPE_FMA3(exp10);
307          g_amd_libm_ep_expm1      =	FN_PROTOTYPE_FMA3(expm1);
308          g_amd_libm_ep_expf       =	FN_PROTOTYPE_FMA3(expf);
309          g_amd_libm_ep_exp2f	 =	FN_PROTOTYPE_FMA3(exp2f);
310          g_amd_libm_ep_exp10f	 =	FN_PROTOTYPE_FMA3(exp10f);
311          g_amd_libm_ep_expm1f	 =	FN_PROTOTYPE_FMA3(expm1f);
312          g_amd_libm_ep_vrs4_expf  =	FN_PROTOTYPE_FMA3(vrs4_expf);
313          g_amd_libm_ep_vrs4_exp2f =	FN_PROTOTYPE_FMA3(vrs4_exp2f);
314          g_amd_libm_ep_vrs4_exp10f=	FN_PROTOTYPE_FMA3(vrs4_exp10f);
315          g_amd_libm_ep_vrs4_expm1f=	FN_PROTOTYPE_FMA3(vrs4_expm1f);
316          g_amd_libm_ep_vrd2_exp   =	FN_PROTOTYPE_FMA3(vrd2_exp);
317          g_amd_libm_ep_vrd2_exp2	 =	FN_PROTOTYPE_FMA3(vrd2_exp2);
318          g_amd_libm_ep_vrd2_exp10 =	FN_PROTOTYPE_FMA3(vrd2_exp10);
319          g_amd_libm_ep_vrd2_expm1 =	FN_PROTOTYPE_FMA3(vrd2_expm1);
320          g_amd_libm_ep_vrda_cbrt	 =	FN_PROTOTYPE_FMA3(vrda_cbrt);
321          g_amd_libm_ep_vrda_log	 =	FN_PROTOTYPE_FMA3(vrda_log);
322          g_amd_libm_ep_vrda_log10 =	FN_PROTOTYPE_FMA3(vrda_log10);
323          g_amd_libm_ep_vrda_log1p =	FN_PROTOTYPE_FMA3(vrda_log1p);
324          g_amd_libm_ep_vrda_log2	 =	FN_PROTOTYPE_FMA3(vrda_log2);
325          g_amd_libm_ep_vrda_sin	 =	FN_PROTOTYPE_FMA3(vrda_sin);
326          g_amd_libm_ep_vrda_cos	 =	FN_PROTOTYPE_FMA3(vrda_cos);
327  
328  
329          g_amd_libm_ep_vrsa_cbrtf =	FN_PROTOTYPE_FMA3(vrsa_cbrtf);
330          g_amd_libm_ep_vrsa_logf	 =	FN_PROTOTYPE_FMA3(vrsa_logf);
331          g_amd_libm_ep_vrsa_log10f=	FN_PROTOTYPE_FMA3(vrsa_log10f);
332          g_amd_libm_ep_vrsa_log1pf=	FN_PROTOTYPE_FMA3(vrsa_log1pf);
333          g_amd_libm_ep_vrsa_log2f =	FN_PROTOTYPE_FMA3(vrsa_log2f);
334          g_amd_libm_ep_vrsa_sinf	 =	FN_PROTOTYPE_FMA3(vrsa_sinf);
335          g_amd_libm_ep_vrsa_cosf	 =	FN_PROTOTYPE_FMA3(vrsa_cosf);
336  
337          g_amd_libm_ep_vrda_exp   =	FN_PROTOTYPE_FMA3(vrda_exp);
338          g_amd_libm_ep_vrda_exp2	 =	FN_PROTOTYPE_FMA3(vrda_exp2);
339          g_amd_libm_ep_vrda_exp10 =	FN_PROTOTYPE_FMA3(vrda_exp10);
340          g_amd_libm_ep_vrda_expm1 =	FN_PROTOTYPE_FMA3(vrda_expm1);
341          g_amd_libm_ep_vrsa_expf  =	FN_PROTOTYPE_FMA3(vrsa_expf);
342          g_amd_libm_ep_vrsa_exp2f =	FN_PROTOTYPE_FMA3(vrsa_exp2f);
343          g_amd_libm_ep_vrsa_exp10f=	FN_PROTOTYPE_FMA3(vrsa_exp10f);
344          g_amd_libm_ep_vrsa_expm1f=	FN_PROTOTYPE_FMA3(vrsa_expm1f);
345          g_amd_libm_ep_fmaf       =	FN_PROTOTYPE_FMA3(fmaf);
346          g_amd_libm_ep_fma        =	FN_PROTOTYPE_FMA3(fma);
347          g_amd_libm_ep_pow        =	FN_PROTOTYPE_FMA3(pow);
348          g_amd_libm_ep_fastpow    = FN_PROTOTYPE_FMA3(fastpow);
349          g_amd_libm_ep_powf       =	FN_PROTOTYPE_FMA3(powf);
350      }
351  
352      libm_iface_init();
353  }