• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "gen.h"
2 
mpf1(struct t * s,float (* f)(float))3 static int mpf1(struct t *s, float (*f)(float))
4 {
5 	s->dy = 0;
6 	setupfenv(s->r);
7 	s->y = f(s->x);
8 	s->e = getexcept();
9 	return 0;
10 }
11 
mpf2(struct t * s,float (* f)(float,float))12 static int mpf2(struct t *s, float (*f)(float,float))
13 {
14 	s->dy = 0;
15 	setupfenv(s->r);
16 	s->y = f(s->x, s->x2);
17 	s->e = getexcept();
18 	return 0;
19 }
20 
mpd1(struct t * s,double (* f)(double))21 static int mpd1(struct t *s, double (*f)(double))
22 {
23 	s->dy = 0;
24 	setupfenv(s->r);
25 	s->y = f(s->x);
26 	s->e = getexcept();
27 	return 0;
28 }
29 
mpd2(struct t * s,double (* f)(double,double))30 static int mpd2(struct t *s, double (*f)(double, double))
31 {
32 	s->dy = 0;
33 	setupfenv(s->r);
34 	s->y = f(s->x, s->x2);
35 	s->e = getexcept();
36 	return 0;
37 }
38 
mpl1(struct t * s,long double (* f)(long double))39 static int mpl1(struct t *s, long double (*f)(long double))
40 {
41 	s->dy = 0;
42 	setupfenv(s->r);
43 	s->y = f(s->x);
44 	s->e = getexcept();
45 	return 0;
46 }
47 
mpl2(struct t * s,long double (* f)(long double,long double))48 static int mpl2(struct t *s, long double (*f)(long double, long double))
49 {
50 	setupfenv(s->r);
51 	s->y = f(s->x, s->x2);
52 	s->dy = 0;
53 	s->e = getexcept();
54 	return 0;
55 }
56 
sinpi(double x)57 static double sinpi(double x) { return sin(3.141592653589793238*x); }
mpsinpi(struct t * t)58 int mpsinpi(struct t *t) { return mpd1(t, sinpi); }
59 
60 
61 #define OP(n,op,t) static t n(t x, t y) { t z = x op y; return z; }
62 OP(add,+,double)
63 OP(addf,+,float)
64 OP(addl,+,long double)
65 OP(mul,*,double)
66 OP(mulf,*,float)
67 OP(mull,*,long double)
68 OP(div,/,double)
69 OP(divf,/,float)
70 OP(divl,/,long double)
mpadd(struct t * t)71 int mpadd(struct t *t) { return mpd2(t, add); }
mpaddf(struct t * t)72 int mpaddf(struct t *t) { return mpf2(t, addf); }
mpaddl(struct t * t)73 int mpaddl(struct t *t) { return mpl2(t, addl); }
mpmul(struct t * t)74 int mpmul(struct t *t) { return mpd2(t, mul); }
mpmulf(struct t * t)75 int mpmulf(struct t *t) { return mpf2(t, mulf); }
mpmull(struct t * t)76 int mpmull(struct t *t) { return mpl2(t, mull); }
mpdiv(struct t * t)77 int mpdiv(struct t *t) { return mpd2(t, div); }
mpdivf(struct t * t)78 int mpdivf(struct t *t) { return mpf2(t, divf); }
mpdivl(struct t * t)79 int mpdivl(struct t *t) { return mpl2(t, divl); }
80 
mpacos(struct t * t)81 int mpacos(struct t *t) { return mpd1(t, acos); }
mpacosf(struct t * t)82 int mpacosf(struct t *t) { return mpf1(t, acosf); }
mpacosl(struct t * t)83 int mpacosl(struct t *t) { return mpl1(t, acosl); }
mpacosh(struct t * t)84 int mpacosh(struct t *t) { return mpd1(t, acosh); }
mpacoshf(struct t * t)85 int mpacoshf(struct t *t) { return mpf1(t, acoshf); }
mpacoshl(struct t * t)86 int mpacoshl(struct t *t) { return mpl1(t, acoshl); }
mpasin(struct t * t)87 int mpasin(struct t *t) { return mpd1(t, asin); }
mpasinf(struct t * t)88 int mpasinf(struct t *t) { return mpf1(t, asinf); }
mpasinl(struct t * t)89 int mpasinl(struct t *t) { return mpl1(t, asinl); }
mpasinh(struct t * t)90 int mpasinh(struct t *t) { return mpd1(t, asinh); }
mpasinhf(struct t * t)91 int mpasinhf(struct t *t) { return mpf1(t, asinhf); }
mpasinhl(struct t * t)92 int mpasinhl(struct t *t) { return mpl1(t, asinhl); }
mpatan(struct t * t)93 int mpatan(struct t *t) { return mpd1(t, atan); }
mpatanf(struct t * t)94 int mpatanf(struct t *t) { return mpf1(t, atanf); }
mpatanl(struct t * t)95 int mpatanl(struct t *t) { return mpl1(t, atanl); }
mpatan2(struct t * t)96 int mpatan2(struct t *t) { return mpd2(t, atan2); }
mpatan2f(struct t * t)97 int mpatan2f(struct t *t) { return mpf2(t, atan2f); }
mpatan2l(struct t * t)98 int mpatan2l(struct t *t) { return mpl2(t, atan2l); }
mpatanh(struct t * t)99 int mpatanh(struct t *t) { return mpd1(t, atanh); }
mpatanhf(struct t * t)100 int mpatanhf(struct t *t) { return mpf1(t, atanhf); }
mpatanhl(struct t * t)101 int mpatanhl(struct t *t) { return mpl1(t, atanhl); }
mpcbrt(struct t * t)102 int mpcbrt(struct t *t) { return mpd1(t, cbrt); }
mpcbrtf(struct t * t)103 int mpcbrtf(struct t *t) { return mpf1(t, cbrtf); }
mpcbrtl(struct t * t)104 int mpcbrtl(struct t *t) { return mpl1(t, cbrtl); }
mpceil(struct t * t)105 int mpceil(struct t *t) { return mpd1(t, ceil); }
mpceilf(struct t * t)106 int mpceilf(struct t *t) { return mpf1(t, ceilf); }
mpceill(struct t * t)107 int mpceill(struct t *t) { return mpl1(t, ceill); }
mpcopysign(struct t * t)108 int mpcopysign(struct t *t) { return mpd2(t, copysign); }
mpcopysignf(struct t * t)109 int mpcopysignf(struct t *t) { return mpf2(t, copysignf); }
mpcopysignl(struct t * t)110 int mpcopysignl(struct t *t) { return mpl2(t, copysignl); }
mpcos(struct t * t)111 int mpcos(struct t *t) { return mpd1(t, cos); }
mpcosf(struct t * t)112 int mpcosf(struct t *t) { return mpf1(t, cosf); }
mpcosl(struct t * t)113 int mpcosl(struct t *t) { return mpl1(t, cosl); }
mpcosh(struct t * t)114 int mpcosh(struct t *t) { return mpd1(t, cosh); }
mpcoshf(struct t * t)115 int mpcoshf(struct t *t) { return mpf1(t, coshf); }
mpcoshl(struct t * t)116 int mpcoshl(struct t *t) { return mpl1(t, coshl); }
mperf(struct t * t)117 int mperf(struct t *t) { return mpd1(t, erf); }
mperff(struct t * t)118 int mperff(struct t *t) { return mpf1(t, erff); }
mperfl(struct t * t)119 int mperfl(struct t *t) { return mpl1(t, erfl); }
mperfc(struct t * t)120 int mperfc(struct t *t) { return mpd1(t, erfc); }
mperfcf(struct t * t)121 int mperfcf(struct t *t) { return mpf1(t, erfcf); }
mperfcl(struct t * t)122 int mperfcl(struct t *t) { return mpl1(t, erfcl); }
mpexp(struct t * t)123 int mpexp(struct t *t) { return mpd1(t, exp); }
mpexpf(struct t * t)124 int mpexpf(struct t *t) { return mpf1(t, expf); }
mpexpl(struct t * t)125 int mpexpl(struct t *t) { return mpl1(t, expl); }
mpexp2(struct t * t)126 int mpexp2(struct t *t) { return mpd1(t, exp2); }
mpexp2f(struct t * t)127 int mpexp2f(struct t *t) { return mpf1(t, exp2f); }
mpexp2l(struct t * t)128 int mpexp2l(struct t *t) { return mpl1(t, exp2l); }
mpexpm1(struct t * t)129 int mpexpm1(struct t *t) { return mpd1(t, expm1); }
mpexpm1f(struct t * t)130 int mpexpm1f(struct t *t) { return mpf1(t, expm1f); }
mpexpm1l(struct t * t)131 int mpexpm1l(struct t *t) { return mpl1(t, expm1l); }
mpfabs(struct t * t)132 int mpfabs(struct t *t) { return mpd1(t, fabs); }
mpfabsf(struct t * t)133 int mpfabsf(struct t *t) { return mpf1(t, fabsf); }
mpfabsl(struct t * t)134 int mpfabsl(struct t *t) { return mpl1(t, fabsl); }
mpfdim(struct t * t)135 int mpfdim(struct t *t) { return mpd2(t, fdim); }
mpfdimf(struct t * t)136 int mpfdimf(struct t *t) { return mpf2(t, fdimf); }
mpfdiml(struct t * t)137 int mpfdiml(struct t *t) { return mpl2(t, fdiml); }
mpfloor(struct t * t)138 int mpfloor(struct t *t) { return mpd1(t, floor); }
mpfloorf(struct t * t)139 int mpfloorf(struct t *t) { return mpf1(t, floorf); }
mpfloorl(struct t * t)140 int mpfloorl(struct t *t) { return mpl1(t, floorl); }
mpfmax(struct t * t)141 int mpfmax(struct t *t) { return mpd2(t, fmax); }
mpfmaxf(struct t * t)142 int mpfmaxf(struct t *t) { return mpf2(t, fmaxf); }
mpfmaxl(struct t * t)143 int mpfmaxl(struct t *t) { return mpl2(t, fmaxl); }
mpfmin(struct t * t)144 int mpfmin(struct t *t) { return mpd2(t, fmin); }
mpfminf(struct t * t)145 int mpfminf(struct t *t) { return mpf2(t, fminf); }
mpfminl(struct t * t)146 int mpfminl(struct t *t) { return mpl2(t, fminl); }
mpfmod(struct t * t)147 int mpfmod(struct t *t) { return mpd2(t, fmod); }
mpfmodf(struct t * t)148 int mpfmodf(struct t *t) { return mpf2(t, fmodf); }
mpfmodl(struct t * t)149 int mpfmodl(struct t *t) { return mpl2(t, fmodl); }
mphypot(struct t * t)150 int mphypot(struct t *t) { return mpd2(t, hypot); }
mphypotf(struct t * t)151 int mphypotf(struct t *t) { return mpf2(t, hypotf); }
mphypotl(struct t * t)152 int mphypotl(struct t *t) { return mpl2(t, hypotl); }
mplog(struct t * t)153 int mplog(struct t *t) { return mpd1(t, log); }
mplogf(struct t * t)154 int mplogf(struct t *t) { return mpf1(t, logf); }
mplogl(struct t * t)155 int mplogl(struct t *t) { return mpl1(t, logl); }
mplog10(struct t * t)156 int mplog10(struct t *t) { return mpd1(t, log10); }
mplog10f(struct t * t)157 int mplog10f(struct t *t) { return mpf1(t, log10f); }
mplog10l(struct t * t)158 int mplog10l(struct t *t) { return mpl1(t, log10l); }
mplog1p(struct t * t)159 int mplog1p(struct t *t) { return mpd1(t, log1p); }
mplog1pf(struct t * t)160 int mplog1pf(struct t *t) { return mpf1(t, log1pf); }
mplog1pl(struct t * t)161 int mplog1pl(struct t *t) { return mpl1(t, log1pl); }
mplog2(struct t * t)162 int mplog2(struct t *t) { return mpd1(t, log2); }
mplog2f(struct t * t)163 int mplog2f(struct t *t) { return mpf1(t, log2f); }
mplog2l(struct t * t)164 int mplog2l(struct t *t) { return mpl1(t, log2l); }
mplogb(struct t * t)165 int mplogb(struct t *t) { return mpd1(t, logb); }
mplogbf(struct t * t)166 int mplogbf(struct t *t) { return mpf1(t, logbf); }
mplogbl(struct t * t)167 int mplogbl(struct t *t) { return mpl1(t, logbl); }
mpnearbyint(struct t * t)168 int mpnearbyint(struct t *t) { return mpd1(t, nearbyint); }
mpnearbyintf(struct t * t)169 int mpnearbyintf(struct t *t) { return mpf1(t, nearbyintf); }
mpnearbyintl(struct t * t)170 int mpnearbyintl(struct t *t) { return mpl1(t, nearbyintl); }
mpnextafter(struct t * t)171 int mpnextafter(struct t *t) { return mpd2(t, nextafter); }
mpnextafterf(struct t * t)172 int mpnextafterf(struct t *t) { return mpf2(t, nextafterf); }
mpnextafterl(struct t * t)173 int mpnextafterl(struct t *t) { return mpl2(t, nextafterl); }
mpnexttoward(struct t * t)174 int mpnexttoward(struct t *t)
175 {
176 	feclearexcept(FE_ALL_EXCEPT);
177 	t->y = nexttoward(t->x, t->x2);
178 	t->e = getexcept();
179 	t->dy = 0;
180 	return 0;
181 }
mpnexttowardf(struct t * t)182 int mpnexttowardf(struct t *t)
183 {
184 	feclearexcept(FE_ALL_EXCEPT);
185 	t->y = nexttowardf(t->x, t->x2);
186 	t->e = getexcept();
187 	t->dy = 0;
188 	return 0;
189 }
mpnexttowardl(struct t * t)190 int mpnexttowardl(struct t *t) { return mpl2(t, nexttowardl); }
mppow(struct t * t)191 int mppow(struct t *t) { return mpd2(t, pow); }
mppowf(struct t * t)192 int mppowf(struct t *t) { return mpf2(t, powf); }
mppowl(struct t * t)193 int mppowl(struct t *t) { return mpl2(t, powl); }
mpremainder(struct t * t)194 int mpremainder(struct t *t) { return mpd2(t, remainder); }
mpremainderf(struct t * t)195 int mpremainderf(struct t *t) { return mpf2(t, remainderf); }
mpremainderl(struct t * t)196 int mpremainderl(struct t *t) { return mpl2(t, remainderl); }
mprint(struct t * t)197 int mprint(struct t *t) { return mpd1(t, rint); }
mprintf(struct t * t)198 int mprintf(struct t *t) { return mpf1(t, rintf); }
mprintl(struct t * t)199 int mprintl(struct t *t) { return mpl1(t, rintl); }
mpround(struct t * t)200 int mpround(struct t *t) { return mpd1(t, round); }
mproundf(struct t * t)201 int mproundf(struct t *t) { return mpf1(t, roundf); }
mproundl(struct t * t)202 int mproundl(struct t *t) { return mpl1(t, roundl); }
mpsin(struct t * t)203 int mpsin(struct t *t) { return mpd1(t, sin); }
mpsinf(struct t * t)204 int mpsinf(struct t *t) { return mpf1(t, sinf); }
mpsinl(struct t * t)205 int mpsinl(struct t *t) { return mpl1(t, sinl); }
mpsinh(struct t * t)206 int mpsinh(struct t *t) { return mpd1(t, sinh); }
mpsinhf(struct t * t)207 int mpsinhf(struct t *t) { return mpf1(t, sinhf); }
mpsinhl(struct t * t)208 int mpsinhl(struct t *t) { return mpl1(t, sinhl); }
mpsqrt(struct t * t)209 int mpsqrt(struct t *t) { return mpd1(t, sqrt); }
mpsqrtf(struct t * t)210 int mpsqrtf(struct t *t) { return mpf1(t, sqrtf); }
mpsqrtl(struct t * t)211 int mpsqrtl(struct t *t) { return mpl1(t, sqrtl); }
mptan(struct t * t)212 int mptan(struct t *t) { return mpd1(t, tan); }
mptanf(struct t * t)213 int mptanf(struct t *t) { return mpf1(t, tanf); }
mptanl(struct t * t)214 int mptanl(struct t *t) { return mpl1(t, tanl); }
mptanh(struct t * t)215 int mptanh(struct t *t) { return mpd1(t, tanh); }
mptanhf(struct t * t)216 int mptanhf(struct t *t) { return mpf1(t, tanhf); }
mptanhl(struct t * t)217 int mptanhl(struct t *t) { return mpl1(t, tanhl); }
mptgamma(struct t * t)218 int mptgamma(struct t *t) { return mpd1(t, tgamma); }
mptgammaf(struct t * t)219 int mptgammaf(struct t *t) { return mpf1(t, tgammaf); }
mptgammal(struct t * t)220 int mptgammal(struct t *t) { return mpl1(t, tgammal); }
mptrunc(struct t * t)221 int mptrunc(struct t *t) { return mpd1(t, trunc); }
mptruncf(struct t * t)222 int mptruncf(struct t *t) { return mpf1(t, truncf); }
mptruncl(struct t * t)223 int mptruncl(struct t *t) { return mpl1(t, truncl); }
mpj0(struct t * t)224 int mpj0(struct t *t) { return mpd1(t, j0); }
mpj1(struct t * t)225 int mpj1(struct t *t) { return mpd1(t, j1); }
mpy0(struct t * t)226 int mpy0(struct t *t) { return mpd1(t, y0); }
mpy1(struct t * t)227 int mpy1(struct t *t) { return mpd1(t, y1); }
mpscalb(struct t * t)228 int mpscalb(struct t *t) { return mpd2(t, scalb); }
mpscalbf(struct t * t)229 int mpscalbf(struct t *t) { return mpf2(t, scalbf); }
mpj0f(struct t * t)230 int mpj0f(struct t *t) { return mpf1(t, j0f); }
mpj0l(struct t * t)231 int mpj0l(struct t *t) { return -1;}//mpl1(t, j0l); }
mpj1f(struct t * t)232 int mpj1f(struct t *t) { return mpf1(t, j1f); }
mpj1l(struct t * t)233 int mpj1l(struct t *t) { return -1;}//mpl1(t, j1l); }
mpy0f(struct t * t)234 int mpy0f(struct t *t) { return mpf1(t, y0f); }
mpy0l(struct t * t)235 int mpy0l(struct t *t) { return -1;}//mpl1(t, y0l); }
mpy1f(struct t * t)236 int mpy1f(struct t *t) { return mpf1(t, y1f); }
mpy1l(struct t * t)237 int mpy1l(struct t *t) { return -1;}//mpl1(t, y1l); }
mpexp10(struct t * t)238 int mpexp10(struct t *t) { return mpd1(t, exp10); }
mpexp10f(struct t * t)239 int mpexp10f(struct t *t) { return mpf1(t, exp10f); }
mpexp10l(struct t * t)240 int mpexp10l(struct t *t) { return mpl1(t, exp10l); }
mppow10(struct t * t)241 int mppow10(struct t *t) { return mpd1(t, pow10); }
mppow10f(struct t * t)242 int mppow10f(struct t *t) { return mpf1(t, pow10f); }
mppow10l(struct t * t)243 int mppow10l(struct t *t) { return mpl1(t, pow10l); }
244 
245 #define mp_fi_f(n) \
246 int mp##n(struct t *t) \
247 { \
248 	t->dy = 0; \
249 	setupfenv(t->r); \
250 	t->y = n(t->x, t->i); \
251 	t->e = getexcept(); \
252 	return 0; \
253 }
254 
255 mp_fi_f(ldexp)
mp_fi_f(ldexpf)256 mp_fi_f(ldexpf)
257 mp_fi_f(ldexpl)
258 mp_fi_f(scalbn)
259 mp_fi_f(scalbnf)
260 mp_fi_f(scalbnl)
261 mp_fi_f(scalbln)
262 mp_fi_f(scalblnf)
263 mp_fi_f(scalblnl)
264 
265 #define mp_f_fi(n) \
266 int mp##n(struct t *t) \
267 { \
268 	int i; \
269 	t->dy = 0; \
270 	setupfenv(t->r); \
271 	t->y = n(t->x, &i); \
272 	t->e = getexcept(); \
273 	t->i = i; \
274 	return 0; \
275 }
276 
277 mp_f_fi(frexp)
278 mp_f_fi(frexpf)
279 mp_f_fi(frexpl)
280 mp_f_fi(lgamma_r)
281 mp_f_fi(lgammaf_r)
282 mp_f_fi(lgammal_r)
283 
284 int mplgamma(struct t *t)
285 {
286 	t->dy = 0;
287 	setupfenv(t->r);
288 	t->y = lgamma(t->x);
289 	t->e = getexcept();
290 	t->i = signgam;
291 	return 0;
292 }
293 
mplgammaf(struct t * t)294 int mplgammaf(struct t *t)
295 {
296 	t->dy = 0;
297 	setupfenv(t->r);
298 	t->y = lgammaf(t->x);
299 	t->e = getexcept();
300 	t->i = signgam;
301 	return 0;
302 }
303 
mplgammal(struct t * t)304 int mplgammal(struct t *t)
305 {
306 	t->dy = 0;
307 	setupfenv(t->r);
308 	t->y = lgammal(t->x);
309 	t->e = getexcept();
310 	t->i = signgam;
311 	return 0;
312 }
313 
314 #define mp_f_i(n) \
315 int mp##n(struct t *t) \
316 { \
317 	setupfenv(t->r); \
318 	t->i = n(t->x); \
319 	t->e = getexcept(); \
320 	return 0; \
321 }
322 
323 mp_f_i(ilogb)
mp_f_i(ilogbf)324 mp_f_i(ilogbf)
325 mp_f_i(ilogbl)
326 mp_f_i(llrint)
327 mp_f_i(llrintf)
328 mp_f_i(llrintl)
329 mp_f_i(lrint)
330 mp_f_i(lrintf)
331 mp_f_i(lrintl)
332 mp_f_i(llround)
333 mp_f_i(llroundf)
334 mp_f_i(llroundl)
335 mp_f_i(lround)
336 mp_f_i(lroundf)
337 mp_f_i(lroundl)
338 
339 int mpmodf(struct t *t)
340 {
341 	double y2;
342 
343 	t->dy = t->dy2 = 0;
344 	setupfenv(t->r);
345 	t->y = modf(t->x, &y2);
346 	t->y2 = y2;
347 	t->e = getexcept();
348 	return 0;
349 }
350 
mpmodff(struct t * t)351 int mpmodff(struct t *t)
352 {
353 	float y2;
354 
355 	t->dy = t->dy2 = 0;
356 	setupfenv(t->r);
357 	t->y = modff(t->x, &y2);
358 	t->y2 = y2;
359 	t->e = getexcept();
360 	return 0;
361 }
362 
mpmodfl(struct t * t)363 int mpmodfl(struct t *t)
364 {
365 	t->dy = t->dy2 = 0;
366 	setupfenv(t->r);
367 	t->y = modfl(t->x, &t->y2);
368 	t->e = getexcept();
369 	return 0;
370 }
371 
mpsincos(struct t * t)372 int mpsincos(struct t *t)
373 {
374 	double y, y2;
375 
376 	t->dy = t->dy2 = 0;
377 	setupfenv(t->r);
378 	sincos(t->x, &y, &y2);
379 	t->y = y;
380 	t->y2 = y2;
381 	t->e = getexcept();
382 	return 0;
383 }
384 
mpsincosf(struct t * t)385 int mpsincosf(struct t *t)
386 {
387 	float y, y2;
388 
389 	t->dy = t->dy2 = 0;
390 	setupfenv(t->r);
391 	sincosf(t->x, &y, &y2);
392 	t->y = y;
393 	t->y2 = y2;
394 	t->e = getexcept();
395 	return 0;
396 }
397 
mpsincosl(struct t * t)398 int mpsincosl(struct t *t)
399 {
400 	t->dy = t->dy2 = 0;
401 	setupfenv(t->r);
402 	sincosl(t->x, &t->y, &t->y2);
403 	t->e = getexcept();
404 	return 0;
405 }
406 
407 #define mp_ff_fi(n) \
408 int mp##n(struct t *t) \
409 { \
410 	int i; \
411 	t->dy = 0; \
412 	setupfenv(t->r); \
413 	t->y = n(t->x, t->x2, &i); \
414 	t->e = getexcept(); \
415 	t->i = i; \
416 	return 0; \
417 }
418 
419 mp_ff_fi(remquo)
420 mp_ff_fi(remquof)
421 mp_ff_fi(remquol)
422 
423 #define mp_fff_f(n) \
424 int mp##n(struct t *t) \
425 { \
426 	t->dy = 0; \
427 	setupfenv(t->r); \
428 	t->y = n(t->x, t->x2, t->x3); \
429 	t->e = getexcept(); \
430 	return 0; \
431 }
432 
433 mp_fff_f(fma)
434 mp_fff_f(fmaf)
435 mp_fff_f(fmal)
436 
437 #define mp_if_f(n) \
438 int mp##n(struct t *t) \
439 { \
440 	t->dy = 0; \
441 	setupfenv(t->r); \
442 	t->y = n(t->i, t->x); \
443 	t->e = getexcept(); \
444 	return 0; \
445 }
446 
447 mp_if_f(jn)
448 mp_if_f(jnf)
449 //mp_if_f(jnl)
450 mp_if_f(yn)
451 mp_if_f(ynf)
452 //mp_if_f(ynl)
453 
454