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 249 : 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 10435 : 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 620 : 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 30 : 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 4281456 : 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 136 : 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 32 : DIV_3TYPE(hge, sht, hge)
428 0 : DIV_3TYPE(hge, sht, flt)
429 0 : DIV_3TYPE(hge, sht, dbl)
430 3474 : 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 226032 : 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 42380 : 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 1164908 : DIV_3TYPE_float(dbl, dbl, dbl)
467 :
468 : static BUN
469 4470 : 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 4470 : BUN nils;
476 :
477 4470 : tp1 = ATOMbasetype(tp1);
478 4470 : tp2 = ATOMbasetype(tp2);
479 4470 : tp = ATOMbasetype(tp);
480 4470 : switch (tp1) {
481 68 : case TYPE_bte:
482 68 : switch (tp2) {
483 68 : case TYPE_bte:
484 68 : switch (tp) {
485 68 : case TYPE_bte:
486 68 : nils = div_bte_bte_bte(lft, incr1, rgt, incr2,
487 : dst, GDK_bte_max,
488 : ci1, ci2, candoff1, candoff2);
489 68 : 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 1199 : case TYPE_int:
1061 1199 : 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 159 : case TYPE_int:
1129 159 : switch (tp) {
1130 158 : case TYPE_int:
1131 158 : nils = div_int_int_int(lft, incr1, rgt, incr2,
1132 : dst, GDK_int_max,
1133 : ci1, ci2, candoff1, candoff2);
1134 158 : 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 14 : case TYPE_lng:
1162 14 : 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 8 : case TYPE_lng:
1169 8 : nils = div_int_lng_lng(lft, incr1, rgt, incr2,
1170 : dst, GDK_lng_max,
1171 : ci1, ci2, candoff1, candoff2);
1172 8 : 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 1896 : case TYPE_lng:
1313 1896 : switch (tp2) {
1314 1836 : case TYPE_bte:
1315 1836 : switch (tp) {
1316 1836 : case TYPE_lng:
1317 1836 : nils = div_lng_bte_lng(lft, incr1, rgt, incr2,
1318 : dst, GDK_lng_max,
1319 : ci1, ci2, candoff1, candoff2);
1320 1836 : 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 34 : case TYPE_int:
1371 34 : switch (tp) {
1372 34 : case TYPE_lng:
1373 34 : nils = div_lng_int_lng(lft, incr1, rgt, incr2,
1374 : dst, GDK_lng_max,
1375 : ci1, ci2, candoff1, candoff2);
1376 34 : 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 112 : case TYPE_hge:
1541 112 : 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 3 : case TYPE_sht:
1564 3 : switch (tp) {
1565 3 : case TYPE_hge:
1566 3 : nils = div_hge_sht_hge(lft, incr1, rgt, incr2,
1567 : dst, GDK_hge_max,
1568 : ci1, ci2, candoff1, candoff2);
1569 3 : 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 30 : case TYPE_int:
1585 30 : switch (tp) {
1586 30 : case TYPE_hge:
1587 30 : nils = div_hge_int_hge(lft, incr1, rgt, incr2,
1588 : dst, GDK_hge_max,
1589 : ci1, ci2, candoff1, candoff2);
1590 30 : 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 1165 : case TYPE_dbl:
1845 1165 : 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 1034 : case TYPE_lng:
1880 1034 : switch (tp) {
1881 1034 : case TYPE_dbl:
1882 1034 : nils = div_dbl_lng_dbl(lft, incr1, rgt, incr2,
1883 : dst, GDK_dbl_max,
1884 : ci1, ci2, candoff1, candoff2);
1885 1034 : break;
1886 0 : default:
1887 0 : goto unsupported;
1888 : }
1889 1034 : 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 131 : case TYPE_dbl:
1915 131 : switch (tp) {
1916 131 : case TYPE_dbl:
1917 131 : nils = div_dbl_dbl_dbl(lft, incr1, rgt, incr2,
1918 : dst, GDK_dbl_max,
1919 : ci1, ci2, candoff1, candoff2);
1920 131 : break;
1921 0 : default:
1922 0 : goto unsupported;
1923 : }
1924 131 : break;
1925 0 : default:
1926 0 : goto unsupported;
1927 : }
1928 : break;
1929 0 : default:
1930 0 : goto unsupported;
1931 : }
1932 :
1933 4474 : if (nils == BUN_NONE + 1)
1934 43 : 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 316 : BATcalcdiv(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp)
1946 : {
1947 316 : return BATcalcmuldivmod(b1, b2, s1, s2, tp,
1948 : div_typeswitchloop, __func__);
1949 : }
1950 :
1951 : BAT *
1952 4685 : BATcalcdivcst(BAT *b, const ValRecord *v, BAT *s, int tp)
1953 : {
1954 4685 : lng t0 = 0;
1955 4685 : BAT *bn;
1956 4685 : BUN nils;
1957 4685 : struct canditer ci;
1958 :
1959 4685 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
1960 :
1961 4685 : BATcheck(b, NULL);
1962 :
1963 4685 : canditer_init(&ci, b, s);
1964 :
1965 4688 : bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
1966 4689 : if (bn == NULL)
1967 : return NULL;
1968 4689 : if (ci.ncand == 0)
1969 : return bn;
1970 :
1971 3389 : BATiter bi = bat_iterator(b);
1972 6774 : nils = div_typeswitchloop(bi.base, bi.type, true,
1973 3388 : VALptr(v), v->vtype, false,
1974 3388 : Tloc(bn, 0), tp,
1975 : &ci,
1976 3388 : &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
1977 : b->hseqbase, 0, __func__);
1978 :
1979 3386 : if (nils >= BUN_NONE) {
1980 0 : BBPunfix(bn->batCacheid);
1981 0 : bat_iterator_end(&bi);
1982 0 : return NULL;
1983 : }
1984 :
1985 3386 : 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 3386 : ValRecord sign;
1991 :
1992 3386 : VARcalcsign(&sign, v);
1993 3384 : 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 3384 : 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 3384 : bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
2000 3384 : bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
2001 3384 : bn->tkey = ci.ncand <= 1;
2002 3384 : bn->tnil = nils != 0;
2003 3384 : bn->tnonil = nils == 0;
2004 3384 : bat_iterator_end(&bi);
2005 :
2006 3384 : 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 53 : BATcalccstdiv(const ValRecord *v, BAT *b, BAT *s, int tp)
2016 : {
2017 53 : lng t0 = 0;
2018 53 : BAT *bn;
2019 53 : BUN nils;
2020 53 : struct canditer ci;
2021 :
2022 53 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
2023 :
2024 53 : BATcheck(b, NULL);
2025 :
2026 53 : canditer_init(&ci, b, s);
2027 53 : if (ci.ncand == 0)
2028 16 : return BATconstant(ci.hseq, tp, ATOMnilptr(tp),
2029 : ci.ncand, TRANSIENT);
2030 :
2031 37 : bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
2032 37 : if (bn == NULL)
2033 : return NULL;
2034 :
2035 37 : BATiter bi = bat_iterator(b);
2036 72 : nils = div_typeswitchloop(VALptr(v), v->vtype, false,
2037 37 : bi.base, bi.type, true,
2038 37 : Tloc(bn, 0), tp,
2039 37 : &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
2040 : &ci,
2041 : 0, b->hseqbase, __func__);
2042 35 : bat_iterator_end(&bi);
2043 :
2044 36 : if (nils >= BUN_NONE) {
2045 2 : BBPunfix(bn->batCacheid);
2046 2 : return NULL;
2047 : }
2048 :
2049 34 : BATsetcount(bn, ci.ncand);
2050 :
2051 35 : bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
2052 35 : bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
2053 35 : bn->tkey = ci.ncand <= 1;
2054 35 : bn->tnil = nils != 0;
2055 35 : bn->tnonil = nils == 0;
2056 :
2057 35 : 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 837 : VARcalcdiv(ValPtr ret, const ValRecord *lft, const ValRecord *rgt)
2067 : {
2068 837 : ret->bat = false;
2069 837 : if (div_typeswitchloop(VALptr(lft), lft->vtype, false,
2070 837 : VALptr(rgt), rgt->vtype, false,
2071 837 : VALget(ret), ret->vtype,
2072 837 : &(struct canditer){.tpe=cand_dense, .ncand=1},
2073 837 : &(struct canditer){.tpe=cand_dense, .ncand=1},
2074 : 0, 0, __func__) >= BUN_NONE)
2075 40 : return GDK_FAIL;
2076 797 : return GDK_SUCCEED;
2077 : }
|