LCOV - code coverage report
Current view: top level - gdk - gdk_calc_div.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 219 1154 19.0 %
Date: 2024-04-25 20:03:45 Functions: 26 215 12.1 %

          Line data    Source code
       1             : /*
       2             :  * SPDX-License-Identifier: MPL-2.0
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * Copyright 2024 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : #include "monetdb_config.h"
      14             : #include "gdk.h"
      15             : #include "gdk_private.h"
      16             : #include "gdk_calc_private.h"
      17             : 
      18             : /* ---------------------------------------------------------------------- */
      19             : /* division (any numeric type) */
      20             : 
      21             : #define DIV_3TYPE(TYPE1, TYPE2, TYPE3)                                  \
      22             : static BUN                                                              \
      23             : div_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, bool incr1,           \
      24             :                                 const TYPE2 *rgt, bool incr2,           \
      25             :                                 TYPE3 *restrict dst, TYPE3 max,         \
      26             :                                 struct canditer *restrict ci1,          \
      27             :                                 struct canditer *restrict ci2,          \
      28             :                                 oid candoff1, oid candoff2)             \
      29             : {                                                                       \
      30             :         BUN nils = 0;                                                   \
      31             :         BUN i = 0, j = 0, ncand = ci1->ncand;                                \
      32             :         lng timeoffset = 0;                                             \
      33             :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();                      \
      34             :         if (qry_ctx != NULL) {                                          \
      35             :                 timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0; \
      36             :         }                                                               \
      37             :                                                                         \
      38             :         if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) {           \
      39             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
      40             :                         if (incr1)                                      \
      41             :                                 i = canditer_next_dense(ci1) - candoff1; \
      42             :                         if (incr2)                                      \
      43             :                                 j = canditer_next_dense(ci2) - candoff2; \
      44             :                         if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
      45             :                                 dst[k] = TYPE3##_nil;                   \
      46             :                                 nils++;                                 \
      47             :                         } else if (rgt[j] == 0) {                       \
      48             :                                 return BUN_NONE + 1;                    \
      49             :                         } else {                                        \
      50             :                                 dst[k] = (TYPE3) (lft[i] / rgt[j]);     \
      51             :                                 if (dst[k] < -max || dst[k] > max) {      \
      52             :                                         return BUN_NONE + 2;            \
      53             :                                 }                                       \
      54             :                         }                                               \
      55             :                 }                                                       \
      56             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
      57             :         } else {                                                        \
      58             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
      59             :                         if (incr1)                                      \
      60             :                                 i = canditer_next(ci1) - candoff1;      \
      61             :                         if (incr2)                                      \
      62             :                                 j = canditer_next(ci2) - candoff2;      \
      63             :                         if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
      64             :                                 dst[k] = TYPE3##_nil;                   \
      65             :                                 nils++;                                 \
      66             :                         } else if (rgt[j] == 0) {                       \
      67             :                                 return BUN_NONE + 1;                    \
      68             :                         } else {                                        \
      69             :                                 dst[k] = (TYPE3) (lft[i] / rgt[j]);     \
      70             :                                 if (dst[k] < -max || dst[k] > max) {      \
      71             :                                         return BUN_NONE + 2;            \
      72             :                                 }                                       \
      73             :                         }                                               \
      74             :                 }                                                       \
      75             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
      76             :         }                                                               \
      77             :         return nils;                                                    \
      78             : }
      79             : 
      80             : #define DIV_3TYPE_float(TYPE1, TYPE2, TYPE3)                            \
      81             : static BUN                                                              \
      82             : div_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, bool incr1,           \
      83             :                                 const TYPE2 *rgt, bool incr2,           \
      84             :                                 TYPE3 *restrict dst, TYPE3 max,         \
      85             :                                 struct canditer *restrict ci1,          \
      86             :                                 struct canditer *restrict ci2,          \
      87             :                                 oid candoff1, oid candoff2)             \
      88             : {                                                                       \
      89             :         BUN nils = 0;                                                   \
      90             :         BUN i = 0, j = 0, ncand = ci1->ncand;                                \
      91             :         lng timeoffset = 0;                                             \
      92             :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();                      \
      93             :         if (qry_ctx != NULL) {                                          \
      94             :                 timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0; \
      95             :         }                                                               \
      96             :                                                                         \
      97             :         if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) {           \
      98             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
      99             :                         if (incr1)                                      \
     100             :                                 i = canditer_next_dense(ci1) - candoff1; \
     101             :                         if (incr2)                                      \
     102             :                                 j = canditer_next_dense(ci2) - candoff2; \
     103             :                         if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
     104             :                                 dst[k] = TYPE3##_nil;                   \
     105             :                                 nils++;                                 \
     106             :                         } else if (rgt[j] == 0 ||                       \
     107             :                                    (ABSOLUTE(rgt[j]) < 1 &&          \
     108             :                                     GDK_##TYPE3##_max * ABSOLUTE(rgt[j]) < ABSOLUTE(lft[i]))) { \
     109             :                                 /* only check for overflow, not for underflow */ \
     110             :                                 if (rgt[j] == 0)                        \
     111             :                                         return BUN_NONE + 1;            \
     112             :                                 ON_OVERFLOW(TYPE1, TYPE2, "/");               \
     113             :                         } else {                                        \
     114             :                                 dst[k] = (TYPE3) lft[i] / rgt[j];       \
     115             :                                 if (dst[k] < -max || dst[k] > max) {      \
     116             :                                         return BUN_NONE + 2;            \
     117             :                                 }                                       \
     118             :                         }                                               \
     119             :                 }                                                       \
     120             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
     121             :         } else {                                                        \
     122             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
     123             :                         if (incr1)                                      \
     124             :                                 i = canditer_next(ci1) - candoff1;      \
     125             :                         if (incr2)                                      \
     126             :                                 j = canditer_next(ci2) - candoff2;      \
     127             :                         if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
     128             :                                 dst[k] = TYPE3##_nil;                   \
     129             :                                 nils++;                                 \
     130             :                         } else if (rgt[j] == 0 ||                       \
     131             :                                    (ABSOLUTE(rgt[j]) < 1 &&          \
     132             :                                     GDK_##TYPE3##_max * ABSOLUTE(rgt[j]) < ABSOLUTE(lft[i]))) { \
     133             :                                 /* only check for overflow, not for underflow */ \
     134             :                                 if (rgt[j] == 0)                        \
     135             :                                         return BUN_NONE + 1;            \
     136             :                                 ON_OVERFLOW(TYPE1, TYPE2, "/");               \
     137             :                         } else {                                        \
     138             :                                 dst[k] = (TYPE3) lft[i] / rgt[j];       \
     139             :                                 if (dst[k] < -max || dst[k] > max) {      \
     140             :                                         return BUN_NONE + 2;            \
     141             :                                 }                                       \
     142             :                         }                                               \
     143             :                 }                                                       \
     144             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
     145             :         }                                                               \
     146             :         return nils;                                                    \
     147             : }
     148             : 
     149             : #define DIV_INT_FLT_INT(TYPE1, TYPE2, TYPE3)                            \
     150             : static BUN                                                              \
     151             : div_##TYPE1##_##TYPE2##_##TYPE3(                                        \
     152             :         const TYPE1 *lft, bool incr1, const TYPE2 *rgt, bool incr2,     \
     153             :         TYPE3 *restrict dst, TYPE3 max,                                 \
     154             :         struct canditer *restrict ci1, struct canditer *restrict ci2,   \
     155             :         oid candoff1, oid candoff2)             \
     156             : {                                                                       \
     157             :         BUN nils = 0;                                                   \
     158             :         BUN i = 0, j = 0, ncand = ci1->ncand;                                \
     159             :         lng timeoffset = 0;                                             \
     160             :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();                      \
     161             :         if (qry_ctx != NULL) {                                          \
     162             :                 timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0; \
     163             :         }                                                               \
     164             :                                                                         \
     165             :         if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) {           \
     166             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
     167             :                         if (incr1)                                      \
     168             :                                 i = canditer_next_dense(ci1) - candoff1; \
     169             :                         if (incr2)                                      \
     170             :                                 j = canditer_next_dense(ci2) - candoff2; \
     171             :                         if (is_##TYPE1##_nil(lft[i]) ||                 \
     172             :                             is_##TYPE2##_nil(rgt[j])) {                 \
     173             :                                 dst[k] = TYPE3##_nil;                   \
     174             :                                 nils++;                                 \
     175             :                         } else if (lft[i] == 0) {                       \
     176             :                                 dst[k] = 0;                             \
     177             :                         } else if (rgt[j] == 0) {                       \
     178             :                                 return BUN_NONE + 1;                    \
     179             :                         } else {                                        \
     180             :                                 double m = fabs(rgt[j]);                \
     181             :                                 if (m < 1 && abs##TYPE1(lft[i]) > m * max) { \
     182             :                                         ON_OVERFLOW(TYPE1, TYPE2, "/");       \
     183             :                                 } else {                                \
     184             :                                         dst[k] = (TYPE3) rounddbl(lft[i] / (ldouble) rgt[j]); \
     185             :                                 }                                       \
     186             :                         }                                               \
     187             :                 }                                                       \
     188             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
     189             :         } else {                                                        \
     190             :                 TIMEOUT_LOOP_IDX_DECL(k, ncand, timeoffset) {           \
     191             :                         if (incr1)                                      \
     192             :                                 i = canditer_next(ci1) - candoff1;      \
     193             :                         if (incr2)                                      \
     194             :                                 j = canditer_next(ci2) - candoff2;      \
     195             :                         if (is_##TYPE1##_nil(lft[i]) ||                 \
     196             :                             is_##TYPE2##_nil(rgt[j])) {                 \
     197             :                                 dst[k] = TYPE3##_nil;                   \
     198             :                                 nils++;                                 \
     199             :                         } else if (lft[i] == 0) {                       \
     200             :                                 dst[k] = 0;                             \
     201             :                         } else if (rgt[j] == 0) {                       \
     202             :                                 return BUN_NONE + 1;                    \
     203             :                         } else {                                        \
     204             :                                 double m = fabs(rgt[j]);                \
     205             :                                 if (m < 1 && abs##TYPE1(lft[i]) > m * max) { \
     206             :                                         ON_OVERFLOW(TYPE1, TYPE2, "/");       \
     207             :                                 } else {                                \
     208             :                                         dst[k] = (TYPE3) rounddbl(lft[i] / (ldouble) rgt[j]); \
     209             :                                 }                                       \
     210             :                         }                                               \
     211             :                 }                                                       \
     212             :                 TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE));   \
     213             :         }                                                               \
     214             :         return nils;                                                    \
     215             : }
     216             : 
     217           0 : DIV_INT_FLT_INT(bte, flt, bte)
     218           0 : DIV_INT_FLT_INT(bte, flt, sht)
     219           0 : DIV_INT_FLT_INT(bte, flt, int)
     220           0 : DIV_INT_FLT_INT(bte, flt, lng)
     221           0 : DIV_INT_FLT_INT(sht, flt, bte)
     222           0 : DIV_INT_FLT_INT(sht, flt, sht)
     223           0 : DIV_INT_FLT_INT(sht, flt, int)
     224           0 : DIV_INT_FLT_INT(sht, flt, lng)
     225           0 : DIV_INT_FLT_INT(int, flt, bte)
     226           0 : DIV_INT_FLT_INT(int, flt, sht)
     227          16 : DIV_INT_FLT_INT(int, flt, int)
     228           0 : DIV_INT_FLT_INT(int, flt, lng)
     229           0 : DIV_INT_FLT_INT(lng, flt, bte)
     230           0 : DIV_INT_FLT_INT(lng, flt, sht)
     231           0 : DIV_INT_FLT_INT(lng, flt, int)
     232          22 : DIV_INT_FLT_INT(lng, flt, lng)
     233             : #ifdef HAVE_HGE
     234           0 : DIV_INT_FLT_INT(bte, flt, hge)
     235           0 : DIV_INT_FLT_INT(sht, flt, hge)
     236           0 : DIV_INT_FLT_INT(int, flt, hge)
     237           0 : DIV_INT_FLT_INT(lng, flt, hge)
     238           0 : DIV_INT_FLT_INT(hge, flt, bte)
     239           0 : DIV_INT_FLT_INT(hge, flt, sht)
     240           0 : DIV_INT_FLT_INT(hge, flt, int)
     241           0 : DIV_INT_FLT_INT(hge, flt, lng)
     242           0 : DIV_INT_FLT_INT(hge, flt, hge)
     243             : #endif
     244             : 
     245           0 : DIV_INT_FLT_INT(bte, dbl, bte)
     246           0 : DIV_INT_FLT_INT(bte, dbl, sht)
     247           0 : DIV_INT_FLT_INT(bte, dbl, int)
     248           0 : DIV_INT_FLT_INT(bte, dbl, lng)
     249           0 : DIV_INT_FLT_INT(sht, dbl, bte)
     250           0 : DIV_INT_FLT_INT(sht, dbl, sht)
     251           0 : DIV_INT_FLT_INT(sht, dbl, int)
     252           0 : DIV_INT_FLT_INT(sht, dbl, lng)
     253           0 : DIV_INT_FLT_INT(int, dbl, bte)
     254           0 : DIV_INT_FLT_INT(int, dbl, sht)
     255          12 : DIV_INT_FLT_INT(int, dbl, int)
     256           0 : DIV_INT_FLT_INT(int, dbl, lng)
     257           0 : DIV_INT_FLT_INT(lng, dbl, bte)
     258           0 : DIV_INT_FLT_INT(lng, dbl, sht)
     259           0 : DIV_INT_FLT_INT(lng, dbl, int)
     260          24 : DIV_INT_FLT_INT(lng, dbl, lng)
     261             : #ifdef HAVE_HGE
     262           0 : DIV_INT_FLT_INT(bte, dbl, hge)
     263           0 : DIV_INT_FLT_INT(sht, dbl, hge)
     264           0 : DIV_INT_FLT_INT(int, dbl, hge)
     265           0 : DIV_INT_FLT_INT(lng, dbl, hge)
     266           0 : DIV_INT_FLT_INT(hge, dbl, bte)
     267           0 : DIV_INT_FLT_INT(hge, dbl, sht)
     268           0 : DIV_INT_FLT_INT(hge, dbl, int)
     269           0 : DIV_INT_FLT_INT(hge, dbl, lng)
     270           0 : DIV_INT_FLT_INT(hge, dbl, hge)
     271             : #endif
     272             : 
     273         169 : DIV_3TYPE(bte, bte, bte)
     274           0 : DIV_3TYPE(bte, bte, sht)
     275           0 : DIV_3TYPE(bte, bte, int)
     276           0 : DIV_3TYPE(bte, bte, lng)
     277             : #ifdef HAVE_HGE
     278           0 : DIV_3TYPE(bte, bte, hge)
     279             : #endif
     280           0 : DIV_3TYPE(bte, bte, flt)
     281           0 : DIV_3TYPE(bte, bte, dbl)
     282           0 : DIV_3TYPE(bte, sht, bte)
     283           0 : DIV_3TYPE(bte, sht, sht)
     284           0 : DIV_3TYPE(bte, sht, int)
     285           0 : DIV_3TYPE(bte, sht, lng)
     286             : #ifdef HAVE_HGE
     287           0 : DIV_3TYPE(bte, sht, hge)
     288             : #endif
     289           0 : DIV_3TYPE(bte, sht, flt)
     290           0 : DIV_3TYPE(bte, sht, dbl)
     291           0 : DIV_3TYPE(bte, int, bte)
     292           0 : DIV_3TYPE(bte, int, sht)
     293           0 : DIV_3TYPE(bte, int, int)
     294           0 : DIV_3TYPE(bte, int, lng)
     295             : #ifdef HAVE_HGE
     296           0 : DIV_3TYPE(bte, int, hge)
     297             : #endif
     298           0 : DIV_3TYPE(bte, int, flt)
     299           0 : DIV_3TYPE(bte, int, dbl)
     300           0 : DIV_3TYPE(bte, lng, bte)
     301           0 : DIV_3TYPE(bte, lng, sht)
     302           0 : DIV_3TYPE(bte, lng, int)
     303           0 : DIV_3TYPE(bte, lng, lng)
     304             : #ifdef HAVE_HGE
     305           0 : DIV_3TYPE(bte, lng, hge)
     306             : #endif
     307           0 : DIV_3TYPE(bte, lng, flt)
     308           0 : DIV_3TYPE(bte, lng, dbl)
     309             : #ifdef HAVE_HGE
     310           0 : DIV_3TYPE(bte, hge, bte)
     311           0 : DIV_3TYPE(bte, hge, sht)
     312           0 : DIV_3TYPE(bte, hge, int)
     313           0 : DIV_3TYPE(bte, hge, lng)
     314           0 : DIV_3TYPE(bte, hge, hge)
     315           0 : DIV_3TYPE(bte, hge, flt)
     316           0 : DIV_3TYPE(bte, hge, dbl)
     317             : #endif
     318           0 : DIV_3TYPE_float(bte, flt, flt)
     319           0 : DIV_3TYPE_float(bte, flt, dbl)
     320           0 : DIV_3TYPE_float(bte, dbl, dbl)
     321          40 : DIV_3TYPE(sht, bte, sht)
     322           0 : DIV_3TYPE(sht, bte, int)
     323           0 : DIV_3TYPE(sht, bte, lng)
     324             : #ifdef HAVE_HGE
     325           0 : DIV_3TYPE(sht, bte, hge)
     326             : #endif
     327           0 : DIV_3TYPE(sht, bte, flt)
     328           0 : DIV_3TYPE(sht, bte, dbl)
     329          73 : DIV_3TYPE(sht, sht, sht)
     330           0 : DIV_3TYPE(sht, sht, int)
     331           0 : DIV_3TYPE(sht, sht, lng)
     332             : #ifdef HAVE_HGE
     333           0 : DIV_3TYPE(sht, sht, hge)
     334             : #endif
     335           0 : DIV_3TYPE(sht, sht, flt)
     336           0 : DIV_3TYPE(sht, sht, dbl)
     337           0 : DIV_3TYPE(sht, int, sht)
     338           0 : DIV_3TYPE(sht, int, int)
     339           0 : DIV_3TYPE(sht, int, lng)
     340             : #ifdef HAVE_HGE
     341           0 : DIV_3TYPE(sht, int, hge)
     342             : #endif
     343           0 : DIV_3TYPE(sht, int, flt)
     344           0 : DIV_3TYPE(sht, int, dbl)
     345           0 : DIV_3TYPE(sht, lng, sht)
     346           0 : DIV_3TYPE(sht, lng, int)
     347           0 : DIV_3TYPE(sht, lng, lng)
     348             : #ifdef HAVE_HGE
     349           0 : DIV_3TYPE(sht, lng, hge)
     350             : #endif
     351           0 : DIV_3TYPE(sht, lng, flt)
     352           0 : DIV_3TYPE(sht, lng, dbl)
     353             : #ifdef HAVE_HGE
     354           0 : DIV_3TYPE(sht, hge, sht)
     355           0 : DIV_3TYPE(sht, hge, int)
     356           0 : DIV_3TYPE(sht, hge, lng)
     357           0 : DIV_3TYPE(sht, hge, hge)
     358           0 : DIV_3TYPE(sht, hge, flt)
     359           0 : DIV_3TYPE(sht, hge, dbl)
     360             : #endif
     361           0 : DIV_3TYPE_float(sht, flt, flt)
     362           0 : DIV_3TYPE_float(sht, flt, dbl)
     363           0 : DIV_3TYPE_float(sht, dbl, dbl)
     364     4838515 : DIV_3TYPE(int, bte, int)
     365           0 : DIV_3TYPE(int, bte, lng)
     366             : #ifdef HAVE_HGE
     367           0 : DIV_3TYPE(int, bte, hge)
     368             : #endif
     369           0 : DIV_3TYPE(int, bte, flt)
     370           0 : DIV_3TYPE(int, bte, dbl)
     371          76 : DIV_3TYPE(int, sht, int)
     372           0 : DIV_3TYPE(int, sht, lng)
     373             : #ifdef HAVE_HGE
     374           0 : DIV_3TYPE(int, sht, hge)
     375             : #endif
     376           0 : DIV_3TYPE(int, sht, flt)
     377           0 : DIV_3TYPE(int, sht, dbl)
     378         409 : DIV_3TYPE(int, int, int)
     379           0 : DIV_3TYPE(int, int, lng)
     380             : #ifdef HAVE_HGE
     381           0 : DIV_3TYPE(int, int, hge)
     382             : #endif
     383           0 : DIV_3TYPE(int, int, flt)
     384           0 : DIV_3TYPE(int, int, dbl)
     385           0 : DIV_3TYPE(int, lng, int)
     386           0 : DIV_3TYPE(int, lng, lng)
     387             : #ifdef HAVE_HGE
     388           0 : DIV_3TYPE(int, lng, hge)
     389             : #endif
     390           0 : DIV_3TYPE(int, lng, flt)
     391           0 : DIV_3TYPE(int, lng, dbl)
     392             : #ifdef HAVE_HGE
     393           0 : DIV_3TYPE(int, hge, int)
     394           0 : DIV_3TYPE(int, hge, lng)
     395           0 : DIV_3TYPE(int, hge, hge)
     396           0 : DIV_3TYPE(int, hge, flt)
     397           0 : DIV_3TYPE(int, hge, dbl)
     398             : #endif
     399           0 : DIV_3TYPE_float(int, flt, flt)
     400           0 : DIV_3TYPE_float(int, flt, dbl)
     401           0 : DIV_3TYPE_float(int, dbl, dbl)
     402       19779 : DIV_3TYPE(lng, bte, lng)
     403             : #ifdef HAVE_HGE
     404           0 : DIV_3TYPE(lng, bte, hge)
     405             : #endif
     406           0 : DIV_3TYPE(lng, bte, flt)
     407           0 : DIV_3TYPE(lng, bte, dbl)
     408          12 : DIV_3TYPE(lng, sht, lng)
     409             : #ifdef HAVE_HGE
     410           0 : DIV_3TYPE(lng, sht, hge)
     411             : #endif
     412           0 : DIV_3TYPE(lng, sht, flt)
     413           0 : DIV_3TYPE(lng, sht, dbl)
     414         124 : DIV_3TYPE(lng, int, lng)
     415             : #ifdef HAVE_HGE
     416           0 : DIV_3TYPE(lng, int, hge)
     417             : #endif
     418           0 : DIV_3TYPE(lng, int, flt)
     419           0 : DIV_3TYPE(lng, int, dbl)
     420         218 : DIV_3TYPE(lng, lng, lng)
     421             : #ifdef HAVE_HGE
     422           0 : DIV_3TYPE(lng, lng, hge)
     423             : #endif
     424           0 : DIV_3TYPE(lng, lng, flt)
     425           0 : DIV_3TYPE(lng, lng, dbl)
     426             : #ifdef HAVE_HGE
     427           0 : DIV_3TYPE(lng, hge, lng)
     428           0 : DIV_3TYPE(lng, hge, hge)
     429           0 : DIV_3TYPE(lng, hge, flt)
     430           0 : DIV_3TYPE(lng, hge, dbl)
     431             : #endif
     432           0 : DIV_3TYPE_float(lng, flt, flt)
     433           0 : DIV_3TYPE_float(lng, flt, dbl)
     434           0 : DIV_3TYPE_float(lng, dbl, dbl)
     435             : #ifdef HAVE_HGE
     436       21733 : DIV_3TYPE(hge, bte, hge)
     437           0 : DIV_3TYPE(hge, bte, flt)
     438           0 : DIV_3TYPE(hge, bte, dbl)
     439           0 : DIV_3TYPE(hge, sht, hge)
     440           0 : DIV_3TYPE(hge, sht, flt)
     441           0 : DIV_3TYPE(hge, sht, dbl)
     442        3474 : DIV_3TYPE(hge, int, hge)
     443           0 : DIV_3TYPE(hge, int, flt)
     444           0 : DIV_3TYPE(hge, int, dbl)
     445         980 : DIV_3TYPE(hge, lng, hge)
     446           0 : DIV_3TYPE(hge, lng, flt)
     447           0 : DIV_3TYPE(hge, lng, dbl)
     448      218575 : DIV_3TYPE(hge, hge, hge)
     449           0 : DIV_3TYPE(hge, hge, flt)
     450           0 : DIV_3TYPE(hge, hge, dbl)
     451           0 : DIV_3TYPE_float(hge, flt, flt)
     452           0 : DIV_3TYPE_float(hge, flt, dbl)
     453           0 : DIV_3TYPE_float(hge, dbl, dbl)
     454             : #endif
     455           0 : DIV_3TYPE(flt, bte, flt)
     456           0 : DIV_3TYPE(flt, bte, dbl)
     457           0 : DIV_3TYPE(flt, sht, flt)
     458           0 : DIV_3TYPE(flt, sht, dbl)
     459           0 : DIV_3TYPE(flt, int, flt)
     460           0 : DIV_3TYPE(flt, int, dbl)
     461           0 : DIV_3TYPE(flt, lng, flt)
     462           0 : DIV_3TYPE(flt, lng, dbl)
     463             : #ifdef HAVE_HGE
     464           0 : DIV_3TYPE(flt, hge, flt)
     465           0 : DIV_3TYPE(flt, hge, dbl)
     466             : #endif
     467          19 : DIV_3TYPE_float(flt, flt, flt)
     468           0 : DIV_3TYPE_float(flt, flt, dbl)
     469           0 : DIV_3TYPE_float(flt, dbl, dbl)
     470           0 : DIV_3TYPE(dbl, bte, dbl)
     471           0 : DIV_3TYPE(dbl, sht, dbl)
     472           0 : DIV_3TYPE(dbl, int, dbl)
     473       32890 : DIV_3TYPE(dbl, lng, dbl)
     474             : #ifdef HAVE_HGE
     475           0 : DIV_3TYPE(dbl, hge, dbl)
     476             : #endif
     477           0 : DIV_3TYPE_float(dbl, flt, dbl)
     478     1279733 : DIV_3TYPE_float(dbl, dbl, dbl)
     479             : 
     480             : static BUN
     481        3440 : div_typeswitchloop(const void *lft, int tp1, bool incr1,
     482             :                    const void *rgt, int tp2, bool incr2,
     483             :                    void *restrict dst, int tp,
     484             :                    struct canditer *restrict ci1, struct canditer *restrict ci2,
     485             :                    oid candoff1, oid candoff2, const char *func)
     486             : {
     487        3440 :         BUN nils;
     488             : 
     489        3440 :         tp1 = ATOMbasetype(tp1);
     490        3440 :         tp2 = ATOMbasetype(tp2);
     491        3440 :         tp = ATOMbasetype(tp);
     492        3440 :         switch (tp1) {
     493          49 :         case TYPE_bte:
     494          49 :                 switch (tp2) {
     495          49 :                 case TYPE_bte:
     496          49 :                         switch (tp) {
     497          49 :                         case TYPE_bte:
     498          49 :                                 nils = div_bte_bte_bte(lft, incr1, rgt, incr2,
     499             :                                                        dst, GDK_bte_max,
     500             :                                                        ci1, ci2, candoff1, candoff2);
     501          49 :                                 break;
     502           0 :                         case TYPE_sht:
     503           0 :                                 nils = div_bte_bte_sht(lft, incr1, rgt, incr2,
     504             :                                                        dst, GDK_sht_max,
     505             :                                                        ci1, ci2, candoff1, candoff2);
     506           0 :                                 break;
     507           0 :                         case TYPE_int:
     508           0 :                                 nils = div_bte_bte_int(lft, incr1, rgt, incr2,
     509             :                                                        dst, GDK_int_max,
     510             :                                                        ci1, ci2, candoff1, candoff2);
     511           0 :                                 break;
     512           0 :                         case TYPE_lng:
     513           0 :                                 nils = div_bte_bte_lng(lft, incr1, rgt, incr2,
     514             :                                                        dst, GDK_lng_max,
     515             :                                                        ci1, ci2, candoff1, candoff2);
     516           0 :                                 break;
     517             : #ifdef HAVE_HGE
     518           0 :                         case TYPE_hge:
     519           0 :                                 nils = div_bte_bte_hge(lft, incr1, rgt, incr2,
     520             :                                                        dst, GDK_hge_max,
     521             :                                                        ci1, ci2, candoff1, candoff2);
     522           0 :                                 break;
     523             : #endif
     524           0 :                         case TYPE_flt:
     525           0 :                                 nils = div_bte_bte_flt(lft, incr1, rgt, incr2,
     526             :                                                        dst, GDK_flt_max,
     527             :                                                        ci1, ci2, candoff1, candoff2);
     528           0 :                                 break;
     529           0 :                         case TYPE_dbl:
     530           0 :                                 nils = div_bte_bte_dbl(lft, incr1, rgt, incr2,
     531             :                                                        dst, GDK_dbl_max,
     532             :                                                        ci1, ci2, candoff1, candoff2);
     533           0 :                                 break;
     534           0 :                         default:
     535           0 :                                 goto unsupported;
     536             :                         }
     537             :                         break;
     538           0 :                 case TYPE_sht:
     539           0 :                         switch (tp) {
     540           0 :                         case TYPE_bte:
     541           0 :                                 nils = div_bte_sht_bte(lft, incr1, rgt, incr2,
     542             :                                                        dst, GDK_bte_max,
     543             :                                                        ci1, ci2, candoff1, candoff2);
     544           0 :                                 break;
     545           0 :                         case TYPE_sht:
     546           0 :                                 nils = div_bte_sht_sht(lft, incr1, rgt, incr2,
     547             :                                                        dst, GDK_sht_max,
     548             :                                                        ci1, ci2, candoff1, candoff2);
     549           0 :                                 break;
     550           0 :                         case TYPE_int:
     551           0 :                                 nils = div_bte_sht_int(lft, incr1, rgt, incr2,
     552             :                                                        dst, GDK_int_max,
     553             :                                                        ci1, ci2, candoff1, candoff2);
     554           0 :                                 break;
     555           0 :                         case TYPE_lng:
     556           0 :                                 nils = div_bte_sht_lng(lft, incr1, rgt, incr2,
     557             :                                                        dst, GDK_lng_max,
     558             :                                                        ci1, ci2, candoff1, candoff2);
     559           0 :                                 break;
     560             : #ifdef HAVE_HGE
     561           0 :                         case TYPE_hge:
     562           0 :                                 nils = div_bte_sht_hge(lft, incr1, rgt, incr2,
     563             :                                                        dst, GDK_hge_max,
     564             :                                                        ci1, ci2, candoff1, candoff2);
     565           0 :                                 break;
     566             : #endif
     567           0 :                         case TYPE_flt:
     568           0 :                                 nils = div_bte_sht_flt(lft, incr1, rgt, incr2,
     569             :                                                        dst, GDK_flt_max,
     570             :                                                        ci1, ci2, candoff1, candoff2);
     571           0 :                                 break;
     572           0 :                         case TYPE_dbl:
     573           0 :                                 nils = div_bte_sht_dbl(lft, incr1, rgt, incr2,
     574             :                                                        dst, GDK_dbl_max,
     575             :                                                        ci1, ci2, candoff1, candoff2);
     576           0 :                                 break;
     577           0 :                         default:
     578           0 :                                 goto unsupported;
     579             :                         }
     580             :                         break;
     581           0 :                 case TYPE_int:
     582           0 :                         switch (tp) {
     583           0 :                         case TYPE_bte:
     584           0 :                                 nils = div_bte_int_bte(lft, incr1, rgt, incr2,
     585             :                                                        dst, GDK_bte_max,
     586             :                                                        ci1, ci2, candoff1, candoff2);
     587           0 :                                 break;
     588           0 :                         case TYPE_sht:
     589           0 :                                 nils = div_bte_int_sht(lft, incr1, rgt, incr2,
     590             :                                                        dst, GDK_sht_max,
     591             :                                                        ci1, ci2, candoff1, candoff2);
     592           0 :                                 break;
     593           0 :                         case TYPE_int:
     594           0 :                                 nils = div_bte_int_int(lft, incr1, rgt, incr2,
     595             :                                                        dst, GDK_int_max,
     596             :                                                        ci1, ci2, candoff1, candoff2);
     597           0 :                                 break;
     598           0 :                         case TYPE_lng:
     599           0 :                                 nils = div_bte_int_lng(lft, incr1, rgt, incr2,
     600             :                                                        dst, GDK_lng_max,
     601             :                                                        ci1, ci2, candoff1, candoff2);
     602           0 :                                 break;
     603             : #ifdef HAVE_HGE
     604           0 :                         case TYPE_hge:
     605           0 :                                 nils = div_bte_int_hge(lft, incr1, rgt, incr2,
     606             :                                                        dst, GDK_hge_max,
     607             :                                                        ci1, ci2, candoff1, candoff2);
     608           0 :                                 break;
     609             : #endif
     610           0 :                         case TYPE_flt:
     611           0 :                                 nils = div_bte_int_flt(lft, incr1, rgt, incr2,
     612             :                                                        dst, GDK_flt_max,
     613             :                                                        ci1, ci2, candoff1, candoff2);
     614           0 :                                 break;
     615           0 :                         case TYPE_dbl:
     616           0 :                                 nils = div_bte_int_dbl(lft, incr1, rgt, incr2,
     617             :                                                        dst, GDK_dbl_max,
     618             :                                                        ci1, ci2, candoff1, candoff2);
     619           0 :                                 break;
     620           0 :                         default:
     621           0 :                                 goto unsupported;
     622             :                         }
     623             :                         break;
     624           0 :                 case TYPE_lng:
     625           0 :                         switch (tp) {
     626           0 :                         case TYPE_bte:
     627           0 :                                 nils = div_bte_lng_bte(lft, incr1, rgt, incr2,
     628             :                                                        dst, GDK_bte_max,
     629             :                                                        ci1, ci2, candoff1, candoff2);
     630           0 :                                 break;
     631           0 :                         case TYPE_sht:
     632           0 :                                 nils = div_bte_lng_sht(lft, incr1, rgt, incr2,
     633             :                                                        dst, GDK_sht_max,
     634             :                                                        ci1, ci2, candoff1, candoff2);
     635           0 :                                 break;
     636           0 :                         case TYPE_int:
     637           0 :                                 nils = div_bte_lng_int(lft, incr1, rgt, incr2,
     638             :                                                        dst, GDK_int_max,
     639             :                                                        ci1, ci2, candoff1, candoff2);
     640           0 :                                 break;
     641           0 :                         case TYPE_lng:
     642           0 :                                 nils = div_bte_lng_lng(lft, incr1, rgt, incr2,
     643             :                                                        dst, GDK_lng_max,
     644             :                                                        ci1, ci2, candoff1, candoff2);
     645           0 :                                 break;
     646             : #ifdef HAVE_HGE
     647           0 :                         case TYPE_hge:
     648           0 :                                 nils = div_bte_lng_hge(lft, incr1, rgt, incr2,
     649             :                                                        dst, GDK_hge_max,
     650             :                                                        ci1, ci2, candoff1, candoff2);
     651           0 :                                 break;
     652             : #endif
     653           0 :                         case TYPE_flt:
     654           0 :                                 nils = div_bte_lng_flt(lft, incr1, rgt, incr2,
     655             :                                                        dst, GDK_flt_max,
     656             :                                                        ci1, ci2, candoff1, candoff2);
     657           0 :                                 break;
     658           0 :                         case TYPE_dbl:
     659           0 :                                 nils = div_bte_lng_dbl(lft, incr1, rgt, incr2,
     660             :                                                        dst, GDK_dbl_max,
     661             :                                                        ci1, ci2, candoff1, candoff2);
     662           0 :                                 break;
     663           0 :                         default:
     664           0 :                                 goto unsupported;
     665             :                         }
     666             :                         break;
     667             : #ifdef HAVE_HGE
     668           0 :                 case TYPE_hge:
     669           0 :                         switch (tp) {
     670           0 :                         case TYPE_bte:
     671           0 :                                 nils = div_bte_hge_bte(lft, incr1, rgt, incr2,
     672             :                                                        dst, GDK_bte_max,
     673             :                                                        ci1, ci2, candoff1, candoff2);
     674           0 :                                 break;
     675           0 :                         case TYPE_sht:
     676           0 :                                 nils = div_bte_hge_sht(lft, incr1, rgt, incr2,
     677             :                                                        dst, GDK_sht_max,
     678             :                                                        ci1, ci2, candoff1, candoff2);
     679           0 :                                 break;
     680           0 :                         case TYPE_int:
     681           0 :                                 nils = div_bte_hge_int(lft, incr1, rgt, incr2,
     682             :                                                        dst, GDK_int_max,
     683             :                                                        ci1, ci2, candoff1, candoff2);
     684           0 :                                 break;
     685           0 :                         case TYPE_lng:
     686           0 :                                 nils = div_bte_hge_lng(lft, incr1, rgt, incr2,
     687             :                                                        dst, GDK_lng_max,
     688             :                                                        ci1, ci2, candoff1, candoff2);
     689           0 :                                 break;
     690           0 :                         case TYPE_hge:
     691           0 :                                 nils = div_bte_hge_hge(lft, incr1, rgt, incr2,
     692             :                                                        dst, GDK_hge_max,
     693             :                                                        ci1, ci2, candoff1, candoff2);
     694           0 :                                 break;
     695           0 :                         case TYPE_flt:
     696           0 :                                 nils = div_bte_hge_flt(lft, incr1, rgt, incr2,
     697             :                                                        dst, GDK_flt_max,
     698             :                                                        ci1, ci2, candoff1, candoff2);
     699           0 :                                 break;
     700           0 :                         case TYPE_dbl:
     701           0 :                                 nils = div_bte_hge_dbl(lft, incr1, rgt, incr2,
     702             :                                                        dst, GDK_dbl_max,
     703             :                                                        ci1, ci2, candoff1, candoff2);
     704           0 :                                 break;
     705           0 :                         default:
     706           0 :                                 goto unsupported;
     707             :                         }
     708             :                         break;
     709             : #endif
     710           0 :                 case TYPE_flt:
     711           0 :                         switch (tp) {
     712           0 :                         case TYPE_bte:
     713           0 :                                 nils = div_bte_flt_bte(lft, incr1, rgt, incr2,
     714             :                                                        dst, GDK_bte_max,
     715             :                                                        ci1, ci2, candoff1, candoff2);
     716           0 :                                 break;
     717           0 :                         case TYPE_sht:
     718           0 :                                 nils = div_bte_flt_sht(lft, incr1, rgt, incr2,
     719             :                                                        dst, GDK_sht_max,
     720             :                                                        ci1, ci2, candoff1, candoff2);
     721           0 :                                 break;
     722           0 :                         case TYPE_int:
     723           0 :                                 nils = div_bte_flt_int(lft, incr1, rgt, incr2,
     724             :                                                        dst, GDK_int_max,
     725             :                                                        ci1, ci2, candoff1, candoff2);
     726           0 :                                 break;
     727           0 :                         case TYPE_lng:
     728           0 :                                 nils = div_bte_flt_lng(lft, incr1, rgt, incr2,
     729             :                                                        dst, GDK_lng_max,
     730             :                                                        ci1, ci2, candoff1, candoff2);
     731           0 :                                 break;
     732             : #ifdef HAVE_HGE
     733           0 :                         case TYPE_hge:
     734           0 :                                 nils = div_bte_flt_hge(lft, incr1, rgt, incr2,
     735             :                                                        dst, GDK_hge_max,
     736             :                                                        ci1, ci2, candoff1, candoff2);
     737           0 :                                 break;
     738             : #endif
     739           0 :                         case TYPE_flt:
     740           0 :                                 nils = div_bte_flt_flt(lft, incr1, rgt, incr2,
     741             :                                                        dst, GDK_flt_max,
     742             :                                                        ci1, ci2, candoff1, candoff2);
     743           0 :                                 break;
     744           0 :                         case TYPE_dbl:
     745           0 :                                 nils = div_bte_flt_dbl(lft, incr1, rgt, incr2,
     746             :                                                        dst, GDK_dbl_max,
     747             :                                                        ci1, ci2, candoff1, candoff2);
     748           0 :                                 break;
     749           0 :                         default:
     750           0 :                                 goto unsupported;
     751             :                         }
     752             :                         break;
     753           0 :                 case TYPE_dbl:
     754           0 :                         switch (tp) {
     755           0 :                         case TYPE_bte:
     756           0 :                                 nils = div_bte_dbl_bte(lft, incr1, rgt, incr2,
     757             :                                                        dst, GDK_bte_max,
     758             :                                                        ci1, ci2, candoff1, candoff2);
     759           0 :                                 break;
     760           0 :                         case TYPE_sht:
     761           0 :                                 nils = div_bte_dbl_sht(lft, incr1, rgt, incr2,
     762             :                                                        dst, GDK_sht_max,
     763             :                                                        ci1, ci2, candoff1, candoff2);
     764           0 :                                 break;
     765           0 :                         case TYPE_int:
     766           0 :                                 nils = div_bte_dbl_int(lft, incr1, rgt, incr2,
     767             :                                                        dst, GDK_int_max,
     768             :                                                        ci1, ci2, candoff1, candoff2);
     769           0 :                                 break;
     770           0 :                         case TYPE_lng:
     771           0 :                                 nils = div_bte_dbl_lng(lft, incr1, rgt, incr2,
     772             :                                                        dst, GDK_lng_max,
     773             :                                                        ci1, ci2, candoff1, candoff2);
     774           0 :                                 break;
     775             : #ifdef HAVE_HGE
     776           0 :                         case TYPE_hge:
     777           0 :                                 nils = div_bte_dbl_hge(lft, incr1, rgt, incr2,
     778             :                                                        dst, GDK_hge_max,
     779             :                                                        ci1, ci2, candoff1, candoff2);
     780           0 :                                 break;
     781             : #endif
     782           0 :                         case TYPE_dbl:
     783           0 :                                 nils = div_bte_dbl_dbl(lft, incr1, rgt, incr2,
     784             :                                                        dst, GDK_dbl_max,
     785             :                                                        ci1, ci2, candoff1, candoff2);
     786           0 :                                 break;
     787           0 :                         default:
     788           0 :                                 goto unsupported;
     789             :                         }
     790             :                         break;
     791           0 :                 default:
     792           0 :                         goto unsupported;
     793             :                 }
     794             :                 break;
     795          28 :         case TYPE_sht:
     796          28 :                 switch (tp2) {
     797          10 :                 case TYPE_bte:
     798          10 :                         switch (tp) {
     799          10 :                         case TYPE_sht:
     800          10 :                                 nils = div_sht_bte_sht(lft, incr1, rgt, incr2,
     801             :                                                        dst, GDK_sht_max,
     802             :                                                        ci1, ci2, candoff1, candoff2);
     803          10 :                                 break;
     804           0 :                         case TYPE_int:
     805           0 :                                 nils = div_sht_bte_int(lft, incr1, rgt, incr2,
     806             :                                                        dst, GDK_int_max,
     807             :                                                        ci1, ci2, candoff1, candoff2);
     808           0 :                                 break;
     809           0 :                         case TYPE_lng:
     810           0 :                                 nils = div_sht_bte_lng(lft, incr1, rgt, incr2,
     811             :                                                        dst, GDK_lng_max,
     812             :                                                        ci1, ci2, candoff1, candoff2);
     813           0 :                                 break;
     814             : #ifdef HAVE_HGE
     815           0 :                         case TYPE_hge:
     816           0 :                                 nils = div_sht_bte_hge(lft, incr1, rgt, incr2,
     817             :                                                        dst, GDK_hge_max,
     818             :                                                        ci1, ci2, candoff1, candoff2);
     819           0 :                                 break;
     820             : #endif
     821           0 :                         case TYPE_flt:
     822           0 :                                 nils = div_sht_bte_flt(lft, incr1, rgt, incr2,
     823             :                                                        dst, GDK_flt_max,
     824             :                                                        ci1, ci2, candoff1, candoff2);
     825           0 :                                 break;
     826           0 :                         case TYPE_dbl:
     827           0 :                                 nils = div_sht_bte_dbl(lft, incr1, rgt, incr2,
     828             :                                                        dst, GDK_dbl_max,
     829             :                                                        ci1, ci2, candoff1, candoff2);
     830           0 :                                 break;
     831           0 :                         default:
     832           0 :                                 goto unsupported;
     833             :                         }
     834             :                         break;
     835          18 :                 case TYPE_sht:
     836          18 :                         switch (tp) {
     837          18 :                         case TYPE_sht:
     838          18 :                                 nils = div_sht_sht_sht(lft, incr1, rgt, incr2,
     839             :                                                        dst, GDK_sht_max,
     840             :                                                        ci1, ci2, candoff1, candoff2);
     841          18 :                                 break;
     842           0 :                         case TYPE_int:
     843           0 :                                 nils = div_sht_sht_int(lft, incr1, rgt, incr2,
     844             :                                                        dst, GDK_int_max,
     845             :                                                        ci1, ci2, candoff1, candoff2);
     846           0 :                                 break;
     847           0 :                         case TYPE_lng:
     848           0 :                                 nils = div_sht_sht_lng(lft, incr1, rgt, incr2,
     849             :                                                        dst, GDK_lng_max,
     850             :                                                        ci1, ci2, candoff1, candoff2);
     851           0 :                                 break;
     852             : #ifdef HAVE_HGE
     853           0 :                         case TYPE_hge:
     854           0 :                                 nils = div_sht_sht_hge(lft, incr1, rgt, incr2,
     855             :                                                        dst, GDK_hge_max,
     856             :                                                        ci1, ci2, candoff1, candoff2);
     857           0 :                                 break;
     858             : #endif
     859           0 :                         case TYPE_flt:
     860           0 :                                 nils = div_sht_sht_flt(lft, incr1, rgt, incr2,
     861             :                                                        dst, GDK_flt_max,
     862             :                                                        ci1, ci2, candoff1, candoff2);
     863           0 :                                 break;
     864           0 :                         case TYPE_dbl:
     865           0 :                                 nils = div_sht_sht_dbl(lft, incr1, rgt, incr2,
     866             :                                                        dst, GDK_dbl_max,
     867             :                                                        ci1, ci2, candoff1, candoff2);
     868           0 :                                 break;
     869           0 :                         default:
     870           0 :                                 goto unsupported;
     871             :                         }
     872             :                         break;
     873           0 :                 case TYPE_int:
     874           0 :                         switch (tp) {
     875           0 :                         case TYPE_sht:
     876           0 :                                 nils = div_sht_int_sht(lft, incr1, rgt, incr2,
     877             :                                                        dst, GDK_sht_max,
     878             :                                                        ci1, ci2, candoff1, candoff2);
     879           0 :                                 break;
     880           0 :                         case TYPE_int:
     881           0 :                                 nils = div_sht_int_int(lft, incr1, rgt, incr2,
     882             :                                                        dst, GDK_int_max,
     883             :                                                        ci1, ci2, candoff1, candoff2);
     884           0 :                                 break;
     885           0 :                         case TYPE_lng:
     886           0 :                                 nils = div_sht_int_lng(lft, incr1, rgt, incr2,
     887             :                                                        dst, GDK_lng_max,
     888             :                                                        ci1, ci2, candoff1, candoff2);
     889           0 :                                 break;
     890             : #ifdef HAVE_HGE
     891           0 :                         case TYPE_hge:
     892           0 :                                 nils = div_sht_int_hge(lft, incr1, rgt, incr2,
     893             :                                                        dst, GDK_hge_max,
     894             :                                                        ci1, ci2, candoff1, candoff2);
     895           0 :                                 break;
     896             : #endif
     897           0 :                         case TYPE_flt:
     898           0 :                                 nils = div_sht_int_flt(lft, incr1, rgt, incr2,
     899             :                                                        dst, GDK_flt_max,
     900             :                                                        ci1, ci2, candoff1, candoff2);
     901           0 :                                 break;
     902           0 :                         case TYPE_dbl:
     903           0 :                                 nils = div_sht_int_dbl(lft, incr1, rgt, incr2,
     904             :                                                        dst, GDK_dbl_max,
     905             :                                                        ci1, ci2, candoff1, candoff2);
     906           0 :                                 break;
     907           0 :                         default:
     908           0 :                                 goto unsupported;
     909             :                         }
     910             :                         break;
     911           0 :                 case TYPE_lng:
     912           0 :                         switch (tp) {
     913           0 :                         case TYPE_sht:
     914           0 :                                 nils = div_sht_lng_sht(lft, incr1, rgt, incr2,
     915             :                                                        dst, GDK_sht_max,
     916             :                                                        ci1, ci2, candoff1, candoff2);
     917           0 :                                 break;
     918           0 :                         case TYPE_int:
     919           0 :                                 nils = div_sht_lng_int(lft, incr1, rgt, incr2,
     920             :                                                        dst, GDK_int_max,
     921             :                                                        ci1, ci2, candoff1, candoff2);
     922           0 :                                 break;
     923           0 :                         case TYPE_lng:
     924           0 :                                 nils = div_sht_lng_lng(lft, incr1, rgt, incr2,
     925             :                                                        dst, GDK_lng_max,
     926             :                                                        ci1, ci2, candoff1, candoff2);
     927           0 :                                 break;
     928             : #ifdef HAVE_HGE
     929           0 :                         case TYPE_hge:
     930           0 :                                 nils = div_sht_lng_hge(lft, incr1, rgt, incr2,
     931             :                                                        dst, GDK_hge_max,
     932             :                                                        ci1, ci2, candoff1, candoff2);
     933           0 :                                 break;
     934             : #endif
     935           0 :                         case TYPE_flt:
     936           0 :                                 nils = div_sht_lng_flt(lft, incr1, rgt, incr2,
     937             :                                                        dst, GDK_flt_max,
     938             :                                                        ci1, ci2, candoff1, candoff2);
     939           0 :                                 break;
     940           0 :                         case TYPE_dbl:
     941           0 :                                 nils = div_sht_lng_dbl(lft, incr1, rgt, incr2,
     942             :                                                        dst, GDK_dbl_max,
     943             :                                                        ci1, ci2, candoff1, candoff2);
     944           0 :                                 break;
     945           0 :                         default:
     946           0 :                                 goto unsupported;
     947             :                         }
     948             :                         break;
     949             : #ifdef HAVE_HGE
     950           0 :                 case TYPE_hge:
     951           0 :                         switch (tp) {
     952           0 :                         case TYPE_sht:
     953           0 :                                 nils = div_sht_hge_sht(lft, incr1, rgt, incr2,
     954             :                                                        dst, GDK_sht_max,
     955             :                                                        ci1, ci2, candoff1, candoff2);
     956           0 :                                 break;
     957           0 :                         case TYPE_int:
     958           0 :                                 nils = div_sht_hge_int(lft, incr1, rgt, incr2,
     959             :                                                        dst, GDK_int_max,
     960             :                                                        ci1, ci2, candoff1, candoff2);
     961           0 :                                 break;
     962           0 :                         case TYPE_lng:
     963           0 :                                 nils = div_sht_hge_lng(lft, incr1, rgt, incr2,
     964             :                                                        dst, GDK_lng_max,
     965             :                                                        ci1, ci2, candoff1, candoff2);
     966           0 :                                 break;
     967           0 :                         case TYPE_hge:
     968           0 :                                 nils = div_sht_hge_hge(lft, incr1, rgt, incr2,
     969             :                                                        dst, GDK_hge_max,
     970             :                                                        ci1, ci2, candoff1, candoff2);
     971           0 :                                 break;
     972           0 :                         case TYPE_flt:
     973           0 :                                 nils = div_sht_hge_flt(lft, incr1, rgt, incr2,
     974             :                                                        dst, GDK_flt_max,
     975             :                                                        ci1, ci2, candoff1, candoff2);
     976           0 :                                 break;
     977           0 :                         case TYPE_dbl:
     978           0 :                                 nils = div_sht_hge_dbl(lft, incr1, rgt, incr2,
     979             :                                                        dst, GDK_dbl_max,
     980             :                                                        ci1, ci2, candoff1, candoff2);
     981           0 :                                 break;
     982           0 :                         default:
     983           0 :                                 goto unsupported;
     984             :                         }
     985             :                         break;
     986             : #endif
     987           0 :                 case TYPE_flt:
     988           0 :                         switch (tp) {
     989           0 :                         case TYPE_bte:
     990           0 :                                 nils = div_sht_flt_bte(lft, incr1, rgt, incr2,
     991             :                                                        dst, GDK_bte_max,
     992             :                                                        ci1, ci2, candoff1, candoff2);
     993           0 :                                 break;
     994           0 :                         case TYPE_sht:
     995           0 :                                 nils = div_sht_flt_sht(lft, incr1, rgt, incr2,
     996             :                                                        dst, GDK_sht_max,
     997             :                                                        ci1, ci2, candoff1, candoff2);
     998           0 :                                 break;
     999           0 :                         case TYPE_int:
    1000           0 :                                 nils = div_sht_flt_int(lft, incr1, rgt, incr2,
    1001             :                                                        dst, GDK_int_max,
    1002             :                                                        ci1, ci2, candoff1, candoff2);
    1003           0 :                                 break;
    1004           0 :                         case TYPE_lng:
    1005           0 :                                 nils = div_sht_flt_lng(lft, incr1, rgt, incr2,
    1006             :                                                        dst, GDK_lng_max,
    1007             :                                                        ci1, ci2, candoff1, candoff2);
    1008           0 :                                 break;
    1009             : #ifdef HAVE_HGE
    1010           0 :                         case TYPE_hge:
    1011           0 :                                 nils = div_sht_flt_hge(lft, incr1, rgt, incr2,
    1012             :                                                        dst, GDK_hge_max,
    1013             :                                                        ci1, ci2, candoff1, candoff2);
    1014           0 :                                 break;
    1015             : #endif
    1016           0 :                         case TYPE_flt:
    1017           0 :                                 nils = div_sht_flt_flt(lft, incr1, rgt, incr2,
    1018             :                                                        dst, GDK_flt_max,
    1019             :                                                        ci1, ci2, candoff1, candoff2);
    1020           0 :                                 break;
    1021           0 :                         case TYPE_dbl:
    1022           0 :                                 nils = div_sht_flt_dbl(lft, incr1, rgt, incr2,
    1023             :                                                        dst, GDK_dbl_max,
    1024             :                                                        ci1, ci2, candoff1, candoff2);
    1025           0 :                                 break;
    1026           0 :                         default:
    1027           0 :                                 goto unsupported;
    1028             :                         }
    1029             :                         break;
    1030           0 :                 case TYPE_dbl:
    1031           0 :                         switch (tp) {
    1032           0 :                         case TYPE_bte:
    1033           0 :                                 nils = div_sht_dbl_bte(lft, incr1, rgt, incr2,
    1034             :                                                        dst, GDK_bte_max,
    1035             :                                                        ci1, ci2, candoff1, candoff2);
    1036           0 :                                 break;
    1037           0 :                         case TYPE_sht:
    1038           0 :                                 nils = div_sht_dbl_sht(lft, incr1, rgt, incr2,
    1039             :                                                        dst, GDK_sht_max,
    1040             :                                                        ci1, ci2, candoff1, candoff2);
    1041           0 :                                 break;
    1042           0 :                         case TYPE_int:
    1043           0 :                                 nils = div_sht_dbl_int(lft, incr1, rgt, incr2,
    1044             :                                                        dst, GDK_int_max,
    1045             :                                                        ci1, ci2, candoff1, candoff2);
    1046           0 :                                 break;
    1047           0 :                         case TYPE_lng:
    1048           0 :                                 nils = div_sht_dbl_lng(lft, incr1, rgt, incr2,
    1049             :                                                        dst, GDK_lng_max,
    1050             :                                                        ci1, ci2, candoff1, candoff2);
    1051           0 :                                 break;
    1052             : #ifdef HAVE_HGE
    1053           0 :                         case TYPE_hge:
    1054           0 :                                 nils = div_sht_dbl_hge(lft, incr1, rgt, incr2,
    1055             :                                                        dst, GDK_hge_max,
    1056             :                                                        ci1, ci2, candoff1, candoff2);
    1057           0 :                                 break;
    1058             : #endif
    1059           0 :                         case TYPE_dbl:
    1060           0 :                                 nils = div_sht_dbl_dbl(lft, incr1, rgt, incr2,
    1061             :                                                        dst, GDK_dbl_max,
    1062             :                                                        ci1, ci2, candoff1, candoff2);
    1063           0 :                                 break;
    1064           0 :                         default:
    1065           0 :                                 goto unsupported;
    1066             :                         }
    1067             :                         break;
    1068           0 :                 default:
    1069           0 :                         goto unsupported;
    1070             :                 }
    1071             :                 break;
    1072         239 :         case TYPE_int:
    1073         239 :                 switch (tp2) {
    1074         124 :                 case TYPE_bte:
    1075         124 :                         switch (tp) {
    1076         124 :                         case TYPE_int:
    1077         124 :                                 nils = div_int_bte_int(lft, incr1, rgt, incr2,
    1078             :                                                        dst, GDK_int_max,
    1079             :                                                        ci1, ci2, candoff1, candoff2);
    1080         124 :                                 break;
    1081           0 :                         case TYPE_lng:
    1082           0 :                                 nils = div_int_bte_lng(lft, incr1, rgt, incr2,
    1083             :                                                        dst, GDK_lng_max,
    1084             :                                                        ci1, ci2, candoff1, candoff2);
    1085           0 :                                 break;
    1086             : #ifdef HAVE_HGE
    1087           0 :                         case TYPE_hge:
    1088           0 :                                 nils = div_int_bte_hge(lft, incr1, rgt, incr2,
    1089             :                                                        dst, GDK_hge_max,
    1090             :                                                        ci1, ci2, candoff1, candoff2);
    1091           0 :                                 break;
    1092             : #endif
    1093           0 :                         case TYPE_flt:
    1094           0 :                                 nils = div_int_bte_flt(lft, incr1, rgt, incr2,
    1095             :                                                        dst, GDK_flt_max,
    1096             :                                                        ci1, ci2, candoff1, candoff2);
    1097           0 :                                 break;
    1098           0 :                         case TYPE_dbl:
    1099           0 :                                 nils = div_int_bte_dbl(lft, incr1, rgt, incr2,
    1100             :                                                        dst, GDK_dbl_max,
    1101             :                                                        ci1, ci2, candoff1, candoff2);
    1102           0 :                                 break;
    1103           0 :                         default:
    1104           0 :                                 goto unsupported;
    1105             :                         }
    1106             :                         break;
    1107          18 :                 case TYPE_sht:
    1108          18 :                         switch (tp) {
    1109          18 :                         case TYPE_int:
    1110          18 :                                 nils = div_int_sht_int(lft, incr1, rgt, incr2,
    1111             :                                                        dst, GDK_int_max,
    1112             :                                                        ci1, ci2, candoff1, candoff2);
    1113          18 :                                 break;
    1114           0 :                         case TYPE_lng:
    1115           0 :                                 nils = div_int_sht_lng(lft, incr1, rgt, incr2,
    1116             :                                                        dst, GDK_lng_max,
    1117             :                                                        ci1, ci2, candoff1, candoff2);
    1118           0 :                                 break;
    1119             : #ifdef HAVE_HGE
    1120           0 :                         case TYPE_hge:
    1121           0 :                                 nils = div_int_sht_hge(lft, incr1, rgt, incr2,
    1122             :                                                        dst, GDK_hge_max,
    1123             :                                                        ci1, ci2, candoff1, candoff2);
    1124           0 :                                 break;
    1125             : #endif
    1126           0 :                         case TYPE_flt:
    1127           0 :                                 nils = div_int_sht_flt(lft, incr1, rgt, incr2,
    1128             :                                                        dst, GDK_flt_max,
    1129             :                                                        ci1, ci2, candoff1, candoff2);
    1130           0 :                                 break;
    1131           0 :                         case TYPE_dbl:
    1132           0 :                                 nils = div_int_sht_dbl(lft, incr1, rgt, incr2,
    1133             :                                                        dst, GDK_dbl_max,
    1134             :                                                        ci1, ci2, candoff1, candoff2);
    1135           0 :                                 break;
    1136           0 :                         default:
    1137           0 :                                 goto unsupported;
    1138             :                         }
    1139             :                         break;
    1140          90 :                 case TYPE_int:
    1141          90 :                         switch (tp) {
    1142          90 :                         case TYPE_int:
    1143          90 :                                 nils = div_int_int_int(lft, incr1, rgt, incr2,
    1144             :                                                        dst, GDK_int_max,
    1145             :                                                        ci1, ci2, candoff1, candoff2);
    1146          90 :                                 break;
    1147           0 :                         case TYPE_lng:
    1148           0 :                                 nils = div_int_int_lng(lft, incr1, rgt, incr2,
    1149             :                                                        dst, GDK_lng_max,
    1150             :                                                        ci1, ci2, candoff1, candoff2);
    1151           0 :                                 break;
    1152             : #ifdef HAVE_HGE
    1153           0 :                         case TYPE_hge:
    1154           0 :                                 nils = div_int_int_hge(lft, incr1, rgt, incr2,
    1155             :                                                        dst, GDK_hge_max,
    1156             :                                                        ci1, ci2, candoff1, candoff2);
    1157           0 :                                 break;
    1158             : #endif
    1159           0 :                         case TYPE_flt:
    1160           0 :                                 nils = div_int_int_flt(lft, incr1, rgt, incr2,
    1161             :                                                        dst, GDK_flt_max,
    1162             :                                                        ci1, ci2, candoff1, candoff2);
    1163           0 :                                 break;
    1164           0 :                         case TYPE_dbl:
    1165           0 :                                 nils = div_int_int_dbl(lft, incr1, rgt, incr2,
    1166             :                                                        dst, GDK_dbl_max,
    1167             :                                                        ci1, ci2, candoff1, candoff2);
    1168           0 :                                 break;
    1169           0 :                         default:
    1170           0 :                                 goto unsupported;
    1171             :                         }
    1172             :                         break;
    1173           0 :                 case TYPE_lng:
    1174           0 :                         switch (tp) {
    1175           0 :                         case TYPE_int:
    1176           0 :                                 nils = div_int_lng_int(lft, incr1, rgt, incr2,
    1177             :                                                        dst, GDK_int_max,
    1178             :                                                        ci1, ci2, candoff1, candoff2);
    1179           0 :                                 break;
    1180           0 :                         case TYPE_lng:
    1181           0 :                                 nils = div_int_lng_lng(lft, incr1, rgt, incr2,
    1182             :                                                        dst, GDK_lng_max,
    1183             :                                                        ci1, ci2, candoff1, candoff2);
    1184           0 :                                 break;
    1185             : #ifdef HAVE_HGE
    1186           0 :                         case TYPE_hge:
    1187           0 :                                 nils = div_int_lng_hge(lft, incr1, rgt, incr2,
    1188             :                                                        dst, GDK_hge_max,
    1189             :                                                        ci1, ci2, candoff1, candoff2);
    1190           0 :                                 break;
    1191             : #endif
    1192           0 :                         case TYPE_flt:
    1193           0 :                                 nils = div_int_lng_flt(lft, incr1, rgt, incr2,
    1194             :                                                        dst, GDK_flt_max,
    1195             :                                                        ci1, ci2, candoff1, candoff2);
    1196           0 :                                 break;
    1197           0 :                         case TYPE_dbl:
    1198           0 :                                 nils = div_int_lng_dbl(lft, incr1, rgt, incr2,
    1199             :                                                        dst, GDK_dbl_max,
    1200             :                                                        ci1, ci2, candoff1, candoff2);
    1201           0 :                                 break;
    1202           0 :                         default:
    1203           0 :                                 goto unsupported;
    1204             :                         }
    1205             :                         break;
    1206             : #ifdef HAVE_HGE
    1207           0 :                 case TYPE_hge:
    1208           0 :                         switch (tp) {
    1209           0 :                         case TYPE_int:
    1210           0 :                                 nils = div_int_hge_int(lft, incr1, rgt, incr2,
    1211             :                                                        dst, GDK_int_max,
    1212             :                                                        ci1, ci2, candoff1, candoff2);
    1213           0 :                                 break;
    1214           0 :                         case TYPE_lng:
    1215           0 :                                 nils = div_int_hge_lng(lft, incr1, rgt, incr2,
    1216             :                                                        dst, GDK_lng_max,
    1217             :                                                        ci1, ci2, candoff1, candoff2);
    1218           0 :                                 break;
    1219           0 :                         case TYPE_hge:
    1220           0 :                                 nils = div_int_hge_hge(lft, incr1, rgt, incr2,
    1221             :                                                        dst, GDK_hge_max,
    1222             :                                                        ci1, ci2, candoff1, candoff2);
    1223           0 :                                 break;
    1224           0 :                         case TYPE_flt:
    1225           0 :                                 nils = div_int_hge_flt(lft, incr1, rgt, incr2,
    1226             :                                                        dst, GDK_flt_max,
    1227             :                                                        ci1, ci2, candoff1, candoff2);
    1228           0 :                                 break;
    1229           0 :                         case TYPE_dbl:
    1230           0 :                                 nils = div_int_hge_dbl(lft, incr1, rgt, incr2,
    1231             :                                                        dst, GDK_dbl_max,
    1232             :                                                        ci1, ci2, candoff1, candoff2);
    1233           0 :                                 break;
    1234           0 :                         default:
    1235           0 :                                 goto unsupported;
    1236             :                         }
    1237             :                         break;
    1238             : #endif
    1239           4 :                 case TYPE_flt:
    1240           4 :                         switch (tp) {
    1241           0 :                         case TYPE_bte:
    1242           0 :                                 nils = div_int_flt_bte(lft, incr1, rgt, incr2,
    1243             :                                                        dst, GDK_bte_max,
    1244             :                                                        ci1, ci2, candoff1, candoff2);
    1245           0 :                                 break;
    1246           0 :                         case TYPE_sht:
    1247           0 :                                 nils = div_int_flt_sht(lft, incr1, rgt, incr2,
    1248             :                                                        dst, GDK_sht_max,
    1249             :                                                        ci1, ci2, candoff1, candoff2);
    1250           0 :                                 break;
    1251           4 :                         case TYPE_int:
    1252           4 :                                 nils = div_int_flt_int(lft, incr1, rgt, incr2,
    1253             :                                                        dst, GDK_int_max,
    1254             :                                                        ci1, ci2, candoff1, candoff2);
    1255           4 :                                 break;
    1256           0 :                         case TYPE_lng:
    1257           0 :                                 nils = div_int_flt_lng(lft, incr1, rgt, incr2,
    1258             :                                                        dst, GDK_lng_max,
    1259             :                                                        ci1, ci2, candoff1, candoff2);
    1260           0 :                                 break;
    1261             : #ifdef HAVE_HGE
    1262           0 :                         case TYPE_hge:
    1263           0 :                                 nils = div_int_flt_hge(lft, incr1, rgt, incr2,
    1264             :                                                        dst, GDK_hge_max,
    1265             :                                                        ci1, ci2, candoff1, candoff2);
    1266           0 :                                 break;
    1267             : #endif
    1268           0 :                         case TYPE_flt:
    1269           0 :                                 nils = div_int_flt_flt(lft, incr1, rgt, incr2,
    1270             :                                                        dst, GDK_flt_max,
    1271             :                                                        ci1, ci2, candoff1, candoff2);
    1272           0 :                                 break;
    1273           0 :                         case TYPE_dbl:
    1274           0 :                                 nils = div_int_flt_dbl(lft, incr1, rgt, incr2,
    1275             :                                                        dst, GDK_dbl_max,
    1276             :                                                        ci1, ci2, candoff1, candoff2);
    1277           0 :                                 break;
    1278           0 :                         default:
    1279           0 :                                 goto unsupported;
    1280             :                         }
    1281             :                         break;
    1282           3 :                 case TYPE_dbl:
    1283           3 :                         switch (tp) {
    1284           0 :                         case TYPE_bte:
    1285           0 :                                 nils = div_int_dbl_bte(lft, incr1, rgt, incr2,
    1286             :                                                        dst, GDK_bte_max,
    1287             :                                                        ci1, ci2, candoff1, candoff2);
    1288           0 :                                 break;
    1289           0 :                         case TYPE_sht:
    1290           0 :                                 nils = div_int_dbl_sht(lft, incr1, rgt, incr2,
    1291             :                                                        dst, GDK_sht_max,
    1292             :                                                        ci1, ci2, candoff1, candoff2);
    1293           0 :                                 break;
    1294           3 :                         case TYPE_int:
    1295           3 :                                 nils = div_int_dbl_int(lft, incr1, rgt, incr2,
    1296             :                                                        dst, GDK_int_max,
    1297             :                                                        ci1, ci2, candoff1, candoff2);
    1298           3 :                                 break;
    1299           0 :                         case TYPE_lng:
    1300           0 :                                 nils = div_int_dbl_lng(lft, incr1, rgt, incr2,
    1301             :                                                        dst, GDK_lng_max,
    1302             :                                                        ci1, ci2, candoff1, candoff2);
    1303           0 :                                 break;
    1304             : #ifdef HAVE_HGE
    1305           0 :                         case TYPE_hge:
    1306           0 :                                 nils = div_int_dbl_hge(lft, incr1, rgt, incr2,
    1307             :                                                        dst, GDK_hge_max,
    1308             :                                                        ci1, ci2, candoff1, candoff2);
    1309           0 :                                 break;
    1310             : #endif
    1311           0 :                         case TYPE_dbl:
    1312           0 :                                 nils = div_int_dbl_dbl(lft, incr1, rgt, incr2,
    1313             :                                                        dst, GDK_dbl_max,
    1314             :                                                        ci1, ci2, candoff1, candoff2);
    1315           0 :                                 break;
    1316           0 :                         default:
    1317           0 :                                 goto unsupported;
    1318             :                         }
    1319             :                         break;
    1320           0 :                 default:
    1321           0 :                         goto unsupported;
    1322             :                 }
    1323             :                 break;
    1324         120 :         case TYPE_lng:
    1325         120 :                 switch (tp2) {
    1326          16 :                 case TYPE_bte:
    1327          16 :                         switch (tp) {
    1328          16 :                         case TYPE_lng:
    1329          16 :                                 nils = div_lng_bte_lng(lft, incr1, rgt, incr2,
    1330             :                                                        dst, GDK_lng_max,
    1331             :                                                        ci1, ci2, candoff1, candoff2);
    1332          16 :                                 break;
    1333             : #ifdef HAVE_HGE
    1334           0 :                         case TYPE_hge:
    1335           0 :                                 nils = div_lng_bte_hge(lft, incr1, rgt, incr2,
    1336             :                                                        dst, GDK_hge_max,
    1337             :                                                        ci1, ci2, candoff1, candoff2);
    1338           0 :                                 break;
    1339             : #endif
    1340           0 :                         case TYPE_flt:
    1341           0 :                                 nils = div_lng_bte_flt(lft, incr1, rgt, incr2,
    1342             :                                                        dst, GDK_flt_max,
    1343             :                                                        ci1, ci2, candoff1, candoff2);
    1344           0 :                                 break;
    1345           0 :                         case TYPE_dbl:
    1346           0 :                                 nils = div_lng_bte_dbl(lft, incr1, rgt, incr2,
    1347             :                                                        dst, GDK_dbl_max,
    1348             :                                                        ci1, ci2, candoff1, candoff2);
    1349           0 :                                 break;
    1350           0 :                         default:
    1351           0 :                                 goto unsupported;
    1352             :                         }
    1353             :                         break;
    1354           3 :                 case TYPE_sht:
    1355           3 :                         switch (tp) {
    1356           3 :                         case TYPE_lng:
    1357           3 :                                 nils = div_lng_sht_lng(lft, incr1, rgt, incr2,
    1358             :                                                        dst, GDK_lng_max,
    1359             :                                                        ci1, ci2, candoff1, candoff2);
    1360           3 :                                 break;
    1361             : #ifdef HAVE_HGE
    1362           0 :                         case TYPE_hge:
    1363           0 :                                 nils = div_lng_sht_hge(lft, incr1, rgt, incr2,
    1364             :                                                        dst, GDK_hge_max,
    1365             :                                                        ci1, ci2, candoff1, candoff2);
    1366           0 :                                 break;
    1367             : #endif
    1368           0 :                         case TYPE_flt:
    1369           0 :                                 nils = div_lng_sht_flt(lft, incr1, rgt, incr2,
    1370             :                                                        dst, GDK_flt_max,
    1371             :                                                        ci1, ci2, candoff1, candoff2);
    1372           0 :                                 break;
    1373           0 :                         case TYPE_dbl:
    1374           0 :                                 nils = div_lng_sht_dbl(lft, incr1, rgt, incr2,
    1375             :                                                        dst, GDK_dbl_max,
    1376             :                                                        ci1, ci2, candoff1, candoff2);
    1377           0 :                                 break;
    1378           0 :                         default:
    1379           0 :                                 goto unsupported;
    1380             :                         }
    1381             :                         break;
    1382          31 :                 case TYPE_int:
    1383          31 :                         switch (tp) {
    1384          31 :                         case TYPE_lng:
    1385          31 :                                 nils = div_lng_int_lng(lft, incr1, rgt, incr2,
    1386             :                                                        dst, GDK_lng_max,
    1387             :                                                        ci1, ci2, candoff1, candoff2);
    1388          31 :                                 break;
    1389             : #ifdef HAVE_HGE
    1390           0 :                         case TYPE_hge:
    1391           0 :                                 nils = div_lng_int_hge(lft, incr1, rgt, incr2,
    1392             :                                                        dst, GDK_hge_max,
    1393             :                                                        ci1, ci2, candoff1, candoff2);
    1394           0 :                                 break;
    1395             : #endif
    1396           0 :                         case TYPE_flt:
    1397           0 :                                 nils = div_lng_int_flt(lft, incr1, rgt, incr2,
    1398             :                                                        dst, GDK_flt_max,
    1399             :                                                        ci1, ci2, candoff1, candoff2);
    1400           0 :                                 break;
    1401           0 :                         case TYPE_dbl:
    1402           0 :                                 nils = div_lng_int_dbl(lft, incr1, rgt, incr2,
    1403             :                                                        dst, GDK_dbl_max,
    1404             :                                                        ci1, ci2, candoff1, candoff2);
    1405           0 :                                 break;
    1406           0 :                         default:
    1407           0 :                                 goto unsupported;
    1408             :                         }
    1409             :                         break;
    1410          59 :                 case TYPE_lng:
    1411          59 :                         switch (tp) {
    1412          59 :                         case TYPE_lng:
    1413          59 :                                 nils = div_lng_lng_lng(lft, incr1, rgt, incr2,
    1414             :                                                        dst, GDK_lng_max,
    1415             :                                                        ci1, ci2, candoff1, candoff2);
    1416          59 :                                 break;
    1417             : #ifdef HAVE_HGE
    1418           0 :                         case TYPE_hge:
    1419           0 :                                 nils = div_lng_lng_hge(lft, incr1, rgt, incr2,
    1420             :                                                        dst, GDK_hge_max,
    1421             :                                                        ci1, ci2, candoff1, candoff2);
    1422           0 :                                 break;
    1423             : #endif
    1424           0 :                         case TYPE_flt:
    1425           0 :                                 nils = div_lng_lng_flt(lft, incr1, rgt, incr2,
    1426             :                                                        dst, GDK_flt_max,
    1427             :                                                        ci1, ci2, candoff1, candoff2);
    1428           0 :                                 break;
    1429           0 :                         case TYPE_dbl:
    1430           0 :                                 nils = div_lng_lng_dbl(lft, incr1, rgt, incr2,
    1431             :                                                        dst, GDK_dbl_max,
    1432             :                                                        ci1, ci2, candoff1, candoff2);
    1433           0 :                                 break;
    1434           0 :                         default:
    1435           0 :                                 goto unsupported;
    1436             :                         }
    1437             :                         break;
    1438             : #ifdef HAVE_HGE
    1439           0 :                 case TYPE_hge:
    1440           0 :                         switch (tp) {
    1441           0 :                         case TYPE_lng:
    1442           0 :                                 nils = div_lng_hge_lng(lft, incr1, rgt, incr2,
    1443             :                                                        dst, GDK_lng_max,
    1444             :                                                        ci1, ci2, candoff1, candoff2);
    1445           0 :                                 break;
    1446           0 :                         case TYPE_hge:
    1447           0 :                                 nils = div_lng_hge_hge(lft, incr1, rgt, incr2,
    1448             :                                                        dst, GDK_hge_max,
    1449             :                                                        ci1, ci2, candoff1, candoff2);
    1450           0 :                                 break;
    1451           0 :                         case TYPE_flt:
    1452           0 :                                 nils = div_lng_hge_flt(lft, incr1, rgt, incr2,
    1453             :                                                        dst, GDK_flt_max,
    1454             :                                                        ci1, ci2, candoff1, candoff2);
    1455           0 :                                 break;
    1456           0 :                         case TYPE_dbl:
    1457           0 :                                 nils = div_lng_hge_dbl(lft, incr1, rgt, incr2,
    1458             :                                                        dst, GDK_dbl_max,
    1459             :                                                        ci1, ci2, candoff1, candoff2);
    1460           0 :                                 break;
    1461           0 :                         default:
    1462           0 :                                 goto unsupported;
    1463             :                         }
    1464             :                         break;
    1465             : #endif
    1466           7 :                 case TYPE_flt:
    1467           7 :                         switch (tp) {
    1468           0 :                         case TYPE_bte:
    1469           0 :                                 nils = div_lng_flt_bte(lft, incr1, rgt, incr2,
    1470             :                                                        dst, GDK_bte_max,
    1471             :                                                        ci1, ci2, candoff1, candoff2);
    1472           0 :                                 break;
    1473           0 :                         case TYPE_sht:
    1474           0 :                                 nils = div_lng_flt_sht(lft, incr1, rgt, incr2,
    1475             :                                                        dst, GDK_sht_max,
    1476             :                                                        ci1, ci2, candoff1, candoff2);
    1477           0 :                                 break;
    1478           0 :                         case TYPE_int:
    1479           0 :                                 nils = div_lng_flt_int(lft, incr1, rgt, incr2,
    1480             :                                                        dst, GDK_int_max,
    1481             :                                                        ci1, ci2, candoff1, candoff2);
    1482           0 :                                 break;
    1483           7 :                         case TYPE_lng:
    1484           7 :                                 nils = div_lng_flt_lng(lft, incr1, rgt, incr2,
    1485             :                                                        dst, GDK_lng_max,
    1486             :                                                        ci1, ci2, candoff1, candoff2);
    1487           7 :                                 break;
    1488             : #ifdef HAVE_HGE
    1489           0 :                         case TYPE_hge:
    1490           0 :                                 nils = div_lng_flt_hge(lft, incr1, rgt, incr2,
    1491             :                                                        dst, GDK_hge_max,
    1492             :                                                        ci1, ci2, candoff1, candoff2);
    1493           0 :                                 break;
    1494             : #endif
    1495           0 :                         case TYPE_flt:
    1496           0 :                                 nils = div_lng_flt_flt(lft, incr1, rgt, incr2,
    1497             :                                                        dst, GDK_flt_max,
    1498             :                                                        ci1, ci2, candoff1, candoff2);
    1499           0 :                                 break;
    1500           0 :                         case TYPE_dbl:
    1501           0 :                                 nils = div_lng_flt_dbl(lft, incr1, rgt, incr2,
    1502             :                                                        dst, GDK_dbl_max,
    1503             :                                                        ci1, ci2, candoff1, candoff2);
    1504           0 :                                 break;
    1505           0 :                         default:
    1506           0 :                                 goto unsupported;
    1507             :                         }
    1508             :                         break;
    1509           4 :                 case TYPE_dbl:
    1510           4 :                         switch (tp) {
    1511           0 :                         case TYPE_bte:
    1512           0 :                                 nils = div_lng_dbl_bte(lft, incr1, rgt, incr2,
    1513             :                                                        dst, GDK_bte_max,
    1514             :                                                        ci1, ci2, candoff1, candoff2);
    1515           0 :                                 break;
    1516           0 :                         case TYPE_sht:
    1517           0 :                                 nils = div_lng_dbl_sht(lft, incr1, rgt, incr2,
    1518             :                                                        dst, GDK_sht_max,
    1519             :                                                        ci1, ci2, candoff1, candoff2);
    1520           0 :                                 break;
    1521           0 :                         case TYPE_int:
    1522           0 :                                 nils = div_lng_dbl_int(lft, incr1, rgt, incr2,
    1523             :                                                        dst, GDK_int_max,
    1524             :                                                        ci1, ci2, candoff1, candoff2);
    1525           0 :                                 break;
    1526           4 :                         case TYPE_lng:
    1527           4 :                                 nils = div_lng_dbl_lng(lft, incr1, rgt, incr2,
    1528             :                                                        dst, GDK_lng_max,
    1529             :                                                        ci1, ci2, candoff1, candoff2);
    1530           4 :                                 break;
    1531             : #ifdef HAVE_HGE
    1532           0 :                         case TYPE_hge:
    1533           0 :                                 nils = div_lng_dbl_hge(lft, incr1, rgt, incr2,
    1534             :                                                        dst, GDK_hge_max,
    1535             :                                                        ci1, ci2, candoff1, candoff2);
    1536           0 :                                 break;
    1537             : #endif
    1538           0 :                         case TYPE_dbl:
    1539           0 :                                 nils = div_lng_dbl_dbl(lft, incr1, rgt, incr2,
    1540             :                                                        dst, GDK_dbl_max,
    1541             :                                                        ci1, ci2, candoff1, candoff2);
    1542           0 :                                 break;
    1543           0 :                         default:
    1544           0 :                                 goto unsupported;
    1545             :                         }
    1546             :                         break;
    1547           0 :                 default:
    1548           0 :                         goto unsupported;
    1549             :                 }
    1550             :                 break;
    1551             : #ifdef HAVE_HGE
    1552        1842 :         case TYPE_hge:
    1553        1842 :                 switch (tp2) {
    1554        1717 :                 case TYPE_bte:
    1555        1717 :                         switch (tp) {
    1556        1717 :                         case TYPE_hge:
    1557        1717 :                                 nils = div_hge_bte_hge(lft, incr1, rgt, incr2,
    1558             :                                                        dst, GDK_hge_max,
    1559             :                                                        ci1, ci2, candoff1, candoff2);
    1560        1717 :                                 break;
    1561           0 :                         case TYPE_flt:
    1562           0 :                                 nils = div_hge_bte_flt(lft, incr1, rgt, incr2,
    1563             :                                                        dst, GDK_flt_max,
    1564             :                                                        ci1, ci2, candoff1, candoff2);
    1565           0 :                                 break;
    1566           0 :                         case TYPE_dbl:
    1567           0 :                                 nils = div_hge_bte_dbl(lft, incr1, rgt, incr2,
    1568             :                                                        dst, GDK_dbl_max,
    1569             :                                                        ci1, ci2, candoff1, candoff2);
    1570           0 :                                 break;
    1571           0 :                         default:
    1572           0 :                                 goto unsupported;
    1573             :                         }
    1574             :                         break;
    1575           0 :                 case TYPE_sht:
    1576           0 :                         switch (tp) {
    1577           0 :                         case TYPE_hge:
    1578           0 :                                 nils = div_hge_sht_hge(lft, incr1, rgt, incr2,
    1579             :                                                        dst, GDK_hge_max,
    1580             :                                                        ci1, ci2, candoff1, candoff2);
    1581           0 :                                 break;
    1582           0 :                         case TYPE_flt:
    1583           0 :                                 nils = div_hge_sht_flt(lft, incr1, rgt, incr2,
    1584             :                                                        dst, GDK_flt_max,
    1585             :                                                        ci1, ci2, candoff1, candoff2);
    1586           0 :                                 break;
    1587           0 :                         case TYPE_dbl:
    1588           0 :                                 nils = div_hge_sht_dbl(lft, incr1, rgt, incr2,
    1589             :                                                        dst, GDK_dbl_max,
    1590             :                                                        ci1, ci2, candoff1, candoff2);
    1591           0 :                                 break;
    1592           0 :                         default:
    1593           0 :                                 goto unsupported;
    1594             :                         }
    1595             :                         break;
    1596          30 :                 case TYPE_int:
    1597          30 :                         switch (tp) {
    1598          30 :                         case TYPE_hge:
    1599          30 :                                 nils = div_hge_int_hge(lft, incr1, rgt, incr2,
    1600             :                                                        dst, GDK_hge_max,
    1601             :                                                        ci1, ci2, candoff1, candoff2);
    1602          30 :                                 break;
    1603           0 :                         case TYPE_flt:
    1604           0 :                                 nils = div_hge_int_flt(lft, incr1, rgt, incr2,
    1605             :                                                        dst, GDK_flt_max,
    1606             :                                                        ci1, ci2, candoff1, candoff2);
    1607           0 :                                 break;
    1608           0 :                         case TYPE_dbl:
    1609           0 :                                 nils = div_hge_int_dbl(lft, incr1, rgt, incr2,
    1610             :                                                        dst, GDK_dbl_max,
    1611             :                                                        ci1, ci2, candoff1, candoff2);
    1612           0 :                                 break;
    1613           0 :                         default:
    1614           0 :                                 goto unsupported;
    1615             :                         }
    1616             :                         break;
    1617          22 :                 case TYPE_lng:
    1618          22 :                         switch (tp) {
    1619          22 :                         case TYPE_hge:
    1620          22 :                                 nils = div_hge_lng_hge(lft, incr1, rgt, incr2,
    1621             :                                                        dst, GDK_hge_max,
    1622             :                                                        ci1, ci2, candoff1, candoff2);
    1623          22 :                                 break;
    1624           0 :                         case TYPE_flt:
    1625           0 :                                 nils = div_hge_lng_flt(lft, incr1, rgt, incr2,
    1626             :                                                        dst, GDK_flt_max,
    1627             :                                                        ci1, ci2, candoff1, candoff2);
    1628           0 :                                 break;
    1629           0 :                         case TYPE_dbl:
    1630           0 :                                 nils = div_hge_lng_dbl(lft, incr1, rgt, incr2,
    1631             :                                                        dst, GDK_dbl_max,
    1632             :                                                        ci1, ci2, candoff1, candoff2);
    1633           0 :                                 break;
    1634           0 :                         default:
    1635           0 :                                 goto unsupported;
    1636             :                         }
    1637             :                         break;
    1638          73 :                 case TYPE_hge:
    1639          73 :                         switch (tp) {
    1640          73 :                         case TYPE_hge:
    1641          73 :                                 nils = div_hge_hge_hge(lft, incr1, rgt, incr2,
    1642             :                                                        dst, GDK_hge_max,
    1643             :                                                        ci1, ci2, candoff1, candoff2);
    1644          73 :                                 break;
    1645           0 :                         case TYPE_flt:
    1646           0 :                                 nils = div_hge_hge_flt(lft, incr1, rgt, incr2,
    1647             :                                                        dst, GDK_flt_max,
    1648             :                                                        ci1, ci2, candoff1, candoff2);
    1649           0 :                                 break;
    1650           0 :                         case TYPE_dbl:
    1651           0 :                                 nils = div_hge_hge_dbl(lft, incr1, rgt, incr2,
    1652             :                                                        dst, GDK_dbl_max,
    1653             :                                                        ci1, ci2, candoff1, candoff2);
    1654           0 :                                 break;
    1655           0 :                         default:
    1656           0 :                                 goto unsupported;
    1657             :                         }
    1658             :                         break;
    1659           0 :                 case TYPE_flt:
    1660           0 :                         switch (tp) {
    1661           0 :                         case TYPE_bte:
    1662           0 :                                 nils = div_hge_flt_bte(lft, incr1, rgt, incr2,
    1663             :                                                        dst, GDK_bte_max,
    1664             :                                                        ci1, ci2, candoff1, candoff2);
    1665           0 :                                 break;
    1666           0 :                         case TYPE_sht:
    1667           0 :                                 nils = div_hge_flt_sht(lft, incr1, rgt, incr2,
    1668             :                                                        dst, GDK_sht_max,
    1669             :                                                        ci1, ci2, candoff1, candoff2);
    1670           0 :                                 break;
    1671           0 :                         case TYPE_int:
    1672           0 :                                 nils = div_hge_flt_int(lft, incr1, rgt, incr2,
    1673             :                                                        dst, GDK_int_max,
    1674             :                                                        ci1, ci2, candoff1, candoff2);
    1675           0 :                                 break;
    1676           0 :                         case TYPE_lng:
    1677           0 :                                 nils = div_hge_flt_lng(lft, incr1, rgt, incr2,
    1678             :                                                        dst, GDK_lng_max,
    1679             :                                                        ci1, ci2, candoff1, candoff2);
    1680           0 :                                 break;
    1681           0 :                         case TYPE_hge:
    1682           0 :                                 nils = div_hge_flt_hge(lft, incr1, rgt, incr2,
    1683             :                                                        dst, GDK_hge_max,
    1684             :                                                        ci1, ci2, candoff1, candoff2);
    1685           0 :                                 break;
    1686           0 :                         case TYPE_flt:
    1687           0 :                                 nils = div_hge_flt_flt(lft, incr1, rgt, incr2,
    1688             :                                                        dst, GDK_flt_max,
    1689             :                                                        ci1, ci2, candoff1, candoff2);
    1690           0 :                                 break;
    1691           0 :                         case TYPE_dbl:
    1692           0 :                                 nils = div_hge_flt_dbl(lft, incr1, rgt, incr2,
    1693             :                                                        dst, GDK_dbl_max,
    1694             :                                                        ci1, ci2, candoff1, candoff2);
    1695           0 :                                 break;
    1696           0 :                         default:
    1697           0 :                                 goto unsupported;
    1698             :                         }
    1699             :                         break;
    1700           0 :                 case TYPE_dbl:
    1701           0 :                         switch (tp) {
    1702           0 :                         case TYPE_bte:
    1703           0 :                                 nils = div_hge_dbl_bte(lft, incr1, rgt, incr2,
    1704             :                                                        dst, GDK_bte_max,
    1705             :                                                        ci1, ci2, candoff1, candoff2);
    1706           0 :                                 break;
    1707           0 :                         case TYPE_sht:
    1708           0 :                                 nils = div_hge_dbl_sht(lft, incr1, rgt, incr2,
    1709             :                                                        dst, GDK_sht_max,
    1710             :                                                        ci1, ci2, candoff1, candoff2);
    1711           0 :                                 break;
    1712           0 :                         case TYPE_int:
    1713           0 :                                 nils = div_hge_dbl_int(lft, incr1, rgt, incr2,
    1714             :                                                        dst, GDK_int_max,
    1715             :                                                        ci1, ci2, candoff1, candoff2);
    1716           0 :                                 break;
    1717           0 :                         case TYPE_lng:
    1718           0 :                                 nils = div_hge_dbl_lng(lft, incr1, rgt, incr2,
    1719             :                                                        dst, GDK_lng_max,
    1720             :                                                        ci1, ci2, candoff1, candoff2);
    1721           0 :                                 break;
    1722           0 :                         case TYPE_hge:
    1723           0 :                                 nils = div_hge_dbl_hge(lft, incr1, rgt, incr2,
    1724             :                                                        dst, GDK_hge_max,
    1725             :                                                        ci1, ci2, candoff1, candoff2);
    1726           0 :                                 break;
    1727           0 :                         case TYPE_dbl:
    1728           0 :                                 nils = div_hge_dbl_dbl(lft, incr1, rgt, incr2,
    1729             :                                                        dst, GDK_dbl_max,
    1730             :                                                        ci1, ci2, candoff1, candoff2);
    1731           0 :                                 break;
    1732           0 :                         default:
    1733           0 :                                 goto unsupported;
    1734             :                         }
    1735             :                         break;
    1736           0 :                 default:
    1737           0 :                         goto unsupported;
    1738             :                 }
    1739             :                 break;
    1740             : #endif
    1741           5 :         case TYPE_flt:
    1742           5 :                 switch (tp2) {
    1743           0 :                 case TYPE_bte:
    1744           0 :                         switch (tp) {
    1745           0 :                         case TYPE_flt:
    1746           0 :                                 nils = div_flt_bte_flt(lft, incr1, rgt, incr2,
    1747             :                                                        dst, GDK_flt_max,
    1748             :                                                        ci1, ci2, candoff1, candoff2);
    1749           0 :                                 break;
    1750           0 :                         case TYPE_dbl:
    1751           0 :                                 nils = div_flt_bte_dbl(lft, incr1, rgt, incr2,
    1752             :                                                        dst, GDK_dbl_max,
    1753             :                                                        ci1, ci2, candoff1, candoff2);
    1754           0 :                                 break;
    1755           0 :                         default:
    1756           0 :                                 goto unsupported;
    1757             :                         }
    1758             :                         break;
    1759           0 :                 case TYPE_sht:
    1760           0 :                         switch (tp) {
    1761           0 :                         case TYPE_flt:
    1762           0 :                                 nils = div_flt_sht_flt(lft, incr1, rgt, incr2,
    1763             :                                                        dst, GDK_flt_max,
    1764             :                                                        ci1, ci2, candoff1, candoff2);
    1765           0 :                                 break;
    1766           0 :                         case TYPE_dbl:
    1767           0 :                                 nils = div_flt_sht_dbl(lft, incr1, rgt, incr2,
    1768             :                                                        dst, GDK_dbl_max,
    1769             :                                                        ci1, ci2, candoff1, candoff2);
    1770           0 :                                 break;
    1771           0 :                         default:
    1772           0 :                                 goto unsupported;
    1773             :                         }
    1774             :                         break;
    1775           0 :                 case TYPE_int:
    1776           0 :                         switch (tp) {
    1777           0 :                         case TYPE_flt:
    1778           0 :                                 nils = div_flt_int_flt(lft, incr1, rgt, incr2,
    1779             :                                                        dst, GDK_flt_max,
    1780             :                                                        ci1, ci2, candoff1, candoff2);
    1781           0 :                                 break;
    1782           0 :                         case TYPE_dbl:
    1783           0 :                                 nils = div_flt_int_dbl(lft, incr1, rgt, incr2,
    1784             :                                                        dst, GDK_dbl_max,
    1785             :                                                        ci1, ci2, candoff1, candoff2);
    1786           0 :                                 break;
    1787           0 :                         default:
    1788           0 :                                 goto unsupported;
    1789             :                         }
    1790             :                         break;
    1791           0 :                 case TYPE_lng:
    1792           0 :                         switch (tp) {
    1793           0 :                         case TYPE_flt:
    1794           0 :                                 nils = div_flt_lng_flt(lft, incr1, rgt, incr2,
    1795             :                                                        dst, GDK_flt_max,
    1796             :                                                        ci1, ci2, candoff1, candoff2);
    1797           0 :                                 break;
    1798           0 :                         case TYPE_dbl:
    1799           0 :                                 nils = div_flt_lng_dbl(lft, incr1, rgt, incr2,
    1800             :                                                        dst, GDK_dbl_max,
    1801             :                                                        ci1, ci2, candoff1, candoff2);
    1802           0 :                                 break;
    1803           0 :                         default:
    1804           0 :                                 goto unsupported;
    1805             :                         }
    1806             :                         break;
    1807             : #ifdef HAVE_HGE
    1808           0 :                 case TYPE_hge:
    1809           0 :                         switch (tp) {
    1810           0 :                         case TYPE_flt:
    1811           0 :                                 nils = div_flt_hge_flt(lft, incr1, rgt, incr2,
    1812             :                                                        dst, GDK_flt_max,
    1813             :                                                        ci1, ci2, candoff1, candoff2);
    1814           0 :                                 break;
    1815           0 :                         case TYPE_dbl:
    1816           0 :                                 nils = div_flt_hge_dbl(lft, incr1, rgt, incr2,
    1817             :                                                        dst, GDK_dbl_max,
    1818             :                                                        ci1, ci2, candoff1, candoff2);
    1819           0 :                                 break;
    1820           0 :                         default:
    1821           0 :                                 goto unsupported;
    1822             :                         }
    1823             :                         break;
    1824             : #endif
    1825           5 :                 case TYPE_flt:
    1826           5 :                         switch (tp) {
    1827           5 :                         case TYPE_flt:
    1828           5 :                                 nils = div_flt_flt_flt(lft, incr1, rgt, incr2,
    1829             :                                                        dst, GDK_flt_max,
    1830             :                                                        ci1, ci2, candoff1, candoff2);
    1831           5 :                                 break;
    1832           0 :                         case TYPE_dbl:
    1833           0 :                                 nils = div_flt_flt_dbl(lft, incr1, rgt, incr2,
    1834             :                                                        dst, GDK_dbl_max,
    1835             :                                                        ci1, ci2, candoff1, candoff2);
    1836           0 :                                 break;
    1837           0 :                         default:
    1838           0 :                                 goto unsupported;
    1839             :                         }
    1840             :                         break;
    1841           0 :                 case TYPE_dbl:
    1842           0 :                         switch (tp) {
    1843           0 :                         case TYPE_dbl:
    1844           0 :                                 nils = div_flt_dbl_dbl(lft, incr1, rgt, incr2,
    1845             :                                                        dst, GDK_dbl_max,
    1846             :                                                        ci1, ci2, candoff1, candoff2);
    1847           0 :                                 break;
    1848           0 :                         default:
    1849           0 :                                 goto unsupported;
    1850             :                         }
    1851           0 :                         break;
    1852           0 :                 default:
    1853           0 :                         goto unsupported;
    1854             :                 }
    1855             :                 break;
    1856        1157 :         case TYPE_dbl:
    1857        1157 :                 switch (tp2) {
    1858           0 :                 case TYPE_bte:
    1859           0 :                         switch (tp) {
    1860           0 :                         case TYPE_dbl:
    1861           0 :                                 nils = div_dbl_bte_dbl(lft, incr1, rgt, incr2,
    1862             :                                                        dst, GDK_dbl_max,
    1863             :                                                        ci1, ci2, candoff1, candoff2);
    1864           0 :                                 break;
    1865           0 :                         default:
    1866           0 :                                 goto unsupported;
    1867             :                         }
    1868           0 :                         break;
    1869           0 :                 case TYPE_sht:
    1870           0 :                         switch (tp) {
    1871           0 :                         case TYPE_dbl:
    1872           0 :                                 nils = div_dbl_sht_dbl(lft, incr1, rgt, incr2,
    1873             :                                                        dst, GDK_dbl_max,
    1874             :                                                        ci1, ci2, candoff1, candoff2);
    1875           0 :                                 break;
    1876           0 :                         default:
    1877           0 :                                 goto unsupported;
    1878             :                         }
    1879           0 :                         break;
    1880           0 :                 case TYPE_int:
    1881           0 :                         switch (tp) {
    1882           0 :                         case TYPE_dbl:
    1883           0 :                                 nils = div_dbl_int_dbl(lft, incr1, rgt, incr2,
    1884             :                                                        dst, GDK_dbl_max,
    1885             :                                                        ci1, ci2, candoff1, candoff2);
    1886           0 :                                 break;
    1887           0 :                         default:
    1888           0 :                                 goto unsupported;
    1889             :                         }
    1890           0 :                         break;
    1891        1032 :                 case TYPE_lng:
    1892        1032 :                         switch (tp) {
    1893        1032 :                         case TYPE_dbl:
    1894        1032 :                                 nils = div_dbl_lng_dbl(lft, incr1, rgt, incr2,
    1895             :                                                        dst, GDK_dbl_max,
    1896             :                                                        ci1, ci2, candoff1, candoff2);
    1897        1032 :                                 break;
    1898           0 :                         default:
    1899           0 :                                 goto unsupported;
    1900             :                         }
    1901        1032 :                         break;
    1902             : #ifdef HAVE_HGE
    1903           0 :                 case TYPE_hge:
    1904           0 :                         switch (tp) {
    1905           0 :                         case TYPE_dbl:
    1906           0 :                                 nils = div_dbl_hge_dbl(lft, incr1, rgt, incr2,
    1907             :                                                        dst, GDK_dbl_max,
    1908             :                                                        ci1, ci2, candoff1, candoff2);
    1909           0 :                                 break;
    1910           0 :                         default:
    1911           0 :                                 goto unsupported;
    1912             :                         }
    1913           0 :                         break;
    1914             : #endif
    1915           0 :                 case TYPE_flt:
    1916           0 :                         switch (tp) {
    1917           0 :                         case TYPE_dbl:
    1918           0 :                                 nils = div_dbl_flt_dbl(lft, incr1, rgt, incr2,
    1919             :                                                        dst, GDK_dbl_max,
    1920             :                                                        ci1, ci2, candoff1, candoff2);
    1921           0 :                                 break;
    1922           0 :                         default:
    1923           0 :                                 goto unsupported;
    1924             :                         }
    1925           0 :                         break;
    1926         125 :                 case TYPE_dbl:
    1927         125 :                         switch (tp) {
    1928         125 :                         case TYPE_dbl:
    1929         125 :                                 nils = div_dbl_dbl_dbl(lft, incr1, rgt, incr2,
    1930             :                                                        dst, GDK_dbl_max,
    1931             :                                                        ci1, ci2, candoff1, candoff2);
    1932         125 :                                 break;
    1933           0 :                         default:
    1934           0 :                                 goto unsupported;
    1935             :                         }
    1936         125 :                         break;
    1937           0 :                 default:
    1938           0 :                         goto unsupported;
    1939             :                 }
    1940             :                 break;
    1941           0 :         default:
    1942           0 :                 goto unsupported;
    1943             :         }
    1944             : 
    1945        3440 :         if (nils == BUN_NONE + 1)
    1946          41 :                 GDKerror("22012!division by zero.\n");
    1947             : 
    1948             :         return nils;
    1949             : 
    1950           0 :   unsupported:
    1951           0 :         GDKerror("%s: type combination (div(%s,%s)->%s) not supported.\n",
    1952             :                  func, ATOMname(tp1), ATOMname(tp2), ATOMname(tp));
    1953           0 :         return BUN_NONE;
    1954             : }
    1955             : 
    1956             : BAT *
    1957         243 : BATcalcdiv(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp)
    1958             : {
    1959         243 :         return BATcalcmuldivmod(b1, b2, s1, s2, tp,
    1960             :                                 div_typeswitchloop, __func__);
    1961             : }
    1962             : 
    1963             : BAT *
    1964        3218 : BATcalcdivcst(BAT *b, const ValRecord *v, BAT *s, int tp)
    1965             : {
    1966        3218 :         lng t0 = 0;
    1967        3218 :         BAT *bn;
    1968        3218 :         BUN nils;
    1969        3218 :         struct canditer ci;
    1970             : 
    1971        3218 :         TRC_DEBUG_IF(ALGO) t0 = GDKusec();
    1972             : 
    1973        3218 :         BATcheck(b, NULL);
    1974             : 
    1975        3218 :         canditer_init(&ci, b, s);
    1976             : 
    1977        3218 :         bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
    1978        3218 :         if (bn == NULL)
    1979             :                 return NULL;
    1980        3218 :         if (ci.ncand == 0)
    1981             :                 return bn;
    1982             : 
    1983        2785 :         BATiter bi = bat_iterator(b);
    1984        5570 :         nils = div_typeswitchloop(bi.base, bi.type, true,
    1985        2785 :                                   VALptr(v), v->vtype, false,
    1986        2785 :                                   Tloc(bn, 0), tp,
    1987             :                                   &ci,
    1988        2785 :                                   &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
    1989             :                                   b->hseqbase, 0, __func__);
    1990             : 
    1991        2785 :         if (nils >= BUN_NONE) {
    1992           2 :                 BBPunfix(bn->batCacheid);
    1993           2 :                 bat_iterator_end(&bi);
    1994           2 :                 return NULL;
    1995             :         }
    1996             : 
    1997        2783 :         BATsetcount(bn, ci.ncand);
    1998             : 
    1999             :         /* if the input is sorted, and no zero division occurred, the
    2000             :          * result is also sorted, or reverse sorted if the constant is
    2001             :          * negative */
    2002        2783 :         ValRecord sign;
    2003             : 
    2004        2783 :         VARcalcsign(&sign, v);
    2005        2783 :         bn->tsorted = (sign.val.btval > 0 && bi.sorted && nils == 0) ||
    2006             :                 (sign.val.btval < 0 && bi.revsorted && nils == 0) ||
    2007             :                 ci.ncand <= 1 || nils == ci.ncand;
    2008        2783 :         bn->trevsorted = (sign.val.btval > 0 && bi.revsorted && nils == 0) ||
    2009             :                 (sign.val.btval < 0 && bi.sorted && nils == 0) ||
    2010             :                 ci.ncand <= 1 || nils == ci.ncand;
    2011        2783 :         bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
    2012        2783 :         bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
    2013        2783 :         bn->tkey = ci.ncand <= 1;
    2014        2783 :         bn->tnil = nils != 0;
    2015        2783 :         bn->tnonil = nils == 0;
    2016        2783 :         bat_iterator_end(&bi);
    2017             : 
    2018        2783 :         TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
    2019             :                   " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
    2020             :                   ALGOBATPAR(b), ALGOOPTBATPAR(s),
    2021             :                   ALGOOPTBATPAR(bn), GDKusec() - t0);
    2022             : 
    2023             :         return bn;
    2024             : }
    2025             : 
    2026             : BAT *
    2027          44 : BATcalccstdiv(const ValRecord *v, BAT *b, BAT *s, int tp)
    2028             : {
    2029          44 :         lng t0 = 0;
    2030          44 :         BAT *bn;
    2031          44 :         BUN nils;
    2032          44 :         struct canditer ci;
    2033             : 
    2034          44 :         TRC_DEBUG_IF(ALGO) t0 = GDKusec();
    2035             : 
    2036          44 :         BATcheck(b, NULL);
    2037             : 
    2038          44 :         canditer_init(&ci, b, s);
    2039          44 :         if (ci.ncand == 0)
    2040          16 :                 return BATconstant(ci.hseq, tp, ATOMnilptr(tp),
    2041             :                                    ci.ncand, TRANSIENT);
    2042             : 
    2043          28 :         bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
    2044          28 :         if (bn == NULL)
    2045             :                 return NULL;
    2046             : 
    2047          28 :         BATiter bi = bat_iterator(b);
    2048          56 :         nils = div_typeswitchloop(VALptr(v), v->vtype, false,
    2049          28 :                                   bi.base, bi.type, true,
    2050          28 :                                   Tloc(bn, 0), tp,
    2051          28 :                                   &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
    2052             :                                   &ci,
    2053             :                                   0, b->hseqbase, __func__);
    2054          28 :         bat_iterator_end(&bi);
    2055             : 
    2056          28 :         if (nils >= BUN_NONE) {
    2057           1 :                 BBPunfix(bn->batCacheid);
    2058           1 :                 return NULL;
    2059             :         }
    2060             : 
    2061          27 :         BATsetcount(bn, ci.ncand);
    2062             : 
    2063          27 :         bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
    2064          27 :         bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
    2065          27 :         bn->tkey = ci.ncand <= 1;
    2066          27 :         bn->tnil = nils != 0;
    2067          27 :         bn->tnonil = nils == 0;
    2068             : 
    2069          27 :         TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
    2070             :                   " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
    2071             :                   ALGOBATPAR(b), ALGOOPTBATPAR(s),
    2072             :                   ALGOOPTBATPAR(bn), GDKusec() - t0);
    2073             : 
    2074             :         return bn;
    2075             : }
    2076             : 
    2077             : gdk_return
    2078         430 : VARcalcdiv(ValPtr ret, const ValRecord *lft, const ValRecord *rgt)
    2079             : {
    2080         430 :         if (div_typeswitchloop(VALptr(lft), lft->vtype, false,
    2081         430 :                                VALptr(rgt), rgt->vtype, false,
    2082             :                                VALget(ret), ret->vtype,
    2083         430 :                                &(struct canditer){.tpe=cand_dense, .ncand=1},
    2084         430 :                                &(struct canditer){.tpe=cand_dense, .ncand=1},
    2085             :                                0, 0, __func__) >= BUN_NONE)
    2086          39 :                 return GDK_FAIL;
    2087         391 :         return GDK_SUCCEED;
    2088             : }

Generated by: LCOV version 1.14