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)