LCOV - code coverage report
Current view: top level - gdk - gdk_calc_div.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 249 1156 21.5 %
Date: 2024-04-26 00:35:57 Functions: 32 215 14.9 %

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

Generated by: LCOV version 1.14