intrinsic.c
1 //! @file intrinsic.c
2 //! @author J. Marcel van der Veer
3 //
4 //! @section Copyright
5 //
6 // This file is part of VIF - vintage FORTRAN compiler.
7 // Copyright 2020-2024 J. Marcel van der Veer <algol68g@xs4all.nl>.
8 //
9 //! @section License
10 //
11 // This program is free software; you can redistribute it and/or modify it
12 // under the terms of the GNU General Public License as published by the
13 // Free Software Foundation; either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful, but
17 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 // more details. You should have received a copy of the GNU General Public
20 // License along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22 //! @section Synopsis
23 //!
24 //! Compile intrinsic functions.
25
26 #include <vif.h>
27
28 // VIF intrinsic function definitions.
29
30 static INTRINS fun[] = {
31 // CHARACTER
32 {.ffun = "char", .spec = FALSE, .cfun = "_char", .rtyp = CHARACTER, .rlen = 1, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
33 {.ffun = "ichar", .spec = FALSE, .cfun = "_ichar", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = CHARACTER, .alen = 0, .f1 = NULL, .f2 = NULL, .f3 = NULL},
34 {.ffun = "len", .spec = FALSE, .cfun = "(int_4) strlen", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = CHARACTER, .alen = 0, .f1 = NULL, .f2 = NULL, .f3 = NULL},
35 // INTEGER*2
36 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = INTEGER, .rlen = 2, .anum = 1, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
37 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
38 {.ffun = "int", .spec = FALSE, .cfun = "(int_2)", .rtyp = INTEGER, .rlen = 2, .anum = 1, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
39 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = INTEGER, .rlen = 2, .anum = 0, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
40 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = INTEGER, .rlen = 2, .anum = 0, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
41 {.ffun = "mod", .spec = FALSE, .cfun = "_mod", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
42 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
43 //
44 {.ffun = "jabs", .spec = FALSE, .cfun = "_abs", .rtyp = INTEGER, .rlen = 2, .anum = 1, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
45 {.ffun = "jdim", .spec = FALSE, .cfun = "_dim", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
46 {.ffun = "jint", .spec = FALSE, .cfun = "(int_2)", .rtyp = INTEGER, .rlen = 2, .anum = 1, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
47 {.ffun = "jmax", .spec = FALSE, .cfun = "_max", .rtyp = INTEGER, .rlen = 2, .anum = 0, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
48 {.ffun = "jmin", .spec = FALSE, .cfun = "_min", .rtyp = INTEGER, .rlen = 2, .anum = 0, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
49 {.ffun = "jmod", .spec = FALSE, .cfun = "_mod", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
50 {.ffun = "jsign", .spec = FALSE, .cfun = "_sign", .rtyp = INTEGER, .rlen = 2, .anum = 2, .atyp = INTEGER, .alen = 2, .f1 = NULL, .f2 = NULL, .f3 = NULL},
51 // INTEGER*4
52 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
53 {.ffun = "dble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
54 {.ffun = "dfloat", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
55 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = INTEGER, .rlen = 4, .anum = 2, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
56 {.ffun = "float", .spec = FALSE, .cfun = "(real_4)", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
57 {.ffun = "int", .spec = FALSE, .cfun = "(int_4)", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
58 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
59 {.ffun = "max0", .spec = FALSE, .cfun = "_max", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
60 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
61 {.ffun = "min0", .spec = FALSE, .cfun = "_min", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
62 {.ffun = "mod", .spec = FALSE, .cfun = "_mod", .rtyp = INTEGER, .rlen = 4, .anum = 2, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
63 {.ffun = "qext", .spec = FALSE, .cfun = "(real_16)", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
64 {.ffun = "real", .spec = FALSE, .cfun = "(real_4)", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = _xI, .f2 = NULL, .f3 = NULL},
65 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = INTEGER, .rlen = 4, .anum = 2, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
66 {.ffun = "xext", .spec = FALSE, .cfun = "inttox", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
67 //
68 {.ffun = "iabs", .spec = FALSE, .cfun = "_abs", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
69 // INTEGER*8
70 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = INTEGER, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
71 {.ffun = "dble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
72 {.ffun = "dfloat", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
73 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = INTEGER, .rlen = 8, .anum = 2, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
74 {.ffun = "int", .spec = FALSE, .cfun = "(int_8)", .rtyp = INTEGER, .rlen = 8, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
75 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = INTEGER, .rlen = 8, .anum = 0, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
76 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = INTEGER, .rlen = 8, .anum = 0, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
77 {.ffun = "mod", .spec = FALSE, .cfun = "_mod", .rtyp = INTEGER, .rlen = 8, .anum = 2, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
78 {.ffun = "qext", .spec = FALSE, .cfun = "(real_16)", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
79 {.ffun = "real", .spec = FALSE, .cfun = "(real_4)", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
80 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = INTEGER, .rlen = 8, .anum = 2, .atyp = INTEGER, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
81 // REAL*4
82 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
83 {.ffun = "acosh", .spec = FALSE, .cfun = "acoshf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
84 {.ffun = "acos", .spec = FALSE, .cfun = "acosf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacos, .f2 = NULL, .f3 = NULL},
85 {.ffun = "acotan", .spec = FALSE, .cfun = "acotanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacotan, .f2 = NULL, .f3 = NULL},
86 {.ffun = "aint", .spec = FALSE, .cfun = "_aintf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xint, .f2 = NULL, .f3 = NULL},
87 {.ffun = "alog10", .spec = FALSE, .cfun = "log10f", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
88 {.ffun = "alog", .spec = FALSE, .cfun = "logf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog, .f2 = NULL, .f3 = NULL},
89 {.ffun = "anint", .spec = FALSE, .cfun = "_anintf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
90 {.ffun = "asinh", .spec = FALSE, .cfun = "asinhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
91 {.ffun = "asin", .spec = FALSE, .cfun = "asinf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xasin, .f2 = NULL, .f3 = NULL},
92 {.ffun = "atan2", .spec = FALSE, .cfun = "atan2f", .rtyp = REAL, .rlen = 4, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
93 {.ffun = "atanh", .spec = FALSE, .cfun = "atanhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
94 {.ffun = "atan", .spec = FALSE, .cfun = "atanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xatan, .f2 = NULL, .f3 = NULL},
95 {.ffun = "cosh", .spec = FALSE, .cfun = "coshf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
96 {.ffun = "cos", .spec = FALSE, .cfun = "cosf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcos, .f2 = NULL, .f3 = NULL},
97 {.ffun = "cotan", .spec = FALSE, .cfun = "cotanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
98 {.ffun = "dble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xI, .f2 = NULL, .f3 = NULL},
99 {.ffun = "dfloat", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xI, .f2 = NULL, .f3 = NULL},
100 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = REAL, .rlen = 4, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
101 {.ffun = "exp", .spec = FALSE, .cfun = "expf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xexp, .f2 = NULL, .f3 = NULL},
102 {.ffun = "int8", .spec = FALSE, .cfun = "(int_8)", .rtyp = INTEGER, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xint, .f2 = NULL, .f3 = NULL},
103 {.ffun = "int", .spec = FALSE, .cfun = "(int_4)", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xint, .f2 = NULL, .f3 = NULL},
104 {.ffun = "log10", .spec = FALSE, .cfun = "log10f", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
105 {.ffun = "log", .spec = FALSE, .cfun = "logf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog, .f2 = NULL, .f3 = NULL},
106 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 4, .anum = 0, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
107 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = REAL, .rlen = 4, .anum = 0, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
108 {.ffun = "mod", .spec = FALSE, .cfun = "_mod", .rtyp = REAL, .rlen = 4, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
109 {.ffun = "nint", .spec = FALSE, .cfun = "_nintf", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
110 {.ffun = "qext", .spec = FALSE, .cfun = "(real_16)", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
111 {.ffun = "real", .spec = FALSE, .cfun = "", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = _xI, .f2 = NULL, .f3 = NULL},
112 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = REAL, .rlen = 4, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
113 {.ffun = "sinh", .spec = FALSE, .cfun = "sinhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
114 {.ffun = "sin", .spec = FALSE, .cfun = "sinf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsin, .f2 = NULL, .f3 = NULL},
115 {.ffun = "sngl", .spec = FALSE, .cfun = "", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
116 {.ffun = "sqrt", .spec = FALSE, .cfun = "sqrtf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
117 {.ffun = "tanh", .spec = FALSE, .cfun = "tanhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
118 {.ffun = "tan", .spec = FALSE, .cfun = "tanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xtan, .f2 = NULL, .f3 = NULL},
119 {.ffun = "xext", .spec = FALSE, .cfun = "dbltox", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
120 //
121 {.ffun = "amax0", .spec = FALSE, .cfun = "(int_4) _max", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
122 {.ffun = "amax1", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 4, .anum = 0, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
123 {.ffun = "acosf", .spec = TRUE, .cfun = "acosf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacos, .f2 = NULL, .f3 = NULL},
124 {.ffun = "acoshf", .spec = FALSE, .cfun = "acoshf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
125 {.ffun = "acotanf", .spec = TRUE, .cfun = "acotanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xacotan, .f2 = NULL, .f3 = NULL},
126 {.ffun = "asinf", .spec = TRUE, .cfun = "asinf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xasin, .f2 = NULL, .f3 = NULL},
127 {.ffun = "asinhf", .spec = FALSE, .cfun = "asinhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
128 {.ffun = "atan2f", .spec = TRUE, .cfun = "atan2f", .rtyp = REAL, .rlen = 4, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = xatan2, .f3 = NULL},
129 {.ffun = "atanf", .spec = TRUE, .cfun = "atanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xatan, .f2 = NULL, .f3 = NULL},
130 {.ffun = "atanhf", .spec = FALSE, .cfun = "atanhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
131 {.ffun = "cosf", .spec = TRUE, .cfun = "cosf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcos, .f2 = NULL, .f3 = NULL},
132 {.ffun = "coshf", .spec = FALSE, .cfun = "coshf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
133 {.ffun = "cotanf", .spec = FALSE, .cfun = "cotanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
134 {.ffun = "expf", .spec = TRUE, .cfun = "expf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xexp, .f2 = NULL, .f3 = NULL},
135 {.ffun = "log10f", .spec = TRUE, .cfun = "log10f", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
136 {.ffun = "logf", .spec = TRUE, .cfun = "logf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog, .f2 = NULL, .f3 = NULL},
137 {.ffun = "sinf", .spec = TRUE, .cfun = "sinf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsin, .f2 = NULL, .f3 = NULL},
138 {.ffun = "sinhf", .spec = FALSE, .cfun = "sinhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
139 {.ffun = "sqrtf", .spec = TRUE, .cfun = "sqrtf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
140 {.ffun = "tanf", .spec = TRUE, .cfun = "tanf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xtan, .f2 = NULL, .f3 = NULL},
141 {.ffun = "tanhf", .spec = FALSE, .cfun = "tanhf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
142 // REAL*8
143 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
144 {.ffun = "acosh", .spec = FALSE, .cfun = "acosh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
145 {.ffun = "acos", .spec = FALSE, .cfun = "acos", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xacos, .f2 = NULL, .f3 = NULL},
146 {.ffun = "aint", .spec = FALSE, .cfun = "_aintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xint, .f2 = NULL, .f3 = NULL},
147 {.ffun = "alog10", .spec = FALSE, .cfun = "log10f", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 4, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
148 {.ffun = "anint", .spec = FALSE, .cfun = "_anintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
149 {.ffun = "asinh", .spec = FALSE, .cfun = "asinh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
150 {.ffun = "asin", .spec = FALSE, .cfun = "asin", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xasin, .f2 = NULL, .f3 = NULL},
151 {.ffun = "atan2", .spec = FALSE, .cfun = "atan2", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
152 {.ffun = "atanh", .spec = FALSE, .cfun = "atanh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
153 {.ffun = "atan", .spec = FALSE, .cfun = "atan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xatan, .f2 = NULL, .f3 = NULL},
154 {.ffun = "cosh", .spec = FALSE, .cfun = "cosh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
155 {.ffun = "cos", .spec = FALSE, .cfun = "cos", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcos, .f2 = NULL, .f3 = NULL},
156 {.ffun = "cotan", .spec = FALSE, .cfun = "cotan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
157 {.ffun = "dble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xI, .f2 = NULL, .f3 = NULL},
158 {.ffun = "dfloat", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xI, .f2 = NULL, .f3 = NULL},
159 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
160 {.ffun = "dint", .spec = FALSE, .cfun = "_aintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xint, .f2 = NULL, .f3 = NULL},
161 {.ffun = "dint", .spec = FALSE, .cfun = "_aintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xint, .f2 = NULL, .f3 = NULL},
162 {.ffun = "dnint", .spec = FALSE, .cfun = "_anintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
163 {.ffun = "idnint", .spec = FALSE, .cfun = "_anintd", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
164 {.ffun = "exp", .spec = FALSE, .cfun = "exp", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xexp, .f2 = NULL, .f3 = NULL},
165 {.ffun = "int", .spec = FALSE, .cfun = "(int_4)", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xint, .f2 = NULL, .f3 = NULL},
166 {.ffun = "log10", .spec = FALSE, .cfun = "log10", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
167 {.ffun = "log", .spec = FALSE, .cfun = "log", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xlog, .f2 = NULL, .f3 = NULL},
168 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 8, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
169 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = REAL, .rlen = 8, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
170 {.ffun = "mod", .spec = FALSE, .cfun = "_mod", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
171 {.ffun = "nint", .spec = FALSE, .cfun = "_nintd", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
172 {.ffun = "qext", .spec = FALSE, .cfun = "_qext", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xI, .f2 = NULL, .f3 = NULL},
173 {.ffun = "real", .spec = FALSE, .cfun = "(real_4)", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xI, .f2 = NULL, .f3 = NULL},
174 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
175 {.ffun = "sinh", .spec = FALSE, .cfun = "sinh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
176 {.ffun = "sin", .spec = FALSE, .cfun = "sin", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsin, .f2 = NULL, .f3 = NULL},
177 {.ffun = "sngl", .spec = FALSE, .cfun = "(real_4)", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
178 {.ffun = "sqrt", .spec = FALSE, .cfun = "sqrt", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
179 {.ffun = "tanh", .spec = FALSE, .cfun = "tanh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
180 {.ffun = "tan", .spec = FALSE, .cfun = "tan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xtan, .f2 = NULL, .f3 = NULL},
181 {.ffun = "xext", .spec = FALSE, .cfun = "dbltox", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
182 //
183 {.ffun = "dmax0", .spec = FALSE, .cfun = "(int_4) _max", .rtyp = INTEGER, .rlen = 4, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
184 {.ffun = "dmax1", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 8, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
185 {.ffun = "idnint", .spec = FALSE, .cfun = "_nintd", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 8, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
186 {.ffun = "dabs", .spec = FALSE, .cfun = "_abs", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
187 {.ffun = "dacosh", .spec = FALSE, .cfun = "acosh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
188 {.ffun = "dacos", .spec = TRUE, .cfun = "acos", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xacos, .f2 = NULL, .f3 = NULL},
189 {.ffun = "dasinh", .spec = FALSE, .cfun = "asinh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
190 {.ffun = "dasin", .spec = TRUE, .cfun = "asin", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xasin, .f2 = NULL, .f3 = NULL},
191 {.ffun = "datan2", .spec = TRUE, .cfun = "atan2", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
192 {.ffun = "datanh", .spec = FALSE, .cfun = "atanh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
193 {.ffun = "datan", .spec = TRUE, .cfun = "atan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xatan, .f2 = NULL, .f3 = NULL},
194 {.ffun = "dcosh", .spec = FALSE, .cfun = "cosh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
195 {.ffun = "dcos", .spec = TRUE, .cfun = "cos", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcos, .f2 = NULL, .f3 = NULL},
196 {.ffun = "dcotan", .spec = FALSE, .cfun = "cotan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
197 {.ffun = "ddble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
198 {.ffun = "dexp", .spec = TRUE, .cfun = "exp", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xexp, .f2 = NULL, .f3 = NULL},
199 {.ffun = "dlog10", .spec = TRUE, .cfun = "log10", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
200 {.ffun = "dlog", .spec = TRUE, .cfun = "log", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xlog, .f2 = NULL, .f3 = NULL},
201 {.ffun = "dmax", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 8, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
202 {.ffun = "dmin", .spec = FALSE, .cfun = "_min", .rtyp = REAL, .rlen = 8, .anum = 0, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
203 {.ffun = "dmod", .spec = FALSE, .cfun = "_mod", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
204 {.ffun = "dsign", .spec = FALSE, .cfun = "_sign", .rtyp = REAL, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
205 {.ffun = "dsinh", .spec = FALSE, .cfun = "sinh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
206 {.ffun = "dsin", .spec = TRUE, .cfun = "sin", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsin, .f2 = NULL, .f3 = NULL},
207 {.ffun = "dsqrt", .spec = TRUE, .cfun = "sqrt", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
208 {.ffun = "dtanh", .spec = FALSE, .cfun = "tanh", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
209 {.ffun = "dtan", .spec = TRUE, .cfun = "tan", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = xtan, .f2 = NULL, .f3 = NULL},
210 // REAL*16
211 {.ffun = "abs", .spec = FALSE, .cfun = "_abs", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
212 {.ffun = "acosh", .spec = FALSE, .cfun = "acoshq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
213 {.ffun = "acos", .spec = FALSE, .cfun = "acosq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xacos, .f2 = NULL, .f3 = NULL},
214 {.ffun = "aint", .spec = FALSE, .cfun = "_aintd", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xint, .f2 = NULL, .f3 = NULL},
215 {.ffun = "anint", .spec = FALSE, .cfun = "_anintd", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
216 {.ffun = "asinh", .spec = FALSE, .cfun = "asinhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
217 {.ffun = "asin", .spec = FALSE, .cfun = "asinq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xasin, .f2 = NULL, .f3 = NULL},
218 {.ffun = "atan2", .spec = FALSE, .cfun = "atan2q", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
219 {.ffun = "atanh", .spec = FALSE, .cfun = "atanhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
220 {.ffun = "atan", .spec = FALSE, .cfun = "atanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xatan, .f2 = NULL, .f3 = NULL},
221 {.ffun = "cosh", .spec = FALSE, .cfun = "coshq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
222 {.ffun = "cos", .spec = FALSE, .cfun = "cosq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcos, .f2 = NULL, .f3 = NULL},
223 {.ffun = "cotan", .spec = FALSE, .cfun = "cotanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
224 {.ffun = "dble", .spec = FALSE, .cfun = "(real_8)", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
225 {.ffun = "dim", .spec = FALSE, .cfun = "_dim", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
226 {.ffun = "exp", .spec = FALSE, .cfun = "expq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xexp, .f2 = NULL, .f3 = NULL},
227 {.ffun = "int", .spec = FALSE, .cfun = "(int_4)", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xint, .f2 = NULL, .f3 = NULL},
228 {.ffun = "log10", .spec = FALSE, .cfun = "log10q", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
229 {.ffun = "log", .spec = FALSE, .cfun = "logq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xlog, .f2 = NULL, .f3 = NULL},
230 {.ffun = "max", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 16, .anum = 0, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
231 {.ffun = "min", .spec = FALSE, .cfun = "_min", .rtyp = REAL, .rlen = 16, .anum = 0, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
232 {.ffun = "mod", .spec = FALSE, .cfun = "_qmod", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
233 {.ffun = "nint", .spec = FALSE, .cfun = "_nintq", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
234 {.ffun = "qext", .spec = FALSE, .cfun = "", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
235 {.ffun = "qint", .spec = FALSE, .cfun = "_aintq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xint, .f2 = NULL, .f3 = NULL},
236 {.ffun = "qnint", .spec = FALSE, .cfun = "_anintq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = _xnint, .f2 = NULL, .f3 = NULL},
237 {.ffun = "sign", .spec = FALSE, .cfun = "_sign", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
238 {.ffun = "sinh", .spec = FALSE, .cfun = "sinhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
239 {.ffun = "sin", .spec = FALSE, .cfun = "sinq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsin, .f2 = NULL, .f3 = NULL},
240 {.ffun = "sqrt", .spec = FALSE, .cfun = "sqrtq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
241 {.ffun = "tanh", .spec = FALSE, .cfun = "tanhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
242 {.ffun = "tan", .spec = FALSE, .cfun = "tanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xtan, .f2 = NULL, .f3 = NULL},
243 {.ffun = "xext", .spec = FALSE, .cfun = "_quadtox", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
244 //
245 {.ffun = "qabs", .spec = FALSE, .cfun = "_abs", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
246 {.ffun = "qacosh", .spec = FALSE, .cfun = "acoshq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
247 {.ffun = "qacos", .spec = TRUE, .cfun = "acosq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xacos, .f2 = NULL, .f3 = NULL},
248 {.ffun = "qasinh", .spec = FALSE, .cfun = "asinhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
249 {.ffun = "qasin", .spec = TRUE, .cfun = "asinq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xasin, .f2 = NULL, .f3 = NULL},
250 {.ffun = "qatan2", .spec = TRUE, .cfun = "atan2q", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
251 {.ffun = "qatanh", .spec = FALSE, .cfun = "atanhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
252 {.ffun = "qatan", .spec = TRUE, .cfun = "atanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xatan, .f2 = NULL, .f3 = NULL},
253 {.ffun = "qcosh", .spec = FALSE, .cfun = "coshq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
254 {.ffun = "qcos", .spec = TRUE, .cfun = "cosq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcos, .f2 = NULL, .f3 = NULL},
255 {.ffun = "qcotan", .spec = FALSE, .cfun = "cotanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
256 {.ffun = "qdim", .spec = FALSE, .cfun = "_dim", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
257 {.ffun = "qexp", .spec = TRUE, .cfun = "expq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xexp, .f2 = NULL, .f3 = NULL},
258 {.ffun = "qint", .spec = FALSE, .cfun = "_qint", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
259 {.ffun = "qlog10", .spec = TRUE, .cfun = "log10q", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
260 {.ffun = "qlog", .spec = TRUE, .cfun = "logq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xlog, .f2 = NULL, .f3 = NULL},
261 {.ffun = "qmax", .spec = FALSE, .cfun = "_max", .rtyp = REAL, .rlen = 16, .anum = 0, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
262 {.ffun = "qmin", .spec = FALSE, .cfun = "_min", .rtyp = REAL, .rlen = 16, .anum = 0, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
263 {.ffun = "qmod", .spec = FALSE, .cfun = "_qmod", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
264 {.ffun = "qnint", .spec = FALSE, .cfun = "_qnint", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
265 {.ffun = "qsign", .spec = FALSE, .cfun = "_sign", .rtyp = REAL, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
266 {.ffun = "qsinh", .spec = FALSE, .cfun = "sinhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
267 {.ffun = "qsin", .spec = TRUE, .cfun = "sinq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsin, .f2 = NULL, .f3 = NULL},
268 {.ffun = "qsqrt", .spec = TRUE, .cfun = "sqrtq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
269 {.ffun = "qtanh", .spec = FALSE, .cfun = "tanhq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
270 {.ffun = "qtan", .spec = TRUE, .cfun = "tanq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 16, .f1 = xtan, .f2 = NULL, .f3 = NULL},
271 // REAL*32
272 {.ffun = "abs", .spec = FALSE, .cfun = "xabs", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
273 {.ffun = "acosh", .spec = FALSE, .cfun = "xacosh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
274 {.ffun = "acos", .spec = FALSE, .cfun = "xacos", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xacos, .f2 = NULL, .f3 = NULL},
275 {.ffun = "asinh", .spec = FALSE, .cfun = "xasinh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
276 {.ffun = "asin", .spec = FALSE, .cfun = "xasin", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xasin, .f2 = NULL, .f3 = NULL},
277 {.ffun = "atan2", .spec = FALSE, .cfun = "xatan2", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
278 {.ffun = "atanh", .spec = FALSE, .cfun = "xatanh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
279 {.ffun = "atan", .spec = FALSE, .cfun = "xatan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xatan, .f2 = NULL, .f3 = NULL},
280 {.ffun = "cosh", .spec = FALSE, .cfun = "xcosh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
281 {.ffun = "cos", .spec = FALSE, .cfun = "xcos", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcos, .f2 = NULL, .f3 = NULL},
282 {.ffun = "cotan", .spec = FALSE, .cfun = "xcotan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
283 {.ffun = "dble", .spec = FALSE, .cfun = "xtodbl", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
284 {.ffun = "exp", .spec = FALSE, .cfun = "xexp", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xexp, .f2 = NULL, .f3 = NULL},
285 {.ffun = "int", .spec = FALSE, .cfun = "_xint4", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
286 {.ffun = "log10", .spec = FALSE, .cfun = "xlog10", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
287 {.ffun = "log", .spec = FALSE, .cfun = "xlog", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xlog, .f2 = NULL, .f3 = NULL},
288 {.ffun = "max", .spec = FALSE, .cfun = "_xmax", .rtyp = REAL, .rlen = 32, .anum = 0, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
289 {.ffun = "min", .spec = FALSE, .cfun = "_xmin", .rtyp = REAL, .rlen = 32, .anum = 0, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
290 {.ffun = "mod", .spec = FALSE, .cfun = "_xmod", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
291 {.ffun = "nint", .spec = FALSE, .cfun = "_xnint4", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
292 {.ffun = "qext", .spec = FALSE, .cfun = "_xtoquad", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
293 {.ffun = "real", .spec = FALSE, .cfun = "(real_4) xtodbl", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
294 {.ffun = "sign", .spec = FALSE, .cfun = "_xsgn", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
295 {.ffun = "sinh", .spec = FALSE, .cfun = "xsinh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
296 {.ffun = "sin", .spec = FALSE, .cfun = "xsin", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsin, .f2 = NULL, .f3 = NULL},
297 {.ffun = "sqrt", .spec = FALSE, .cfun = "xsqrt", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
298 {.ffun = "tanh", .spec = FALSE, .cfun = "xtanh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
299 {.ffun = "tan", .spec = FALSE, .cfun = "xtan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xtan, .f2 = NULL, .f3 = NULL},
300 {.ffun = "xext", .spec = FALSE, .cfun = "", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
301 //
302 {.ffun = "qext", .spec = FALSE, .cfun = "_xtoquad", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
303 {.ffun = "real", .spec = FALSE, .cfun = "(real_4) xtodbl", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
304 {.ffun = "xabs", .spec = FALSE, .cfun = "xabs", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
305 {.ffun = "xacosh", .spec = FALSE, .cfun = "xacosh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xacosh, .f2 = NULL, .f3 = NULL},
306 {.ffun = "xacos", .spec = TRUE, .cfun = "xacos", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xacos, .f2 = NULL, .f3 = NULL},
307 {.ffun = "xasinh", .spec = FALSE, .cfun = "xasinh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xasinh, .f2 = NULL, .f3 = NULL},
308 {.ffun = "xasin", .spec = TRUE, .cfun = "xasin", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xasin, .f2 = NULL, .f3 = NULL},
309 {.ffun = "xatan2", .spec = TRUE, .cfun = "xatan2", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
310 {.ffun = "xatanh", .spec = FALSE, .cfun = "xatanh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xatanh, .f2 = NULL, .f3 = NULL},
311 {.ffun = "xatan", .spec = TRUE, .cfun = "xatan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xatan, .f2 = NULL, .f3 = NULL},
312 {.ffun = "xcosh", .spec = FALSE, .cfun = "xcosh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcosh, .f2 = NULL, .f3 = NULL},
313 {.ffun = "xcos", .spec = TRUE, .cfun = "xcos", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcos, .f2 = NULL, .f3 = NULL},
314 {.ffun = "xcotan", .spec = FALSE, .cfun = "xcotan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xcotan, .f2 = NULL, .f3 = NULL},
315 {.ffun = "xdble", .spec = FALSE, .cfun = "xtodbl", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
316 {.ffun = "xexp", .spec = FALSE, .cfun = "xexp", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xexp, .f2 = NULL, .f3 = NULL},
317 {.ffun = "xext", .spec = FALSE, .cfun = "", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
318 {.ffun = "xint", .spec = FALSE, .cfun = "_xint4", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
319 {.ffun = "xlog10", .spec = TRUE, .cfun = "xlog10", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xlog10, .f2 = NULL, .f3 = NULL},
320 {.ffun = "xlog", .spec = TRUE, .cfun = "xlog", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xlog, .f2 = NULL, .f3 = NULL},
321 {.ffun = "xmax", .spec = FALSE, .cfun = "_xmax", .rtyp = REAL, .rlen = 32, .anum = 0, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
322 {.ffun = "xmin", .spec = FALSE, .cfun = "_xmin", .rtyp = REAL, .rlen = 32, .anum = 0, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
323 {.ffun = "xmod", .spec = FALSE, .cfun = "_xmod", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
324 {.ffun = "xnint", .spec = FALSE, .cfun = "_xnint4", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
325 {.ffun = "xsign", .spec = FALSE, .cfun = "_xsgn", .rtyp = REAL, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
326 {.ffun = "xsinh", .spec = FALSE, .cfun = "xsinh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsinh, .f2 = NULL, .f3 = NULL},
327 {.ffun = "xsin", .spec = TRUE, .cfun = "xsin", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsin, .f2 = NULL, .f3 = NULL},
328 {.ffun = "xsqrt", .spec = TRUE, .cfun = "xsqrt", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xsqrt, .f2 = NULL, .f3 = NULL},
329 {.ffun = "xtanh", .spec = FALSE, .cfun = "xtanh", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xtanh, .f2 = NULL, .f3 = NULL},
330 {.ffun = "xtan", .spec = TRUE, .cfun = "xtan", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 32, .f1 = xtan, .f2 = NULL, .f3 = NULL},
331 // COMPLEX*8
332 {.ffun = "aimag", .spec = FALSE, .cfun = "cimagf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
333 {.ffun = "cmplx", .spec = FALSE, .cfun = "CMPLXF", .rtyp = COMPLEX, .rlen = 8, .anum = 2, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
334 {.ffun = "cmplx", .spec = FALSE, .cfun = "(complex_8)", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 4, .f1 = NULL, .f2 = NULL, .f3 = NULL},
335 {.ffun = "conjg", .spec = FALSE, .cfun = "conjf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
336 {.ffun = "imag", .spec = FALSE, .cfun = "cimagf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
337 {.ffun = "real", .spec = FALSE, .cfun = "crealf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
338 //
339 {.ffun = "int", .spec = FALSE, .cfun = "(int_4) crealf", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
340 {.ffun = "abs", .spec = FALSE, .cfun = "cabsf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
341 {.ffun = "cos", .spec = FALSE, .cfun = "ccosf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
342 {.ffun = "exp", .spec = FALSE, .cfun = "cexpf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
343 {.ffun = "log", .spec = FALSE, .cfun = "clogf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
344 {.ffun = "sin", .spec = FALSE, .cfun = "csinf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
345 {.ffun = "sqrt", .spec = FALSE, .cfun = "csqrtf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
346 {.ffun = "tan", .spec = FALSE, .cfun = "ctanf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
347 //
348 {.ffun = "cint", .spec = FALSE, .cfun = "(int_4) crealf", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
349 {.ffun = "cabs", .spec = FALSE, .cfun = "cabsf", .rtyp = REAL, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
350 {.ffun = "ccos", .spec = FALSE, .cfun = "ccosf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
351 {.ffun = "cexp", .spec = FALSE, .cfun = "cexpf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
352 {.ffun = "clog", .spec = FALSE, .cfun = "clogf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
353 {.ffun = "csin", .spec = FALSE, .cfun = "csinf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
354 {.ffun = "csqrt", .spec = FALSE, .cfun = "csqrtf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
355 {.ffun = "ctan", .spec = FALSE, .cfun = "ctanf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
356 //
357 {.ffun = "ccosf", .spec = TRUE, .cfun = "ccosf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
358 {.ffun = "cexpf", .spec = TRUE, .cfun = "cexpf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
359 {.ffun = "clogf", .spec = TRUE, .cfun = "clogf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
360 {.ffun = "csinf", .spec = TRUE, .cfun = "csinf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
361 {.ffun = "csqrtf", .spec = TRUE, .cfun = "csqrtf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
362 {.ffun = "ctanf", .spec = TRUE, .cfun = "ctanf", .rtyp = COMPLEX, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
363 // COMPLEX*16
364 {.ffun = "cmplx", .spec = FALSE, .cfun = "(complex_16)", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
365 {.ffun = "dcmplx", .spec = FALSE, .cfun = "(complex_16)", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
366 {.ffun = "cmplx", .spec = FALSE, .cfun = "CMPLX", .rtyp = COMPLEX, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
367 {.ffun = "dcmplx", .spec = FALSE, .cfun = "CMPLX", .rtyp = COMPLEX, .rlen = 16, .anum = 2, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
368 {.ffun = "conjg", .spec = FALSE, .cfun = "conj", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
369 {.ffun = "real", .spec = FALSE, .cfun = "creal", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
370 {.ffun = "imag", .spec = FALSE, .cfun = "cimag", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
371 //
372 {.ffun = "int", .spec = FALSE, .cfun = "(int_4) creal", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
373 {.ffun = "abs", .spec = FALSE, .cfun = "cabs", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
374 {.ffun = "cos", .spec = FALSE, .cfun = "ccos", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
375 {.ffun = "exp", .spec = FALSE, .cfun = "cexp", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
376 {.ffun = "log", .spec = FALSE, .cfun = "clog", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
377 {.ffun = "sin", .spec = FALSE, .cfun = "csin", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
378 {.ffun = "sqrt", .spec = FALSE, .cfun = "csqrt", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
379 {.ffun = "tan", .spec = FALSE, .cfun = "ctan", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
380 //
381 {.ffun = "cint", .spec = FALSE, .cfun = "(int_4) creal", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
382 {.ffun = "cabs", .spec = FALSE, .cfun = "cabs", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
383 {.ffun = "ccos", .spec = FALSE, .cfun = "ccos", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
384 {.ffun = "cexp", .spec = FALSE, .cfun = "cexp", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
385 {.ffun = "clog", .spec = FALSE, .cfun = "clog", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
386 {.ffun = "csin", .spec = FALSE, .cfun = "csin", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
387 {.ffun = "csqrt", .spec = FALSE, .cfun = "csqrt", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
388 {.ffun = "ctan", .spec = FALSE, .cfun = "ctan", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
389 //
390 {.ffun = "dble", .spec = FALSE, .cfun = "creal", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
391 {.ffun = "dimag", .spec = FALSE, .cfun = "cimag", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
392 {.ffun = "dreal", .spec = FALSE, .cfun = "creal", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
393 {.ffun = "dconjg", .spec = FALSE, .cfun = "conj", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
394 //
395 {.ffun = "cdint", .spec = FALSE, .cfun = "(int_4) creal", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
396 {.ffun = "cdabs", .spec = FALSE, .cfun = "cabs", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
397 {.ffun = "cdcos", .spec = TRUE, .cfun = "ccos", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
398 {.ffun = "cdexp", .spec = TRUE, .cfun = "cexp", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
399 {.ffun = "cdlog", .spec = TRUE, .cfun = "clog", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
400 {.ffun = "cdsin", .spec = TRUE, .cfun = "csin", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
401 {.ffun = "cdsqrt", .spec = TRUE, .cfun = "csqrt", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
402 {.ffun = "cdtan", .spec = TRUE, .cfun = "ctan", .rtyp = COMPLEX, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
403 {.ffun = "cdabs", .spec = FALSE, .cfun = "_zabs_16", .rtyp = REAL, .rlen = 8, .anum = 1, .atyp = REAL, .alen = 8, .f1 = NULL, .f2 = NULL, .f3 = NULL},
404 // COMPLEX*32
405 {.ffun = "cmplx", .spec = FALSE, .cfun = "(complex_32)", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
406 {.ffun = "qcmplx", .spec = FALSE, .cfun = "(complex_32)", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
407 {.ffun = "cmplx", .spec = FALSE, .cfun = "CMPLXQ", .rtyp = COMPLEX, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
408 {.ffun = "qcmplx", .spec = FALSE, .cfun = "CMPLXQ", .rtyp = COMPLEX, .rlen = 32, .anum = 2, .atyp = REAL, .alen = 16, .f1 = NULL, .f2 = NULL, .f3 = NULL},
409 {.ffun = "conjg", .spec = FALSE, .cfun = "conjq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
410 {.ffun = "imag", .spec = FALSE, .cfun = "cimagq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
411 {.ffun = "real", .spec = FALSE, .cfun = "crealq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
412 //
413 {.ffun = "int", .spec = FALSE, .cfun = "(int_4) crealq", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
414 {.ffun = "abs", .spec = FALSE, .cfun = "cabsq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
415 {.ffun = "cos", .spec = FALSE, .cfun = "ccosq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
416 {.ffun = "exp", .spec = FALSE, .cfun = "cexpq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
417 {.ffun = "log", .spec = FALSE, .cfun = "clogq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
418 {.ffun = "sin", .spec = FALSE, .cfun = "csinq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
419 {.ffun = "sqrt", .spec = FALSE, .cfun = "csqrtq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
420 {.ffun = "tan", .spec = FALSE, .cfun = "ctanq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
421 //
422 {.ffun = "cint", .spec = FALSE, .cfun = "(int_4) crealq", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
423 {.ffun = "cabs", .spec = FALSE, .cfun = "cabsq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
424 {.ffun = "ccos", .spec = FALSE, .cfun = "ccosq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
425 {.ffun = "cexp", .spec = FALSE, .cfun = "cexpq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
426 {.ffun = "clog", .spec = FALSE, .cfun = "clogq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
427 {.ffun = "csin", .spec = FALSE, .cfun = "csinq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
428 {.ffun = "csqrt", .spec = FALSE, .cfun = "csqrtq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
429 {.ffun = "ctan", .spec = FALSE, .cfun = "ctanq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
430 //
431 {.ffun = "qconjg", .spec = FALSE, .cfun = "conjq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
432 {.ffun = "qimag", .spec = FALSE, .cfun = "cimagq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
433 {.ffun = "qreal", .spec = FALSE, .cfun = "crealq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
434 //
435 {.ffun = "cqint", .spec = FALSE, .cfun = "(int_4) crealq", .rtyp = INTEGER, .rlen = 4, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
436 {.ffun = "cqabs", .spec = FALSE, .cfun = "cabsq", .rtyp = REAL, .rlen = 16, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
437 {.ffun = "cqcos", .spec = TRUE, .cfun = "ccosq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxcos},
438 {.ffun = "cqexp", .spec = TRUE, .cfun = "cexpq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxexp},
439 {.ffun = "cqlog", .spec = TRUE, .cfun = "clogq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxlog},
440 {.ffun = "cqsin", .spec = TRUE, .cfun = "csinq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsin},
441 {.ffun = "cqsqrt", .spec = TRUE, .cfun = "csqrtq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxsqrt},
442 {.ffun = "cqtan", .spec = TRUE, .cfun = "ctanq", .rtyp = COMPLEX, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = cxtan},
443 // COMPLEX*64
444 {.ffun = "cmplx", .spec = FALSE, .cfun = "CMPLXX", .rtyp = COMPLEX, .rlen = 64, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
445 {.ffun = "conjg", .spec = FALSE, .cfun = "cxconj", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
446 {.ffun = "imag", .spec = FALSE, .cfun = "cxim", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
447 {.ffun = "real", .spec = FALSE, .cfun = "cxre", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
448 //
449 {.ffun = "abs", .spec = FALSE, .cfun = "cxabs", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
450 {.ffun = "cos", .spec = FALSE, .cfun = "cxcos", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
451 {.ffun = "exp", .spec = FALSE, .cfun = "cxexp", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
452 {.ffun = "log", .spec = FALSE, .cfun = "cxlog", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
453 {.ffun = "sin", .spec = FALSE, .cfun = "cxsin", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
454 {.ffun = "sqrt", .spec = FALSE, .cfun = "cxsqrt", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
455 {.ffun = "tan", .spec = FALSE, .cfun = "cxtan", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
456 //
457 {.ffun = "cabs", .spec = FALSE, .cfun = "cxabs", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
458 {.ffun = "ccos", .spec = FALSE, .cfun = "cxcos", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
459 {.ffun = "cexp", .spec = FALSE, .cfun = "cxexp", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
460 {.ffun = "clog", .spec = FALSE, .cfun = "cxlog", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
461 {.ffun = "csin", .spec = FALSE, .cfun = "cxsin", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
462 {.ffun = "csqrt", .spec = FALSE, .cfun = "cxsqrt", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
463 {.ffun = "ctan", .spec = FALSE, .cfun = "cxtan", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
464 //
465 {.ffun = "xcmplx", .spec = FALSE, .cfun = "CMPLXX", .rtyp = COMPLEX, .rlen = 64, .anum = 2, .atyp = REAL, .alen = 32, .f1 = NULL, .f2 = NULL, .f3 = NULL},
466 {.ffun = "xconjg", .spec = FALSE, .cfun = "cxconj", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
467 {.ffun = "ximag", .spec = FALSE, .cfun = "cxim", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
468 {.ffun = "xreal", .spec = FALSE, .cfun = "cxre", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
469 //
470 {.ffun = "cxabs", .spec = FALSE, .cfun = "cxabs", .rtyp = REAL, .rlen = 32, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
471 {.ffun = "cxcos", .spec = TRUE, .cfun = "cxcos", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
472 {.ffun = "cxexp", .spec = TRUE, .cfun = "cxexp", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
473 {.ffun = "cxlog", .spec = TRUE, .cfun = "cxlog", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
474 {.ffun = "cxsin", .spec = TRUE, .cfun = "cxsin", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
475 {.ffun = "cxsqrt", .spec = TRUE, .cfun = "cxsqrt", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
476 {.ffun = "cxtan", .spec = TRUE, .cfun = "cxtan", .rtyp = COMPLEX, .rlen = 64, .anum = 1, .atyp = COMPLEX, .alen = 64, .f1 = NULL, .f2 = NULL, .f3 = NULL},
477 // End of list
478 {.ffun = NULL, .spec = FALSE, .cfun = NULL, .rtyp = NOTYPE, .rlen = 0, .anum = 0, .atyp = NOTYPE, .alen = 0, .f1 = NULL, .f2 = NULL, .f3 = NULL}
479 };
480
481 int_4 is_intrins (char *name)
482 {
483 for (int_4 k = 0; fun[k].ffun != NULL; k++) {
484 if (EQUAL (name, fun[k].ffun)) {
485 return TRUE;
486 }
487 }
488 return FALSE;
489 }
490
491 int_4 is_specific (char *name)
492 {
493 // Match name for table to approve for INTRINSIC statement.
494 for (int_4 k = 0; fun[k].ffun != NULL; k++) {
495 if (EQUAL (name, fun[k].ffun)) {
496 return fun[k].spec;
497 }
498 }
499 return FALSE;
500 }
501
502 int_4 intrinsic_call (char *name, EXPR * loc)
503 {
504 EXPR lhs, rhs;
505 // If 'name' is not an intrinsic function, stop here.
506 if (! is_intrins (name)) {
507 return FALSE;
508 }
509 //
510 memset (loc, 0, sizeof (EXPR));
511 (void) scan (NULL);
512 if (! TOKEN ("(")) {
513 UNSCAN;
514 return FALSE;
515 }
516 (void) scan (NULL);
517 express (&lhs, NOTYPE, 0);
518 if (!valid_expr (&lhs)) {
519 return FALSE;
520 }
521 (void) scan (NULL);
522 if (!TOKEN (",") && (lhs.mode.type == CHARACTER)) {
523 // 1 operand, CHARACTER, length independent.
524 UNSCAN;
525 for (int_4 k = 0; fun[k].ffun != NULL; k++) {
526 INTRINS *F = &fun[k];
527 if (EQUAL (name, F->ffun) && (lhs.mode.type == F->atyp)) {
528 _srecordf (loc->str, "%s (%s)", F->cfun, lhs.str);
529 loc->mode = (MODE) { .type = F->rtyp,.len = F->rlen,.dim = 0};
530 (void) scan (")");
531 return TRUE;
532 }
533 }
534 RECORD str;
535 _srecordf (str, "%s (%s)", name, qtype (&(lhs.mode)));
536 ERROR (2001, "undefined", str);
537 (void) scan (")");
538 return FALSE;
539 } else if (!TOKEN (",")) {
540 // 1 operand.
541 UNSCAN;
542 for (int_4 k = 0; fun[k].ffun != NULL; k++) {
543 INTRINS *F = &fun[k];
544 if (EQUAL (name, F->ffun) && F->anum == 1 && accept_mode (lhs.mode.type, lhs.mode.len, F->atyp, F->alen)) {
545 if (fold_intrinsic (F, &lhs, NULL)) {
546 _srecordf (loc->str, "%s", lhs.str);
547 loc->variant = EXPR_CONST;
548 loc->mode = (MODE) { .type = F->rtyp, .len = _max (F->rlen, lhs.mode.len), .dim = 0};
549 } else {
550 _srecordf (loc->str, "%s (%s)", F->cfun, lhs.str);
551 loc->mode = (MODE) { .type = F->rtyp, .len = F->rlen, .dim = 0};
552 }
553 (void) scan (")");
554 return TRUE;
555 }
556 }
557 RECORD str;
558 _srecordf (str, "%s (%s)", name, qtype (&(lhs.mode)));
559 ERROR (2002, "undefined", str);
560 (void) scan (")");
561 return FALSE;
562 } else {
563 // >= 2 operands
564 (void) scan (NULL);
565 express (&rhs, NOTYPE, 0);
566 if (!valid_expr (&rhs)) {
567 return FALSE;
568 }
569 int_4 llen = lhs.mode.len, rlen = rhs.mode.len;
570 if ((lhs.variant == EXPR_CONST || rhs.variant == EXPR_CONST)) {
571 // Cross terms involving constants - adapt to non-constant.
572 if (lhs.variant != EXPR_CONST) {
573 rlen = llen;
574 } else if (rhs.variant != EXPR_CONST) {
575 llen = rlen;
576 } else {
577 llen = rlen = _max (llen, rlen);
578 }
579 } else {
580 llen = rlen = _max (llen, rlen);
581 }
582 for (int_4 k = 0; fun[k].ffun != NULL; k++) {
583 INTRINS *F = &fun[k];
584 if (EQUAL (name, F->ffun) && F->anum != 1 && accept_mode (lhs.mode.type, lhs.mode.len, F->atyp, F->alen) && accept_mode (rhs.mode.type, rhs.mode.len, F->atyp, F->alen)) {
585 loc->mode = (MODE) { .type = F->rtyp,.len = F->rlen,.dim = 0};
586 (void) scan (NULL);
587 if (TOKEN (")") && (F->anum == 2 || F->anum == 0)) {
588 // 2 operands
589 if (fold_intrinsic (F, &lhs, &rhs)) {
590 _srecordf (loc->str, "%s", lhs.str);
591 loc->variant = EXPR_CONST;
592 loc->mode = (MODE) { .type = F->rtyp, .len = _max (lhs.mode.len, rhs.mode.len) , .dim = 0};
593 } else {
594 _srecordf (loc->str, "%s (%s, %s)", F->cfun, lhs.str, rhs.str);
595 }
596 return TRUE;
597 } else if (TOKEN (",") && F->anum == 0) {
598 // > 2 operands
599 RECORD idf, str, tmp;
600 _srecordf (idf, "%s", edit_tmp (nloctmps++));
601 add_local (idf, loc->mode.type, loc->mode.len, UNIQ, NOPATCH, NOARG, LOCAL, TEMP);
602 str[0] = '\0';
603 _srecordf (str, "%s = %s (%s, %s)", idf, F->cfun, lhs.str, rhs.str);
604 while (TOKEN (",")) {
605 (void) scan (NULL);
606 express (&rhs, NOTYPE, 0);
607 (void) scan (NULL);
608 if (TOKEN (",")) {
609 _srecordf (tmp, ", %s = %s (%s, %s)", idf, F->cfun, idf, rhs.str);
610 } else if (TOKEN (")")) {
611 _srecordf (tmp, ", %s (%s, %s)", F->cfun, idf, rhs.str);
612 } else {
613 EXPECT (2003, ", or )");
614 }
615 bufcat (str, tmp, RECLN);
616 }
617 _srecordf (loc->str, "(%s)", str);
618 return TRUE;
619 } else {
620 SYNTAX (2004, "number of operands");
621 }
622 }
623 }
624 RECORD str;
625 _srecordf (str, "%s (%s, %s)", name, qtype (&(lhs.mode)), qtype (&(rhs.mode)));
626 ERROR (2005, "undefined", str);
627 (void) scan (")");
628 return FALSE;
629 }
630 }
© 2002-2024 J.M. van der Veer (jmvdveer@xs4all.nl)
|