home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / g-format / part3 / gfloat / f77 / src / f77pass1 / conv.c.diff < prev    next >
Encoding:
Text File  |  1986-11-30  |  23.8 KB  |  1,070 lines

  1. *** ../f77/src/f77pass1/conv.c.orig    Tue Oct 29 15:15:46 1985
  2. --- ../f77/src/f77pass1/conv.c    Tue Oct 29 15:22:23 1985
  3. ***************
  4. *** 53,59
  5.   
  6.   
  7.   /*  The following constants are used to check the limits of  */
  8. ! /*  conversions.  Dmaxword is the largest double precision   */
  9.   /*  number which can be converted to a two-byte integer      */
  10.   /*  without overflow.  Dminword is the smallest double       */
  11.   /*  precision value which can be converted to a two-byte     */
  12.  
  13. --- 53,61 -----
  14.   
  15.   
  16.   /*  The following constants are used to check the limits of  */
  17. ! /*  conversions.                                 */
  18. ! /*  Dmaxword is the largest double precision                    */
  19.   /*  number which can be converted to a two-byte integer      */
  20.   /*  without overflow.  Dminword is the smallest double       */
  21.   /*  precision value which can be converted to a two-byte     */
  22. ***************
  23. *** 57,66
  24.   /*  number which can be converted to a two-byte integer      */
  25.   /*  without overflow.  Dminword is the smallest double       */
  26.   /*  precision value which can be converted to a two-byte     */
  27. ! /*  integer without overflow.  Dmaxint and dminint are the   */
  28. ! /*  analogous values for four-byte integers.                 */
  29.   LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff };
  30.   LOCAL long dminword[] = { 0x00ffc800, 0xffffffff };
  31.   
  32.  
  33. --- 59,66 -----
  34.   /*  number which can be converted to a two-byte integer      */
  35.   /*  without overflow.  Dminword is the smallest double       */
  36.   /*  precision value which can be converted to a two-byte     */
  37. ! /*  integer without overflow.                                */
  38. ! #ifndef GFLOAT
  39.   LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff };
  40.   LOCAL long dminword[] = { 0x00ffc800, 0xffffffff };
  41.   #else GFLOAT
  42. ***************
  43. *** 63,68
  44.   
  45.   LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff };
  46.   LOCAL long dminword[] = { 0x00ffc800, 0xffffffff };
  47.   
  48.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  49.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  50.  
  51. --- 63,72 -----
  52.   #ifndef GFLOAT
  53.   LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff };
  54.   LOCAL long dminword[] = { 0x00ffc800, 0xffffffff };
  55. + #else GFLOAT
  56. + LOCAL long dmaxword[] = { 0xffdf40ff, 0xffffffff };
  57. + LOCAL long dminword[] = { 0x0010c100, 0x00000000 };
  58. + #endif GFLOAT
  59.   
  60.   /*  Dmaxint and dminint are the limits for double values     */
  61.   /*  converted to four-byte integers.                         */
  62. ***************
  63. *** 64,69
  64.   LOCAL long dmaxword[] = { 0xfeff47ff, 0xffffffff };
  65.   LOCAL long dminword[] = { 0x00ffc800, 0xffffffff };
  66.   
  67.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  68.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  69.   
  70.  
  71. --- 68,79 -----
  72.   LOCAL long dminword[] = { 0x0010c100, 0x00000000 };
  73.   #endif GFLOAT
  74.   
  75. + /*  Dmaxint and dminint are the limits for double values     */
  76. + /*  converted to four-byte integers.                         */
  77. + #ifdef GFLOAT
  78. + LOCAL long dmaxint[]  = { 0xffff41ff, 0xffffffdf };
  79. + LOCAL long dminint[]  = { 0x0000c200, 0xffff0010 };
  80. + #else GFLOAT
  81.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  82.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  83.   #endif GFLOAT
  84. ***************
  85. *** 66,71
  86.   
  87.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  88.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  89.   
  90.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  91.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  92.  
  93. --- 76,82 -----
  94.   #else GFLOAT
  95.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  96.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  97. + #endif GFLOAT
  98.   
  99.   #ifndef GFLOAT
  100.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  101. ***************
  102. *** 67,72
  103.   LOCAL long dmaxint[]  = { 0xffff4fff, 0xfffffeff };
  104.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  105.   
  106.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  107.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  108.   
  109.  
  110. --- 78,84 -----
  111.   LOCAL long dminint[]  = { 0x0000d000, 0xffff00ff };
  112.   #endif GFLOAT
  113.   
  114. + #ifndef GFLOAT
  115.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  116.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  117.   #else GFLOAT
  118. ***************
  119. *** 69,74
  120.   
  121.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  122.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  123.   
  124.   
  125.   
  126.  
  127. --- 81,89 -----
  128.   #ifndef GFLOAT
  129.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  130.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  131. + #else GFLOAT
  132. + LOCAL long dmaxreal[] = { 0xffff47f7, 0xffffffff };
  133. + LOCAL long dminreal[] = { 0xffffc7f7, 0xffffffff };
  134.   
  135.   /*  Fmaxword and fminword are limits for float to short.     */
  136.   LOCAL long fmaxword[] = { 0xff7f47ff };
  137. ***************
  138. *** 70,75
  139.   LOCAL long dmaxreal[] = { 0xffff7fff, 0xffff7fff };
  140.   LOCAL long dminreal[] = { 0xffffffff, 0xffff7fff };
  141.   
  142.   
  143.   
  144.   /*  The routines which follow are used to convert  */
  145.  
  146. --- 85,98 -----
  147.   LOCAL long dmaxreal[] = { 0xffff47f7, 0xffffffff };
  148.   LOCAL long dminreal[] = { 0xffffc7f7, 0xffffffff };
  149.   
  150. + /*  Fmaxword and fminword are limits for float to short.     */
  151. + LOCAL long fmaxword[] = { 0xff7f47ff };
  152. + LOCAL long fminword[] = { 0x00ffc800 };
  153. + /*  Fmaxint and fminint are the limits for float to int.     */
  154. + LOCAL long fmaxint[]  = { 0xffff4fff };
  155. + LOCAL long fminint[]  = { 0x0000d000 };
  156. + #endif GFLOAT
  157.   
  158.   
  159.   /*  The routines which follow are used to convert  */
  160. ***************
  161. *** 188,193
  162.     register long *rp;
  163.     register double *minp;
  164.     register double *maxp;
  165.     realvalue x;
  166.   
  167.     switch (cp->vtype)
  168.  
  169. --- 211,220 -----
  170.     register long *rp;
  171.     register double *minp;
  172.     register double *maxp;
  173. + #ifdef GFLOAT
  174. +   register float *minpf;
  175. +   register float *maxpf;
  176. + #endif GFLOAT
  177.     realvalue x;
  178.   
  179.     switch (cp->vtype)
  180. ***************
  181. *** 222,227
  182.         break;
  183.   
  184.       case TYREAL:
  185.       case TYDREAL:
  186.       case TYCOMPLEX:
  187.       case TYDCOMPLEX:
  188.  
  189. --- 249,255 -----
  190.         break;
  191.   
  192.       case TYREAL:
  193. + #ifndef GFLOAT
  194.       case TYDREAL:
  195.   #endif GFLOAT
  196.       case TYCOMPLEX:
  197. ***************
  198. *** 223,228
  199.   
  200.       case TYREAL:
  201.       case TYDREAL:
  202.       case TYCOMPLEX:
  203.       case TYDCOMPLEX:
  204.         minp = (double *) dminword;
  205.  
  206. --- 251,257 -----
  207.       case TYREAL:
  208.   #ifndef GFLOAT
  209.       case TYDREAL:
  210. + #endif GFLOAT
  211.       case TYCOMPLEX:
  212.   #ifdef GFLOAT
  213.         minpf = (float *) fminword;
  214. ***************
  215. *** 224,229
  216.       case TYREAL:
  217.       case TYDREAL:
  218.       case TYCOMPLEX:
  219.       case TYDCOMPLEX:
  220.         minp = (double *) dminword;
  221.         maxp = (double *) dmaxword;
  222.  
  223. --- 253,290 -----
  224.       case TYDREAL:
  225.   #endif GFLOAT
  226.       case TYCOMPLEX:
  227. + #ifdef GFLOAT
  228. +       minpf = (float *) fminword;
  229. +       maxpf = (float *) fmaxword;
  230. +       rp = (long *) &(cp->const.cr[0]);
  231. +       x.q.word1 = rp[0];
  232. +       if (x.f.sign == 1 && x.f.exp == 0)
  233. +     {
  234. +       if (badvalue <= 1)
  235. +         {
  236. +           badvalue = 2;
  237. +           err(reserved);
  238. +         }
  239. +       p = errnode();
  240. +     }
  241. +       else if ((float) x.q.word1 >= *minpf && (float) x.q.word1 <= *maxpf)
  242. +     {
  243. +       p = (expptr) mkconst(TYSHORT);
  244. +       p->constblock.const.ci = x.q.word1;
  245. +     }
  246. +       else
  247. +     {
  248. +       if (badvalue <= 1)
  249. +         {
  250. +           badvalue = 2;
  251. +           err(toobig);
  252. +         }
  253. +       p = errnode();
  254. +     }
  255. +       break;
  256. +     case TYDREAL:
  257. + #endif GFLOAT
  258.       case TYDCOMPLEX:
  259.         minp = (double *) dminword;
  260.         maxp = (double *) dmaxword;
  261. ***************
  262. *** 230,235
  263.         rp = (long *) &(cp->const.cd[0]);
  264.         x.q.word1 = rp[0];
  265.         x.q.word2 = rp[1];
  266.         if (x.f.sign == 1 && x.f.exp == 0)
  267.       {
  268.         if (badvalue <= 1)
  269.  
  270. --- 291,297 -----
  271.         rp = (long *) &(cp->const.cd[0]);
  272.         x.q.word1 = rp[0];
  273.         x.q.word2 = rp[1];
  274. + #ifndef GFLOAT
  275.         if (x.f.sign == 1 && x.f.exp == 0)
  276.   #else GFLOAT
  277.         if (x.g.sign == 1 && x.g.exp == 0)
  278. ***************
  279. *** 231,236
  280.         x.q.word1 = rp[0];
  281.         x.q.word2 = rp[1];
  282.         if (x.f.sign == 1 && x.f.exp == 0)
  283.       {
  284.         if (badvalue <= 1)
  285.           {
  286.  
  287. --- 293,301 -----
  288.         x.q.word2 = rp[1];
  289.   #ifndef GFLOAT
  290.         if (x.f.sign == 1 && x.f.exp == 0)
  291. + #else GFLOAT
  292. +       if (x.g.sign == 1 && x.g.exp == 0)
  293. + #endif GFLOAT
  294.       {
  295.         if (badvalue <= 1)
  296.           {
  297. ***************
  298. *** 302,307
  299.     register long *rp;
  300.     register double *minp;
  301.     register double *maxp;
  302.     realvalue x;
  303.   
  304.     switch (cp->vtype)
  305.  
  306. --- 367,376 -----
  307.     register long *rp;
  308.     register double *minp;
  309.     register double *maxp;
  310. + #ifdef GFLOAT
  311. +   register float *minpf;
  312. +   register float *maxpf;
  313. + #endif GFLOAT
  314.     realvalue x;
  315.   
  316.     switch (cp->vtype)
  317. ***************
  318. *** 323,328
  319.         break;
  320.   
  321.       case TYREAL:
  322.       case TYDREAL:
  323.       case TYCOMPLEX:
  324.       case TYDCOMPLEX:
  325.  
  326. --- 392,398 -----
  327.         break;
  328.   
  329.       case TYREAL:
  330. + #ifndef GFLOAT
  331.       case TYDREAL:
  332.   #endif GFLOAT
  333.       case TYCOMPLEX:
  334. ***************
  335. *** 324,329
  336.   
  337.       case TYREAL:
  338.       case TYDREAL:
  339.       case TYCOMPLEX:
  340.       case TYDCOMPLEX:
  341.         minp = (double *) dminint;
  342.  
  343. --- 394,400 -----
  344.       case TYREAL:
  345.   #ifndef GFLOAT
  346.       case TYDREAL:
  347. + #endif GFLOAT
  348.       case TYCOMPLEX:
  349.   #ifdef GFLOAT
  350.         minpf = (float *) fminint;
  351. ***************
  352. *** 325,330
  353.       case TYREAL:
  354.       case TYDREAL:
  355.       case TYCOMPLEX:
  356.       case TYDCOMPLEX:
  357.         minp = (double *) dminint;
  358.         maxp = (double *) dmaxint;
  359.  
  360. --- 396,432 -----
  361.       case TYDREAL:
  362.   #endif GFLOAT
  363.       case TYCOMPLEX:
  364. + #ifdef GFLOAT
  365. +       minpf = (float *) fminint;
  366. +       maxpf = (float *) fmaxint;
  367. +       x.q.word1 = *((long *) &cp->const.cr[0]);
  368. +       if (x.f.sign == 1 && x.f.exp == 0)
  369. +     {
  370. +       if (badvalue <= 1)
  371. +         {
  372. +           badvalue = 2;
  373. +           err(reserved);
  374. +         }
  375. +       p = errnode();
  376. +     }
  377. +       else if (cp->const.cr[0] >= *minpf && cp->const.cr[0] <= *maxpf)
  378. +     {
  379. +       p = (expptr) mkconst(TYLONG);
  380. +       p->constblock.const.ci = cp->const.cr[0];
  381. +     }
  382. +       else
  383. +     {
  384. +       if (badvalue <= 1)
  385. +         {
  386. +           badvalue = 2;
  387. +           err(toobig);
  388. +         }
  389. +       p = errnode();
  390. +     }
  391. +       break;
  392. +     case TYDREAL:
  393. + #endif GFLOAT
  394.       case TYDCOMPLEX:
  395.         minp = (double *) dminint;
  396.         maxp = (double *) dmaxint;
  397. ***************
  398. *** 331,336
  399.         rp = (long *) &(cp->const.cd[0]);
  400.         x.q.word1 = rp[0];
  401.         x.q.word2 = rp[1];
  402.         if (x.f.sign == 1 && x.f.exp == 0)
  403.       {
  404.         if (badvalue <= 1)
  405.  
  406. --- 433,439 -----
  407.         rp = (long *) &(cp->const.cd[0]);
  408.         x.q.word1 = rp[0];
  409.         x.q.word2 = rp[1];
  410. + #ifndef GFLOAT
  411.         if (x.f.sign == 1 && x.f.exp == 0)
  412.   #else GFLOAT
  413.         if (x.g.sign == 1 && x.g.exp == 0)
  414. ***************
  415. *** 332,337
  416.         x.q.word1 = rp[0];
  417.         x.q.word2 = rp[1];
  418.         if (x.f.sign == 1 && x.f.exp == 0)
  419.       {
  420.         if (badvalue <= 1)
  421.           {
  422.  
  423. --- 435,443 -----
  424.         x.q.word2 = rp[1];
  425.   #ifndef GFLOAT
  426.         if (x.f.sign == 1 && x.f.exp == 0)
  427. + #else GFLOAT
  428. +       if (x.g.sign == 1 && x.g.exp == 0)
  429. + #endif GFLOAT
  430.       {
  431.         if (badvalue <= 1)
  432.           {
  433. ***************
  434. *** 403,408
  435.     register double *minp;
  436.     register double *maxp;
  437.     realvalue x;
  438.     float y;
  439.   
  440.     switch (cp->vtype)
  441.  
  442. --- 509,515 -----
  443.     register double *minp;
  444.     register double *maxp;
  445.     realvalue x;
  446. + #ifndef GFLOAT
  447.     float y;
  448.   #endif GFLOAT
  449.   
  450. ***************
  451. *** 404,409
  452.     register double *maxp;
  453.     realvalue x;
  454.     float y;
  455.   
  456.     switch (cp->vtype)
  457.       {
  458.  
  459. --- 511,517 -----
  460.     realvalue x;
  461.   #ifndef GFLOAT
  462.     float y;
  463. + #endif GFLOAT
  464.   
  465.     switch (cp->vtype)
  466.       {
  467. ***************
  468. *** 418,423
  469.       case TYSHORT:
  470.       case TYLONG:
  471.         p = (expptr) mkconst(TYREAL);
  472.         p->constblock.const.cd[0] = cp->const.ci;
  473.         break;
  474.   
  475.  
  476. --- 526,532 -----
  477.       case TYSHORT:
  478.       case TYLONG:
  479.         p = (expptr) mkconst(TYREAL);
  480. + #ifndef GFLOAT
  481.         p->constblock.const.cd[0] = cp->const.ci;
  482.   #else GFLOAT
  483.         p->constblock.const.cr[0] = cp->const.ci;
  484. ***************
  485. *** 419,424
  486.       case TYLONG:
  487.         p = (expptr) mkconst(TYREAL);
  488.         p->constblock.const.cd[0] = cp->const.ci;
  489.         break;
  490.   
  491.       case TYREAL:
  492.  
  493. --- 528,536 -----
  494.         p = (expptr) mkconst(TYREAL);
  495.   #ifndef GFLOAT
  496.         p->constblock.const.cd[0] = cp->const.ci;
  497. + #else GFLOAT
  498. +       p->constblock.const.cr[0] = cp->const.ci;
  499. + #endif GFLOAT
  500.         break;
  501.   
  502.       case TYREAL:
  503. ***************
  504. *** 422,427
  505.         break;
  506.   
  507.       case TYREAL:
  508.       case TYDREAL:
  509.       case TYCOMPLEX:
  510.       case TYDCOMPLEX:
  511.  
  512. --- 534,540 -----
  513.         break;
  514.   
  515.       case TYREAL:
  516. + #ifndef GFLOAT
  517.       case TYDREAL:
  518.   #endif GFLOAT
  519.       case TYCOMPLEX:
  520. ***************
  521. *** 423,428
  522.   
  523.       case TYREAL:
  524.       case TYDREAL:
  525.       case TYCOMPLEX:
  526.       case TYDCOMPLEX:
  527.         minp = (double *) dminreal;
  528.  
  529. --- 536,542 -----
  530.       case TYREAL:
  531.   #ifndef GFLOAT
  532.       case TYDREAL:
  533. + #endif GFLOAT
  534.       case TYCOMPLEX:
  535.   #ifdef GFLOAT
  536.         p = (expptr) mkconst(TYREAL);
  537. ***************
  538. *** 424,429
  539.       case TYREAL:
  540.       case TYDREAL:
  541.       case TYCOMPLEX:
  542.       case TYDCOMPLEX:
  543.         minp = (double *) dminreal;
  544.         maxp = (double *) dmaxreal;
  545.  
  546. --- 538,550 -----
  547.       case TYDREAL:
  548.   #endif GFLOAT
  549.       case TYCOMPLEX:
  550. + #ifdef GFLOAT
  551. +       p = (expptr) mkconst(TYREAL);
  552. +       p->constblock.const.cr[0] = cp->const.cr[0];
  553. +       break;
  554. +     case TYDREAL:
  555. + #endif GFLOAT
  556.       case TYDCOMPLEX:
  557.         minp = (double *) dminreal;
  558.         maxp = (double *) dmaxreal;
  559. ***************
  560. *** 430,435
  561.         rp = (long *) &(cp->const.cd[0]);
  562.         x.q.word1 = rp[0];
  563.         x.q.word2 = rp[1];
  564.         if (x.f.sign == 1 && x.f.exp == 0)
  565.       {
  566.         p = (expptr) mkconst(TYREAL);
  567.  
  568. --- 551,557 -----
  569.         rp = (long *) &(cp->const.cd[0]);
  570.         x.q.word1 = rp[0];
  571.         x.q.word2 = rp[1];
  572. + #ifndef GFLOAT
  573.         if (x.f.sign == 1 && x.f.exp == 0)
  574.   #else GFLOAT
  575.         if (x.g.sign == 1 && x.g.exp == 0)
  576. ***************
  577. *** 431,436
  578.         x.q.word1 = rp[0];
  579.         x.q.word2 = rp[1];
  580.         if (x.f.sign == 1 && x.f.exp == 0)
  581.       {
  582.         p = (expptr) mkconst(TYREAL);
  583.         rp = (long *) &(p->constblock.const.cd[0]);
  584.  
  585. --- 553,561 -----
  586.         x.q.word2 = rp[1];
  587.   #ifndef GFLOAT
  588.         if (x.f.sign == 1 && x.f.exp == 0)
  589. + #else GFLOAT
  590. +       if (x.g.sign == 1 && x.g.exp == 0)
  591. + #endif GFLOAT
  592.       {
  593.         p = (expptr) mkconst(TYREAL);
  594.   #ifndef GFLOAT
  595. ***************
  596. *** 433,438
  597.         if (x.f.sign == 1 && x.f.exp == 0)
  598.       {
  599.         p = (expptr) mkconst(TYREAL);
  600.         rp = (long *) &(p->constblock.const.cd[0]);
  601.         rp[0] = x.q.word1;
  602.       }
  603.  
  604. --- 558,564 -----
  605.   #endif GFLOAT
  606.       {
  607.         p = (expptr) mkconst(TYREAL);
  608. + #ifndef GFLOAT
  609.         rp = (long *) &(p->constblock.const.cd[0]);
  610.         rp[0] = x.q.word1;
  611.   #else GFLOAT
  612. ***************
  613. *** 435,440
  614.         p = (expptr) mkconst(TYREAL);
  615.         rp = (long *) &(p->constblock.const.cd[0]);
  616.         rp[0] = x.q.word1;
  617.       }
  618.         else if (x.d >= *minp && x.d <= *maxp)
  619.       {
  620.  
  621. --- 561,570 -----
  622.   #ifndef GFLOAT
  623.         rp = (long *) &(p->constblock.const.cd[0]);
  624.         rp[0] = x.q.word1;
  625. + #else GFLOAT
  626. + /* Gfloat: Assume that IEEE standard hardware handles exceptions */
  627. +       p->constblock.const.cr[0] = x.d;
  628. + #endif GFLOAT
  629.       }
  630.         else if (x.d >= *minp && x.d <= *maxp)
  631.       {
  632. ***************
  633. *** 439,444
  634.         else if (x.d >= *minp && x.d <= *maxp)
  635.       {
  636.         p = (expptr) mkconst(TYREAL);
  637.         y = x.d;
  638.         p->constblock.const.cd[0] = y;
  639.       }
  640.  
  641. --- 569,575 -----
  642.         else if (x.d >= *minp && x.d <= *maxp)
  643.       {
  644.         p = (expptr) mkconst(TYREAL);
  645. + #ifndef GFLOAT
  646.         y = x.d;
  647.         p->constblock.const.cd[0] = y;
  648.   #else GFLOAT
  649. ***************
  650. *** 441,446
  651.         p = (expptr) mkconst(TYREAL);
  652.         y = x.d;
  653.         p->constblock.const.cd[0] = y;
  654.       }
  655.         else
  656.       {
  657.  
  658. --- 572,580 -----
  659.   #ifndef GFLOAT
  660.         y = x.d;
  661.         p->constblock.const.cd[0] = y;
  662. + #else GFLOAT
  663. +       p->constblock.const.cr[0] = x.d;
  664. + #endif GFLOAT
  665.       }
  666.         else
  667.       {
  668. ***************
  669. *** 517,522
  670.         p->constblock.const.cd[0] = cp->const.ci;
  671.         break;
  672.   
  673.       case TYREAL:
  674.       case TYDREAL:
  675.       case TYCOMPLEX:
  676.  
  677. --- 651,657 -----
  678.         p->constblock.const.cd[0] = cp->const.ci;
  679.         break;
  680.   
  681. + #ifndef GFLOAT
  682.       case TYREAL:
  683.       case TYCOMPLEX:
  684.   #endif GFLOAT
  685. ***************
  686. *** 518,524
  687.         break;
  688.   
  689.       case TYREAL:
  690. -     case TYDREAL:
  691.       case TYCOMPLEX:
  692.       case TYDCOMPLEX:
  693.         p = (expptr) mkconst(TYDREAL);
  694.  
  695. --- 653,658 -----
  696.   
  697.   #ifndef GFLOAT
  698.       case TYREAL:
  699.       case TYCOMPLEX:
  700.   #endif GFLOAT
  701.       case TYDREAL:
  702. ***************
  703. *** 520,525
  704.       case TYREAL:
  705.       case TYDREAL:
  706.       case TYCOMPLEX:
  707.       case TYDCOMPLEX:
  708.         p = (expptr) mkconst(TYDREAL);
  709.         longp = (long *) &(cp->const.cd[0]);
  710.  
  711. --- 654,661 -----
  712.   #ifndef GFLOAT
  713.       case TYREAL:
  714.       case TYCOMPLEX:
  715. + #endif GFLOAT
  716. +     case TYDREAL:
  717.       case TYDCOMPLEX:
  718.         p = (expptr) mkconst(TYDREAL);
  719.   #ifndef GFLOAT
  720. ***************
  721. *** 522,527
  722.       case TYCOMPLEX:
  723.       case TYDCOMPLEX:
  724.         p = (expptr) mkconst(TYDREAL);
  725.         longp = (long *) &(cp->const.cd[0]);
  726.         rp = (long *) &(p->constblock.const.cd[0]);
  727.         rp[0] = longp[0];
  728.  
  729. --- 658,664 -----
  730.       case TYDREAL:
  731.       case TYDCOMPLEX:
  732.         p = (expptr) mkconst(TYDREAL);
  733. + #ifndef GFLOAT
  734.         longp = (long *) &(cp->const.cd[0]);
  735.         rp = (long *) &(p->constblock.const.cd[0]);
  736.         rp[0] = longp[0];
  737. ***************
  738. *** 526,531
  739.         rp = (long *) &(p->constblock.const.cd[0]);
  740.         rp[0] = longp[0];
  741.         rp[1] = longp[1];
  742.         break;
  743.   
  744.       case TYLOGICAL:
  745.  
  746. --- 663,671 -----
  747.         rp = (long *) &(p->constblock.const.cd[0]);
  748.         rp[0] = longp[0];
  749.         rp[1] = longp[1];
  750. + #else GFLOAT
  751. +       p->constblock.const.cd[0] = cp->const.cd[0];
  752. + #endif GFLOAT
  753.         break;
  754.   
  755.   #ifdef GFLOAT
  756. ***************
  757. *** 528,533
  758.         rp[1] = longp[1];
  759.         break;
  760.   
  761.       case TYLOGICAL:
  762.         if (badvalue <= 1)
  763.       {
  764.  
  765. --- 668,681 -----
  766.   #endif GFLOAT
  767.         break;
  768.   
  769. + #ifdef GFLOAT
  770. +     case TYREAL:
  771. +     case TYCOMPLEX:
  772. +       p = (expptr) mkconst(TYDREAL);
  773. +       p->constblock.const.cd[0] = cp->const.cr[0];
  774. +       break;
  775. + #endif GFLOAT
  776.       case TYLOGICAL:
  777.         if (badvalue <= 1)
  778.       {
  779. ***************
  780. *** 576,581
  781.     register long *rp;
  782.     register double *minp;
  783.     register double *maxp;
  784.     realvalue re, im;
  785.     int overflow;
  786.     float x;
  787.  
  788. --- 724,733 -----
  789.     register long *rp;
  790.     register double *minp;
  791.     register double *maxp;
  792. + #ifdef GFLOAT
  793. +   register float *minpf;
  794. +   register float *maxpf;
  795. + #endif GFLOAT
  796.     realvalue re, im;
  797.     int overflow;
  798.     float x;
  799. ***************
  800. *** 598,603
  801.         break;
  802.   
  803.       case TYREAL:
  804.       case TYDREAL:
  805.       case TYCOMPLEX:
  806.       case TYDCOMPLEX:
  807.  
  808. --- 750,756 -----
  809.         break;
  810.   
  811.       case TYREAL:
  812. + #ifndef GFLOAT
  813.       case TYDREAL:
  814.   #endif GFLOAT
  815.       case TYCOMPLEX:
  816. ***************
  817. *** 599,604
  818.   
  819.       case TYREAL:
  820.       case TYDREAL:
  821.       case TYCOMPLEX:
  822.       case TYDCOMPLEX:
  823.         overflow = 0;
  824.  
  825. --- 752,758 -----
  826.       case TYREAL:
  827.   #ifndef GFLOAT
  828.       case TYDREAL:
  829. + #endif GFLOAT
  830.       case TYCOMPLEX:
  831.   #ifdef GFLOAT
  832.         overflow = 0;
  833. ***************
  834. *** 600,605
  835.       case TYREAL:
  836.       case TYDREAL:
  837.       case TYCOMPLEX:
  838.       case TYDCOMPLEX:
  839.         overflow = 0;
  840.         minp = (double *) dminreal;
  841.  
  842. --- 754,768 -----
  843.       case TYDREAL:
  844.   #endif GFLOAT
  845.       case TYCOMPLEX:
  846. + #ifdef GFLOAT
  847. +       overflow = 0;
  848. +       p = (expptr) mkconst(TYCOMPLEX);
  849. +       p->constblock.const.cr[0] = cp->const.cr[0];
  850. +       p->constblock.const.cr[1] = cp->const.cr[1];
  851. +       break;
  852. +     case TYDREAL:
  853. + #endif GFLOAT
  854.       case TYDCOMPLEX:
  855.         overflow = 0;
  856.         minp = (double *) dminreal;
  857. ***************
  858. *** 609,614
  859.         re.q.word2 = rp[1];
  860.         im.q.word1 = rp[2];
  861.         im.q.word2 = rp[3];
  862.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  863.          (re.d < *minp || re.d > *maxp))       ||
  864.         ((im.f.sign == 0 || re.f.exp != 0) &&
  865.  
  866. --- 772,778 -----
  867.         re.q.word2 = rp[1];
  868.         im.q.word1 = rp[2];
  869.         im.q.word2 = rp[3];
  870. + #ifndef GFLOAT
  871.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  872.   #else GFLOAT
  873.         if (((re.g.sign == 0 || re.g.exp != 0) &&
  874. ***************
  875. *** 610,615
  876.         im.q.word1 = rp[2];
  877.         im.q.word2 = rp[3];
  878.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  879.          (re.d < *minp || re.d > *maxp))       ||
  880.         ((im.f.sign == 0 || re.f.exp != 0) &&
  881.          (im.d < *minp || re.d > *maxp)))
  882.  
  883. --- 774,782 -----
  884.         im.q.word2 = rp[3];
  885.   #ifndef GFLOAT
  886.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  887. + #else GFLOAT
  888. +       if (((re.g.sign == 0 || re.g.exp != 0) &&
  889. + #endif GFLOAT
  890.          (re.d < *minp || re.d > *maxp))       ||
  891.   #ifndef GFLOAT
  892.         ((im.f.sign == 0 || re.f.exp != 0) &&
  893. ***************
  894. *** 611,616
  895.         im.q.word2 = rp[3];
  896.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  897.          (re.d < *minp || re.d > *maxp))       ||
  898.         ((im.f.sign == 0 || re.f.exp != 0) &&
  899.          (im.d < *minp || re.d > *maxp)))
  900.       {
  901.  
  902. --- 778,784 -----
  903.         if (((re.g.sign == 0 || re.g.exp != 0) &&
  904.   #endif GFLOAT
  905.          (re.d < *minp || re.d > *maxp))       ||
  906. + #ifndef GFLOAT
  907.         ((im.f.sign == 0 || re.f.exp != 0) &&
  908.   #else GFLOAT
  909.         ((im.g.sign == 0 || re.g.exp != 0) &&
  910. ***************
  911. *** 612,617
  912.         if (((re.f.sign == 0 || re.f.exp != 0) &&
  913.          (re.d < *minp || re.d > *maxp))       ||
  914.         ((im.f.sign == 0 || re.f.exp != 0) &&
  915.          (im.d < *minp || re.d > *maxp)))
  916.       {
  917.         if (badvalue <= 1)
  918.  
  919. --- 780,788 -----
  920.          (re.d < *minp || re.d > *maxp))       ||
  921.   #ifndef GFLOAT
  922.         ((im.f.sign == 0 || re.f.exp != 0) &&
  923. + #else GFLOAT
  924. +       ((im.g.sign == 0 || re.g.exp != 0) &&
  925. + #endif GFLOAT
  926.          (im.d < *minp || re.d > *maxp)))
  927.       {
  928.         if (badvalue <= 1)
  929. ***************
  930. *** 624,629
  931.         else
  932.       {
  933.         p = (expptr) mkconst(TYCOMPLEX);
  934.         if (re.f.sign == 1 && re.f.exp == 0)
  935.           re.q.word2 = 0;
  936.         else
  937.  
  938. --- 795,801 -----
  939.         else
  940.       {
  941.         p = (expptr) mkconst(TYCOMPLEX);
  942. + #ifndef GFLOAT
  943.         if (re.f.sign == 1 && re.f.exp == 0)
  944.           re.q.word2 = 0;
  945.         else
  946. ***************
  947. *** 643,648
  948.         rp[1] = re.q.word2;
  949.         rp[2] = im.q.word1;
  950.         rp[3] = im.q.word2;
  951.       }
  952.         break;
  953.   
  954.  
  955. --- 815,824 -----
  956.         rp[1] = re.q.word2;
  957.         rp[2] = im.q.word1;
  958.         rp[3] = im.q.word2;
  959. + #else GFLOAT
  960. +           p->constblock.const.cr[0] = cp->const.cd[0];
  961. +           p->constblock.const.cr[0] = cp->const.cd[1];
  962. + #endif GFLOAT
  963.       }
  964.         break;
  965.   
  966. ***************
  967. *** 711,716
  968.         break;
  969.   
  970.       case TYREAL:
  971.       case TYDREAL:
  972.       case TYCOMPLEX:
  973.       case TYDCOMPLEX:
  974.  
  975. --- 887,893 -----
  976.         break;
  977.   
  978.       case TYREAL:
  979. + #ifndef GFLOAT
  980.       case TYDREAL:
  981.   #endif GFLOAT
  982.       case TYCOMPLEX:
  983. ***************
  984. *** 712,717
  985.   
  986.       case TYREAL:
  987.       case TYDREAL:
  988.       case TYCOMPLEX:
  989.       case TYDCOMPLEX:
  990.         p = (expptr) mkconst(TYDCOMPLEX);
  991.  
  992. --- 889,895 -----
  993.       case TYREAL:
  994.   #ifndef GFLOAT
  995.       case TYDREAL:
  996. + #endif GFLOAT
  997.       case TYCOMPLEX:
  998.   #ifdef GFLOAT
  999.         p = (expptr) mkconst(TYDCOMPLEX);
  1000. ***************
  1001. *** 713,718
  1002.       case TYREAL:
  1003.       case TYDREAL:
  1004.       case TYCOMPLEX:
  1005.       case TYDCOMPLEX:
  1006.         p = (expptr) mkconst(TYDCOMPLEX);
  1007.         longp = (long *) &(cp->const.cd[0]);
  1008.  
  1009. --- 891,904 -----
  1010.       case TYDREAL:
  1011.   #endif GFLOAT
  1012.       case TYCOMPLEX:
  1013. + #ifdef GFLOAT
  1014. +       p = (expptr) mkconst(TYDCOMPLEX);
  1015. +       p->constblock.const.cd[0] = cp->const.cr[0];
  1016. +       p->constblock.const.cd[1] = cp->const.cr[1];
  1017. +       break;
  1018. +     case TYDREAL:
  1019. + #endif GFLOAT
  1020.       case TYDCOMPLEX:
  1021.         p = (expptr) mkconst(TYDCOMPLEX);
  1022.   #ifndef GFLOAT
  1023. ***************
  1024. *** 715,720
  1025.       case TYCOMPLEX:
  1026.       case TYDCOMPLEX:
  1027.         p = (expptr) mkconst(TYDCOMPLEX);
  1028.         longp = (long *) &(cp->const.cd[0]);
  1029.         rp = (long *) &(p->constblock.const.cd[0]);
  1030.         rp[0] = longp[0];
  1031.  
  1032. --- 901,907 -----
  1033.   #endif GFLOAT
  1034.       case TYDCOMPLEX:
  1035.         p = (expptr) mkconst(TYDCOMPLEX);
  1036. + #ifndef GFLOAT
  1037.         longp = (long *) &(cp->const.cd[0]);
  1038.         rp = (long *) &(p->constblock.const.cd[0]);
  1039.         rp[0] = longp[0];
  1040. ***************
  1041. *** 721,726
  1042.         rp[1] = longp[1];
  1043.         rp[2] = longp[2];
  1044.         rp[3] = longp[3];
  1045.         break;
  1046.   
  1047.       case TYLOGICAL:
  1048.  
  1049. --- 908,917 -----
  1050.         rp[1] = longp[1];
  1051.         rp[2] = longp[2];
  1052.         rp[3] = longp[3];
  1053. + #else GFLOAT
  1054. +       p->constblock.const.cd[0] = cp->const.cd[0];
  1055. +       p->constblock.const.cd[1] = cp->const.cd[1];
  1056. + #endif GFLOAT
  1057.         break;
  1058.   
  1059.       case TYLOGICAL:
  1060.