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


© 2002-2025 J.M. van der Veer (jmvdveer@xs4all.nl)