1 //------------------------------------------------------------------------------
2 // GB_mx_semiring: get a built-in semiring
3 //------------------------------------------------------------------------------
4 
5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6 // SPDX-License-Identifier: Apache-2.0
7 
8 //------------------------------------------------------------------------------
9 
10 #include "GB_mex.h"
11 #include "GB_binop.h"
12 
13 // See GraphBLAS/GraphBLAS/@GrB/private/util/gb_semiring.c for a description
14 
GB_mx_semiring(const GrB_Monoid add_monoid,const GrB_BinaryOp mult)15 GrB_Semiring GB_mx_semiring         // semiring, or NULL if error
16 (
17     const GrB_Monoid add_monoid,    // input monoid
18     const GrB_BinaryOp mult         // input multiply operator
19 )
20 {
21 
22     //--------------------------------------------------------------------------
23     // check inputs
24     //--------------------------------------------------------------------------
25 
26     if (Complex != GxB_FC64)
27     {
28         // user-defined semiring
29         if (add_monoid == Complex_plus_monoid && mult == Complex_times)
30         {
31             return (Complex_plus_times) ;
32         }
33     }
34 
35     GrB_BinaryOp add = add_monoid->op ;         // add operator
36     GB_Opcode add_opcode  = add->opcode ;       // add opcode
37     GB_Opcode mult_opcode = mult->opcode ;      // multiply opcode
38 
39     // add is a monoid
40     ASSERT (add->xtype == add->ztype && add->ytype == add->ztype) ;
41 
42     // in a semiring, the ztypes of add and mult are always the same:
43     ASSERT (add->ztype == mult->ztype) ;
44 
45     // The conditions above are true for any semiring and any A and B, whether
46     // or not this function handles the semiring as hard-coded.  Now return for
47     // cases this function does not handle.
48 
49     if (add_opcode >= GB_USER_opcode || mult_opcode >= GB_USER_opcode)
50     {
51         return (NULL) ;
52     }
53 
54     //--------------------------------------------------------------------------
55     // rename redundant Boolean multiply operators
56     //--------------------------------------------------------------------------
57 
58     GB_Type_code xcode = mult->xtype->code ;
59     GB_Type_code zcode = mult->ztype->code ;
60 
61     ASSERT (xcode < GB_UDT_code) ;
62     ASSERT (zcode < GB_UDT_code) ;
63 
64     if (xcode == GB_BOOL_code)
65     {
66         // z = mult(x,y) where both x and y are Boolean.
67         // DIV becomes FIRST
68         // RDIV becomes SECOND
69         // MIN and TIMES become LAND
70         // MAX and PLUS become LOR
71         // NE, ISNE, MINUS, and RMINUS become LXOR
72         // ISEQ becomes EQ
73         // ISGT becomes GT
74         // ISLT becomes LT
75         // ISGE becomes GE
76         // ISLE becomes LE
77         mult_opcode = GB_boolean_rename (mult_opcode) ;
78     }
79 
80     if (zcode == GB_BOOL_code)
81     {
82         // Only the LAND, LOR, LXOR, and EQ monoids remain if z is
83         // Boolean.  MIN, MAX, PLUS, and TIMES are renamed.
84         add_opcode = GB_boolean_rename (add_opcode) ;
85     }
86 
87     //--------------------------------------------------------------------------
88     // launch the switch factory
89     //--------------------------------------------------------------------------
90 
91     if (zcode == GB_FC32_code)
92     {
93 
94         //----------------------------------------------------------------------
95         // 27 single complex semirings
96         //----------------------------------------------------------------------
97 
98         switch (mult_opcode)
99         {
100 
101             case GB_FIRST_opcode :
102 
103                 switch (add_opcode)
104                 {
105                     case GB_PLUS_opcode  : return (GxB_PLUS_FIRST_FC32 ) ;
106                     case GB_TIMES_opcode : return (GxB_TIMES_FIRST_FC32) ;
107                     case GB_ANY_opcode   : return (GxB_ANY_FIRST_FC32  ) ;
108                     default : ;
109                 }
110                 break ;
111 
112             case GB_SECOND_opcode :
113 
114                 switch (add_opcode)
115                 {
116                     case GB_PLUS_opcode  : return (GxB_PLUS_SECOND_FC32 ) ;
117                     case GB_TIMES_opcode : return (GxB_TIMES_SECOND_FC32) ;
118                     case GB_ANY_opcode   : return (GxB_ANY_SECOND_FC32  ) ;
119                     default : ;
120                 }
121                 break ;
122 
123             case GB_PAIR_opcode :
124 
125                 switch (add_opcode)
126                 {
127                     case GB_PLUS_opcode  : return (GxB_PLUS_PAIR_FC32 ) ;
128                     case GB_TIMES_opcode : return (GxB_TIMES_PAIR_FC32) ;
129                     case GB_ANY_opcode   : return (GxB_ANY_PAIR_FC32  ) ;
130                     default : ;
131                 }
132                 break ;
133 
134             case GB_PLUS_opcode :
135 
136                 switch (add_opcode)
137                 {
138                     case GB_PLUS_opcode  : return (GxB_PLUS_PLUS_FC32 ) ;
139                     case GB_TIMES_opcode : return (GxB_TIMES_PLUS_FC32) ;
140                     case GB_ANY_opcode   : return (GxB_ANY_PLUS_FC32  ) ;
141                     default : ;
142                 }
143                 break ;
144 
145             case GB_MINUS_opcode :
146 
147                 switch (add_opcode)
148                 {
149                     case GB_PLUS_opcode  : return (GxB_PLUS_MINUS_FC32 ) ;
150                     case GB_TIMES_opcode : return (GxB_TIMES_MINUS_FC32) ;
151                     case GB_ANY_opcode   : return (GxB_ANY_MINUS_FC32  ) ;
152                     default : ;
153                 }
154                 break ;
155 
156             case GB_TIMES_opcode :
157 
158                 switch (add_opcode)
159                 {
160                     case GB_PLUS_opcode  : return (GxB_PLUS_TIMES_FC32 ) ;
161                     case GB_TIMES_opcode : return (GxB_TIMES_TIMES_FC32) ;
162                     case GB_ANY_opcode   : return (GxB_ANY_TIMES_FC32  ) ;
163                     default : ;
164                 }
165                 break ;
166 
167             case GB_DIV_opcode :
168 
169                 switch (add_opcode)
170                 {
171                     case GB_PLUS_opcode  : return (GxB_PLUS_DIV_FC32 ) ;
172                     case GB_TIMES_opcode : return (GxB_TIMES_DIV_FC32) ;
173                     case GB_ANY_opcode   : return (GxB_ANY_DIV_FC32  ) ;
174                     default : ;
175                 }
176                 break ;
177 
178             case GB_RDIV_opcode :
179 
180                 switch (add_opcode)
181                 {
182                     case GB_PLUS_opcode  : return (GxB_PLUS_RDIV_FC32 ) ;
183                     case GB_TIMES_opcode : return (GxB_TIMES_RDIV_FC32) ;
184                     case GB_ANY_opcode   : return (GxB_ANY_RDIV_FC32  ) ;
185                     default : ;
186                 }
187                 break ;
188 
189             case GB_RMINUS_opcode :
190 
191                 switch (add_opcode)
192                 {
193                     case GB_PLUS_opcode  : return (GxB_PLUS_RMINUS_FC32 ) ;
194                     case GB_TIMES_opcode : return (GxB_TIMES_RMINUS_FC32) ;
195                     case GB_ANY_opcode   : return (GxB_ANY_RMINUS_FC32  ) ;
196                     default : ;
197                 }
198                 break ;
199             default : ;
200         }
201 
202     }
203     else if (zcode == GB_FC64_code)
204     {
205 
206         //----------------------------------------------------------------------
207         // 27 double complex semirings
208         //----------------------------------------------------------------------
209 
210         switch (mult_opcode)
211         {
212 
213             case GB_FIRST_opcode :
214 
215                 switch (add_opcode)
216                 {
217                     case GB_PLUS_opcode  : return (GxB_PLUS_FIRST_FC64 ) ;
218                     case GB_TIMES_opcode : return (GxB_TIMES_FIRST_FC64) ;
219                     case GB_ANY_opcode   : return (GxB_ANY_FIRST_FC64  ) ;
220                     default : ;
221                 }
222                 break ;
223 
224             case GB_SECOND_opcode :
225 
226                 switch (add_opcode)
227                 {
228                     case GB_PLUS_opcode  : return (GxB_PLUS_SECOND_FC64 ) ;
229                     case GB_TIMES_opcode : return (GxB_TIMES_SECOND_FC64) ;
230                     case GB_ANY_opcode   : return (GxB_ANY_SECOND_FC64  ) ;
231                     default : ;
232                 }
233                 break ;
234 
235             case GB_PAIR_opcode :
236 
237                 switch (add_opcode)
238                 {
239                     case GB_PLUS_opcode  : return (GxB_PLUS_PAIR_FC64 ) ;
240                     case GB_TIMES_opcode : return (GxB_TIMES_PAIR_FC64) ;
241                     case GB_ANY_opcode   : return (GxB_ANY_PAIR_FC64  ) ;
242                     default : ;
243                 }
244                 break ;
245 
246             case GB_PLUS_opcode :
247 
248                 switch (add_opcode)
249                 {
250                     case GB_PLUS_opcode  : return (GxB_PLUS_PLUS_FC64 ) ;
251                     case GB_TIMES_opcode : return (GxB_TIMES_PLUS_FC64) ;
252                     case GB_ANY_opcode   : return (GxB_ANY_PLUS_FC64  ) ;
253                     default : ;
254                 }
255                 break ;
256 
257             case GB_MINUS_opcode :
258 
259                 switch (add_opcode)
260                 {
261                     case GB_PLUS_opcode  : return (GxB_PLUS_MINUS_FC64 ) ;
262                     case GB_TIMES_opcode : return (GxB_TIMES_MINUS_FC64) ;
263                     case GB_ANY_opcode   : return (GxB_ANY_MINUS_FC64  ) ;
264                     default : ;
265                 }
266                 break ;
267 
268             case GB_TIMES_opcode :
269 
270                 switch (add_opcode)
271                 {
272                     case GB_PLUS_opcode  : return (GxB_PLUS_TIMES_FC64 ) ;
273                     case GB_TIMES_opcode : return (GxB_TIMES_TIMES_FC64) ;
274                     case GB_ANY_opcode   : return (GxB_ANY_TIMES_FC64  ) ;
275                     default : ;
276                 }
277                 break ;
278 
279             case GB_DIV_opcode :
280 
281                 switch (add_opcode)
282                 {
283                     case GB_PLUS_opcode  : return (GxB_PLUS_DIV_FC64 ) ;
284                     case GB_TIMES_opcode : return (GxB_TIMES_DIV_FC64) ;
285                     case GB_ANY_opcode   : return (GxB_ANY_DIV_FC64  ) ;
286                     default : ;
287                 }
288                 break ;
289 
290             case GB_RDIV_opcode :
291 
292                 switch (add_opcode)
293                 {
294                     case GB_PLUS_opcode  : return (GxB_PLUS_RDIV_FC64 ) ;
295                     case GB_TIMES_opcode : return (GxB_TIMES_RDIV_FC64) ;
296                     case GB_ANY_opcode   : return (GxB_ANY_RDIV_FC64  ) ;
297                     default : ;
298                 }
299                 break ;
300 
301             case GB_RMINUS_opcode :
302 
303                 switch (add_opcode)
304                 {
305                     case GB_PLUS_opcode  : return (GxB_PLUS_RMINUS_FC64 ) ;
306                     case GB_TIMES_opcode : return (GxB_TIMES_RMINUS_FC64) ;
307                     case GB_ANY_opcode   : return (GxB_ANY_RMINUS_FC64  ) ;
308                     default : ;
309                 }
310                 break ;
311             default : ;
312         }
313 
314     }
315     else if (zcode != GB_BOOL_code)
316     {
317 
318         //----------------------------------------------------------------------
319         // 1000 semirings with TxT->T multiply operators
320         //----------------------------------------------------------------------
321 
322         // x,y,z are all the same non-Boolean type
323 
324         switch (mult_opcode)
325         {
326 
327             case GB_FIRST_opcode : // with (5 monoids) x (10 nonboolean types)
328 
329                 switch (add_opcode)
330                 {
331 
332                     case GB_MIN_opcode :
333 
334                         switch (zcode)
335                         {
336                             case GB_INT8_code  : return (GrB_MIN_FIRST_SEMIRING_INT8  ) ;
337                             case GB_INT16_code : return (GrB_MIN_FIRST_SEMIRING_INT16 ) ;
338                             case GB_INT32_code : return (GrB_MIN_FIRST_SEMIRING_INT32 ) ;
339                             case GB_INT64_code : return (GrB_MIN_FIRST_SEMIRING_INT64 ) ;
340                             case GB_UINT8_code : return (GrB_MIN_FIRST_SEMIRING_UINT8 ) ;
341                             case GB_UINT16_code: return (GrB_MIN_FIRST_SEMIRING_UINT16) ;
342                             case GB_UINT32_code: return (GrB_MIN_FIRST_SEMIRING_UINT32) ;
343                             case GB_UINT64_code: return (GrB_MIN_FIRST_SEMIRING_UINT64) ;
344                             case GB_FP32_code  : return (GrB_MIN_FIRST_SEMIRING_FP32  ) ;
345                             case GB_FP64_code  : return (GrB_MIN_FIRST_SEMIRING_FP64  ) ;
346                             default : ;
347                         }
348                         break ;
349 
350                     case GB_MAX_opcode :
351 
352                         switch (zcode)
353                         {
354                             case GB_INT8_code  : return (GrB_MAX_FIRST_SEMIRING_INT8  ) ;
355                             case GB_INT16_code : return (GrB_MAX_FIRST_SEMIRING_INT16 ) ;
356                             case GB_INT32_code : return (GrB_MAX_FIRST_SEMIRING_INT32 ) ;
357                             case GB_INT64_code : return (GrB_MAX_FIRST_SEMIRING_INT64 ) ;
358                             case GB_UINT8_code : return (GrB_MAX_FIRST_SEMIRING_UINT8 ) ;
359                             case GB_UINT16_code: return (GrB_MAX_FIRST_SEMIRING_UINT16) ;
360                             case GB_UINT32_code: return (GrB_MAX_FIRST_SEMIRING_UINT32) ;
361                             case GB_UINT64_code: return (GrB_MAX_FIRST_SEMIRING_UINT64) ;
362                             case GB_FP32_code  : return (GrB_MAX_FIRST_SEMIRING_FP32  ) ;
363                             case GB_FP64_code  : return (GrB_MAX_FIRST_SEMIRING_FP64  ) ;
364                             default : ;
365                         }
366                         break ;
367 
368                     case GB_PLUS_opcode :
369 
370                         switch (zcode)
371                         {
372                             case GB_INT8_code  : return (GxB_PLUS_FIRST_INT8    ) ;
373                             case GB_UINT8_code : return (GxB_PLUS_FIRST_UINT8   ) ;
374                             case GB_INT16_code : return (GxB_PLUS_FIRST_INT16   ) ;
375                             case GB_UINT16_code: return (GxB_PLUS_FIRST_UINT16  ) ;
376                             case GB_INT32_code : return (GxB_PLUS_FIRST_INT32   ) ;
377                             case GB_UINT32_code: return (GxB_PLUS_FIRST_UINT32  ) ;
378                             case GB_INT64_code : return (GxB_PLUS_FIRST_INT64   ) ;
379                             case GB_UINT64_code: return (GxB_PLUS_FIRST_UINT64  ) ;
380                             case GB_FP32_code  : return (GxB_PLUS_FIRST_FP32    ) ;
381                             case GB_FP64_code  : return (GxB_PLUS_FIRST_FP64    ) ;
382                             default : ;
383                         }
384                         break ;
385 
386                     case GB_TIMES_opcode :
387 
388                         switch (zcode)
389                         {
390                             case GB_INT8_code  : return (GxB_TIMES_FIRST_INT8   ) ;
391                             case GB_UINT8_code : return (GxB_TIMES_FIRST_UINT8  ) ;
392                             case GB_INT16_code : return (GxB_TIMES_FIRST_INT16  ) ;
393                             case GB_UINT16_code: return (GxB_TIMES_FIRST_UINT16 ) ;
394                             case GB_INT32_code : return (GxB_TIMES_FIRST_INT32  ) ;
395                             case GB_UINT32_code: return (GxB_TIMES_FIRST_UINT32 ) ;
396                             case GB_INT64_code : return (GxB_TIMES_FIRST_INT64  ) ;
397                             case GB_UINT64_code: return (GxB_TIMES_FIRST_UINT64 ) ;
398                             case GB_FP32_code  : return (GxB_TIMES_FIRST_FP32   ) ;
399                             case GB_FP64_code  : return (GxB_TIMES_FIRST_FP64   ) ;
400                             default : ;
401                         }
402                         break ;
403 
404                     case GB_ANY_opcode :
405 
406                         switch (zcode)
407                         {
408                             case GB_INT8_code  : return (GxB_ANY_FIRST_INT8     ) ;
409                             case GB_UINT8_code : return (GxB_ANY_FIRST_UINT8    ) ;
410                             case GB_INT16_code : return (GxB_ANY_FIRST_INT16    ) ;
411                             case GB_UINT16_code: return (GxB_ANY_FIRST_UINT16   ) ;
412                             case GB_INT32_code : return (GxB_ANY_FIRST_INT32    ) ;
413                             case GB_UINT32_code: return (GxB_ANY_FIRST_UINT32   ) ;
414                             case GB_INT64_code : return (GxB_ANY_FIRST_INT64    ) ;
415                             case GB_UINT64_code: return (GxB_ANY_FIRST_UINT64   ) ;
416                             case GB_FP32_code  : return (GxB_ANY_FIRST_FP32     ) ;
417                             case GB_FP64_code  : return (GxB_ANY_FIRST_FP64     ) ;
418                             default : ;
419                         }
420                         break ;
421 
422                     default : ;
423                 }
424                 break ;
425 
426             case GB_SECOND_opcode : // with (5 monoids) x (10 nonboolean types)
427 
428                 switch (add_opcode)
429                 {
430 
431                     case GB_MIN_opcode :
432 
433                         switch (zcode)
434                         {
435                             case GB_INT8_code  : return (GrB_MIN_SECOND_SEMIRING_INT8  ) ;
436                             case GB_INT16_code : return (GrB_MIN_SECOND_SEMIRING_INT16 ) ;
437                             case GB_INT32_code : return (GrB_MIN_SECOND_SEMIRING_INT32 ) ;
438                             case GB_INT64_code : return (GrB_MIN_SECOND_SEMIRING_INT64 ) ;
439                             case GB_UINT8_code : return (GrB_MIN_SECOND_SEMIRING_UINT8 ) ;
440                             case GB_UINT16_code: return (GrB_MIN_SECOND_SEMIRING_UINT16) ;
441                             case GB_UINT32_code: return (GrB_MIN_SECOND_SEMIRING_UINT32) ;
442                             case GB_UINT64_code: return (GrB_MIN_SECOND_SEMIRING_UINT64) ;
443                             case GB_FP32_code  : return (GrB_MIN_SECOND_SEMIRING_FP32  ) ;
444                             case GB_FP64_code  : return (GrB_MIN_SECOND_SEMIRING_FP64  ) ;
445                             default : ;
446                         }
447                         break ;
448 
449                     case GB_MAX_opcode :
450 
451                         switch (zcode)
452                         {
453                             case GB_INT8_code  : return (GrB_MAX_SECOND_SEMIRING_INT8  ) ;
454                             case GB_INT16_code : return (GrB_MAX_SECOND_SEMIRING_INT16 ) ;
455                             case GB_INT32_code : return (GrB_MAX_SECOND_SEMIRING_INT32 ) ;
456                             case GB_INT64_code : return (GrB_MAX_SECOND_SEMIRING_INT64 ) ;
457                             case GB_UINT8_code : return (GrB_MAX_SECOND_SEMIRING_UINT8 ) ;
458                             case GB_UINT16_code: return (GrB_MAX_SECOND_SEMIRING_UINT16) ;
459                             case GB_UINT32_code: return (GrB_MAX_SECOND_SEMIRING_UINT32) ;
460                             case GB_UINT64_code: return (GrB_MAX_SECOND_SEMIRING_UINT64) ;
461                             case GB_FP32_code  : return (GrB_MAX_SECOND_SEMIRING_FP32  ) ;
462                             case GB_FP64_code  : return (GrB_MAX_SECOND_SEMIRING_FP64  ) ;
463                             default : ;
464                         }
465                         break ;
466 
467                     case GB_PLUS_opcode :
468 
469                         switch (zcode)
470                         {
471                             case GB_INT8_code  : return (GxB_PLUS_SECOND_INT8   ) ;
472                             case GB_UINT8_code : return (GxB_PLUS_SECOND_UINT8  ) ;
473                             case GB_INT16_code : return (GxB_PLUS_SECOND_INT16  ) ;
474                             case GB_UINT16_code: return (GxB_PLUS_SECOND_UINT16 ) ;
475                             case GB_INT32_code : return (GxB_PLUS_SECOND_INT32  ) ;
476                             case GB_UINT32_code: return (GxB_PLUS_SECOND_UINT32 ) ;
477                             case GB_INT64_code : return (GxB_PLUS_SECOND_INT64  ) ;
478                             case GB_UINT64_code: return (GxB_PLUS_SECOND_UINT64 ) ;
479                             case GB_FP32_code  : return (GxB_PLUS_SECOND_FP32   ) ;
480                             case GB_FP64_code  : return (GxB_PLUS_SECOND_FP64   ) ;
481                             default : ;
482                         }
483                         break ;
484 
485                     case GB_TIMES_opcode :
486 
487                         switch (zcode)
488                         {
489                             case GB_INT8_code  : return (GxB_TIMES_SECOND_INT8  ) ;
490                             case GB_UINT8_code : return (GxB_TIMES_SECOND_UINT8 ) ;
491                             case GB_INT16_code : return (GxB_TIMES_SECOND_INT16 ) ;
492                             case GB_UINT16_code: return (GxB_TIMES_SECOND_UINT16) ;
493                             case GB_INT32_code : return (GxB_TIMES_SECOND_INT32 ) ;
494                             case GB_UINT32_code: return (GxB_TIMES_SECOND_UINT32) ;
495                             case GB_INT64_code : return (GxB_TIMES_SECOND_INT64 ) ;
496                             case GB_UINT64_code: return (GxB_TIMES_SECOND_UINT64) ;
497                             case GB_FP32_code  : return (GxB_TIMES_SECOND_FP32  ) ;
498                             case GB_FP64_code  : return (GxB_TIMES_SECOND_FP64  ) ;
499                             default : ;
500                         }
501                         break ;
502 
503                     case GB_ANY_opcode :
504 
505                         switch (zcode)
506                         {
507                             case GB_INT8_code  : return (GxB_ANY_SECOND_INT8    ) ;
508                             case GB_UINT8_code : return (GxB_ANY_SECOND_UINT8   ) ;
509                             case GB_INT16_code : return (GxB_ANY_SECOND_INT16   ) ;
510                             case GB_UINT16_code: return (GxB_ANY_SECOND_UINT16  ) ;
511                             case GB_INT32_code : return (GxB_ANY_SECOND_INT32   ) ;
512                             case GB_UINT32_code: return (GxB_ANY_SECOND_UINT32  ) ;
513                             case GB_INT64_code : return (GxB_ANY_SECOND_INT64   ) ;
514                             case GB_UINT64_code: return (GxB_ANY_SECOND_UINT64  ) ;
515                             case GB_FP32_code  : return (GxB_ANY_SECOND_FP32    ) ;
516                             case GB_FP64_code  : return (GxB_ANY_SECOND_FP64    ) ;
517                             default : ;
518                         }
519                         break ;
520 
521                     default : ;
522                 }
523                 break ;
524 
525             case GB_PAIR_opcode : // with (5 monoids) x (10 nonboolean types)
526 
527                 switch (add_opcode)
528                 {
529 
530                     case GB_MIN_opcode :
531 
532                         switch (zcode)
533                         {
534                             case GB_INT8_code  : return (GxB_MIN_PAIR_INT8      ) ;
535                             case GB_UINT8_code : return (GxB_MIN_PAIR_UINT8     ) ;
536                             case GB_INT16_code : return (GxB_MIN_PAIR_INT16     ) ;
537                             case GB_UINT16_code: return (GxB_MIN_PAIR_UINT16    ) ;
538                             case GB_INT32_code : return (GxB_MIN_PAIR_INT32     ) ;
539                             case GB_UINT32_code: return (GxB_MIN_PAIR_UINT32    ) ;
540                             case GB_INT64_code : return (GxB_MIN_PAIR_INT64     ) ;
541                             case GB_UINT64_code: return (GxB_MIN_PAIR_UINT64    ) ;
542                             case GB_FP32_code  : return (GxB_MIN_PAIR_FP32      ) ;
543                             case GB_FP64_code  : return (GxB_MIN_PAIR_FP64      ) ;
544                             default : ;
545                         }
546                         break ;
547 
548                     case GB_MAX_opcode :
549 
550                         switch (zcode)
551                         {
552                             case GB_INT8_code  : return (GxB_MAX_PAIR_INT8      ) ;
553                             case GB_UINT8_code : return (GxB_MAX_PAIR_UINT8     ) ;
554                             case GB_INT16_code : return (GxB_MAX_PAIR_INT16     ) ;
555                             case GB_UINT16_code: return (GxB_MAX_PAIR_UINT16    ) ;
556                             case GB_INT32_code : return (GxB_MAX_PAIR_INT32     ) ;
557                             case GB_UINT32_code: return (GxB_MAX_PAIR_UINT32    ) ;
558                             case GB_INT64_code : return (GxB_MAX_PAIR_INT64     ) ;
559                             case GB_UINT64_code: return (GxB_MAX_PAIR_UINT64    ) ;
560                             case GB_FP32_code  : return (GxB_MAX_PAIR_FP32      ) ;
561                             case GB_FP64_code  : return (GxB_MAX_PAIR_FP64      ) ;
562                             default : ;
563                         }
564                         break ;
565 
566                     case GB_PLUS_opcode :
567 
568                         switch (zcode)
569                         {
570                             case GB_INT8_code  : return (GxB_PLUS_PAIR_INT8     ) ;
571                             case GB_UINT8_code : return (GxB_PLUS_PAIR_UINT8    ) ;
572                             case GB_INT16_code : return (GxB_PLUS_PAIR_INT16    ) ;
573                             case GB_UINT16_code: return (GxB_PLUS_PAIR_UINT16   ) ;
574                             case GB_INT32_code : return (GxB_PLUS_PAIR_INT32    ) ;
575                             case GB_UINT32_code: return (GxB_PLUS_PAIR_UINT32   ) ;
576                             case GB_INT64_code : return (GxB_PLUS_PAIR_INT64    ) ;
577                             case GB_UINT64_code: return (GxB_PLUS_PAIR_UINT64   ) ;
578                             case GB_FP32_code  : return (GxB_PLUS_PAIR_FP32     ) ;
579                             case GB_FP64_code  : return (GxB_PLUS_PAIR_FP64     ) ;
580                             default : ;
581                         }
582                         break ;
583 
584                     case GB_TIMES_opcode :
585 
586                         switch (zcode)
587                         {
588                             case GB_INT8_code  : return (GxB_TIMES_PAIR_INT8    ) ;
589                             case GB_UINT8_code : return (GxB_TIMES_PAIR_UINT8   ) ;
590                             case GB_INT16_code : return (GxB_TIMES_PAIR_INT16   ) ;
591                             case GB_UINT16_code: return (GxB_TIMES_PAIR_UINT16  ) ;
592                             case GB_INT32_code : return (GxB_TIMES_PAIR_INT32   ) ;
593                             case GB_UINT32_code: return (GxB_TIMES_PAIR_UINT32  ) ;
594                             case GB_INT64_code : return (GxB_TIMES_PAIR_INT64   ) ;
595                             case GB_UINT64_code: return (GxB_TIMES_PAIR_UINT64  ) ;
596                             case GB_FP32_code  : return (GxB_TIMES_PAIR_FP32    ) ;
597                             case GB_FP64_code  : return (GxB_TIMES_PAIR_FP64    ) ;
598                             default : ;
599                         }
600                         break ;
601 
602                     case GB_ANY_opcode :
603 
604                         switch (zcode)
605                         {
606                             case GB_INT8_code  : return (GxB_ANY_PAIR_INT8      ) ;
607                             case GB_UINT8_code : return (GxB_ANY_PAIR_UINT8     ) ;
608                             case GB_INT16_code : return (GxB_ANY_PAIR_INT16     ) ;
609                             case GB_UINT16_code: return (GxB_ANY_PAIR_UINT16    ) ;
610                             case GB_INT32_code : return (GxB_ANY_PAIR_INT32     ) ;
611                             case GB_UINT32_code: return (GxB_ANY_PAIR_UINT32    ) ;
612                             case GB_INT64_code : return (GxB_ANY_PAIR_INT64     ) ;
613                             case GB_UINT64_code: return (GxB_ANY_PAIR_UINT64    ) ;
614                             case GB_FP32_code  : return (GxB_ANY_PAIR_FP32      ) ;
615                             case GB_FP64_code  : return (GxB_ANY_PAIR_FP64      ) ;
616                             default : ;
617                         }
618                         break ;
619 
620                     default : ;
621                 }
622                 break ;
623 
624             case GB_MIN_opcode : // with (5 monoids) x (10 nonboolean types)
625 
626                 switch (add_opcode)
627                 {
628 
629                     case GB_MIN_opcode :
630 
631                         switch (zcode)
632                         {
633                             case GB_INT8_code  : return (GxB_MIN_MIN_INT8       ) ;
634                             case GB_UINT8_code : return (GxB_MIN_MIN_UINT8      ) ;
635                             case GB_INT16_code : return (GxB_MIN_MIN_INT16      ) ;
636                             case GB_UINT16_code: return (GxB_MIN_MIN_UINT16     ) ;
637                             case GB_INT32_code : return (GxB_MIN_MIN_INT32      ) ;
638                             case GB_UINT32_code: return (GxB_MIN_MIN_UINT32     ) ;
639                             case GB_INT64_code : return (GxB_MIN_MIN_INT64      ) ;
640                             case GB_UINT64_code: return (GxB_MIN_MIN_UINT64     ) ;
641                             case GB_FP32_code  : return (GxB_MIN_MIN_FP32       ) ;
642                             case GB_FP64_code  : return (GxB_MIN_MIN_FP64       ) ;
643                             default : ;
644                         }
645                         break ;
646 
647                     case GB_MAX_opcode :
648 
649                         switch (zcode)
650                         {
651                             case GB_INT8_code  : return (GrB_MAX_MIN_SEMIRING_INT8  ) ;
652                             case GB_INT16_code : return (GrB_MAX_MIN_SEMIRING_INT16 ) ;
653                             case GB_INT32_code : return (GrB_MAX_MIN_SEMIRING_INT32 ) ;
654                             case GB_INT64_code : return (GrB_MAX_MIN_SEMIRING_INT64 ) ;
655                             case GB_UINT8_code : return (GrB_MAX_MIN_SEMIRING_UINT8 ) ;
656                             case GB_UINT16_code: return (GrB_MAX_MIN_SEMIRING_UINT16) ;
657                             case GB_UINT32_code: return (GrB_MAX_MIN_SEMIRING_UINT32) ;
658                             case GB_UINT64_code: return (GrB_MAX_MIN_SEMIRING_UINT64) ;
659                             case GB_FP32_code  : return (GrB_MAX_MIN_SEMIRING_FP32  ) ;
660                             case GB_FP64_code  : return (GrB_MAX_MIN_SEMIRING_FP64  ) ;
661                             default : ;
662                         }
663                         break ;
664 
665                     case GB_PLUS_opcode :
666 
667                         switch (zcode)
668                         {
669                             case GB_INT8_code  : return (GrB_PLUS_MIN_SEMIRING_INT8  ) ;
670                             case GB_INT16_code : return (GrB_PLUS_MIN_SEMIRING_INT16 ) ;
671                             case GB_INT32_code : return (GrB_PLUS_MIN_SEMIRING_INT32 ) ;
672                             case GB_INT64_code : return (GrB_PLUS_MIN_SEMIRING_INT64 ) ;
673                             case GB_UINT8_code : return (GrB_PLUS_MIN_SEMIRING_UINT8 ) ;
674                             case GB_UINT16_code: return (GrB_PLUS_MIN_SEMIRING_UINT16) ;
675                             case GB_UINT32_code: return (GrB_PLUS_MIN_SEMIRING_UINT32) ;
676                             case GB_UINT64_code: return (GrB_PLUS_MIN_SEMIRING_UINT64) ;
677                             case GB_FP32_code  : return (GrB_PLUS_MIN_SEMIRING_FP32  ) ;
678                             case GB_FP64_code  : return (GrB_PLUS_MIN_SEMIRING_FP64  ) ;
679                             default : ;
680                         }
681                         break ;
682 
683                     case GB_TIMES_opcode :
684 
685                         switch (zcode)
686                         {
687                             case GB_INT8_code  : return (GxB_TIMES_MIN_INT8     ) ;
688                             case GB_UINT8_code : return (GxB_TIMES_MIN_UINT8    ) ;
689                             case GB_INT16_code : return (GxB_TIMES_MIN_INT16    ) ;
690                             case GB_UINT16_code: return (GxB_TIMES_MIN_UINT16   ) ;
691                             case GB_INT32_code : return (GxB_TIMES_MIN_INT32    ) ;
692                             case GB_UINT32_code: return (GxB_TIMES_MIN_UINT32   ) ;
693                             case GB_INT64_code : return (GxB_TIMES_MIN_INT64    ) ;
694                             case GB_UINT64_code: return (GxB_TIMES_MIN_UINT64   ) ;
695                             case GB_FP32_code  : return (GxB_TIMES_MIN_FP32     ) ;
696                             case GB_FP64_code  : return (GxB_TIMES_MIN_FP64     ) ;
697                             default : ;
698                         }
699                         break ;
700 
701                     case GB_ANY_opcode :
702 
703                         switch (zcode)
704                         {
705                             case GB_INT8_code  : return (GxB_ANY_MIN_INT8       ) ;
706                             case GB_UINT8_code : return (GxB_ANY_MIN_UINT8      ) ;
707                             case GB_INT16_code : return (GxB_ANY_MIN_INT16      ) ;
708                             case GB_UINT16_code: return (GxB_ANY_MIN_UINT16     ) ;
709                             case GB_INT32_code : return (GxB_ANY_MIN_INT32      ) ;
710                             case GB_UINT32_code: return (GxB_ANY_MIN_UINT32     ) ;
711                             case GB_INT64_code : return (GxB_ANY_MIN_INT64      ) ;
712                             case GB_UINT64_code: return (GxB_ANY_MIN_UINT64     ) ;
713                             case GB_FP32_code  : return (GxB_ANY_MIN_FP32       ) ;
714                             case GB_FP64_code  : return (GxB_ANY_MIN_FP64       ) ;
715                             default : ;
716                         }
717                         break ;
718 
719                     default : ;
720                 }
721                 break ;
722 
723             case GB_MAX_opcode : // with (5 monoids) x (10 nonboolean types)
724 
725                 switch (add_opcode)
726                 {
727 
728                     case GB_MIN_opcode :
729 
730                         switch (zcode)
731                         {
732                             case GB_INT8_code  : return (GrB_MIN_MAX_SEMIRING_INT8  ) ;
733                             case GB_INT16_code : return (GrB_MIN_MAX_SEMIRING_INT16 ) ;
734                             case GB_INT32_code : return (GrB_MIN_MAX_SEMIRING_INT32 ) ;
735                             case GB_INT64_code : return (GrB_MIN_MAX_SEMIRING_INT64 ) ;
736                             case GB_UINT8_code : return (GrB_MIN_MAX_SEMIRING_UINT8 ) ;
737                             case GB_UINT16_code: return (GrB_MIN_MAX_SEMIRING_UINT16) ;
738                             case GB_UINT32_code: return (GrB_MIN_MAX_SEMIRING_UINT32) ;
739                             case GB_UINT64_code: return (GrB_MIN_MAX_SEMIRING_UINT64) ;
740                             case GB_FP32_code  : return (GrB_MIN_MAX_SEMIRING_FP32  ) ;
741                             case GB_FP64_code  : return (GrB_MIN_MAX_SEMIRING_FP64  ) ;
742                             default : ;
743                         }
744                         break ;
745 
746                     case GB_MAX_opcode :
747 
748                         switch (zcode)
749                         {
750                             case GB_INT8_code  : return (GxB_MAX_MAX_INT8       ) ;
751                             case GB_UINT8_code : return (GxB_MAX_MAX_UINT8      ) ;
752                             case GB_INT16_code : return (GxB_MAX_MAX_INT16      ) ;
753                             case GB_UINT16_code: return (GxB_MAX_MAX_UINT16     ) ;
754                             case GB_INT32_code : return (GxB_MAX_MAX_INT32      ) ;
755                             case GB_UINT32_code: return (GxB_MAX_MAX_UINT32     ) ;
756                             case GB_INT64_code : return (GxB_MAX_MAX_INT64      ) ;
757                             case GB_UINT64_code: return (GxB_MAX_MAX_UINT64     ) ;
758                             case GB_FP32_code  : return (GxB_MAX_MAX_FP32       ) ;
759                             case GB_FP64_code  : return (GxB_MAX_MAX_FP64       ) ;
760                             default : ;
761                         }
762                         break ;
763 
764                     case GB_PLUS_opcode :
765 
766                         switch (zcode)
767                         {
768                             case GB_INT8_code  : return (GxB_PLUS_MAX_INT8      ) ;
769                             case GB_UINT8_code : return (GxB_PLUS_MAX_UINT8     ) ;
770                             case GB_INT16_code : return (GxB_PLUS_MAX_INT16     ) ;
771                             case GB_UINT16_code: return (GxB_PLUS_MAX_UINT16    ) ;
772                             case GB_INT32_code : return (GxB_PLUS_MAX_INT32     ) ;
773                             case GB_UINT32_code: return (GxB_PLUS_MAX_UINT32    ) ;
774                             case GB_INT64_code : return (GxB_PLUS_MAX_INT64     ) ;
775                             case GB_UINT64_code: return (GxB_PLUS_MAX_UINT64    ) ;
776                             case GB_FP32_code  : return (GxB_PLUS_MAX_FP32      ) ;
777                             case GB_FP64_code  : return (GxB_PLUS_MAX_FP64      ) ;
778                             default : ;
779                         }
780                         break ;
781 
782                     case GB_TIMES_opcode :
783 
784                         switch (zcode)
785                         {
786                             case GB_INT8_code  : return (GxB_TIMES_MAX_INT8     ) ;
787                             case GB_UINT8_code : return (GxB_TIMES_MAX_UINT8    ) ;
788                             case GB_INT16_code : return (GxB_TIMES_MAX_INT16    ) ;
789                             case GB_UINT16_code: return (GxB_TIMES_MAX_UINT16   ) ;
790                             case GB_INT32_code : return (GxB_TIMES_MAX_INT32    ) ;
791                             case GB_UINT32_code: return (GxB_TIMES_MAX_UINT32   ) ;
792                             case GB_INT64_code : return (GxB_TIMES_MAX_INT64    ) ;
793                             case GB_UINT64_code: return (GxB_TIMES_MAX_UINT64   ) ;
794                             case GB_FP32_code  : return (GxB_TIMES_MAX_FP32     ) ;
795                             case GB_FP64_code  : return (GxB_TIMES_MAX_FP64     ) ;
796                             default : ;
797                         }
798                         break ;
799 
800                     case GB_ANY_opcode :
801 
802                         switch (zcode)
803                         {
804                             case GB_INT8_code  : return (GxB_ANY_MAX_INT8       ) ;
805                             case GB_UINT8_code : return (GxB_ANY_MAX_UINT8      ) ;
806                             case GB_INT16_code : return (GxB_ANY_MAX_INT16      ) ;
807                             case GB_UINT16_code: return (GxB_ANY_MAX_UINT16     ) ;
808                             case GB_INT32_code : return (GxB_ANY_MAX_INT32      ) ;
809                             case GB_UINT32_code: return (GxB_ANY_MAX_UINT32     ) ;
810                             case GB_INT64_code : return (GxB_ANY_MAX_INT64      ) ;
811                             case GB_UINT64_code: return (GxB_ANY_MAX_UINT64     ) ;
812                             case GB_FP32_code  : return (GxB_ANY_MAX_FP32       ) ;
813                             case GB_FP64_code  : return (GxB_ANY_MAX_FP64       ) ;
814                             default : ;
815                         }
816                         break ;
817 
818                     default : ;
819                 }
820                 break ;
821 
822             case GB_PLUS_opcode : // with (5 monoids) x (10 nonboolean types)
823 
824                 switch (add_opcode)
825                 {
826 
827                     case GB_MIN_opcode :
828 
829                         switch (zcode)
830                         {
831                             case GB_INT8_code  : return (GrB_MIN_PLUS_SEMIRING_INT8  ) ;
832                             case GB_INT16_code : return (GrB_MIN_PLUS_SEMIRING_INT16 ) ;
833                             case GB_INT32_code : return (GrB_MIN_PLUS_SEMIRING_INT32 ) ;
834                             case GB_INT64_code : return (GrB_MIN_PLUS_SEMIRING_INT64 ) ;
835                             case GB_UINT8_code : return (GrB_MIN_PLUS_SEMIRING_UINT8 ) ;
836                             case GB_UINT16_code: return (GrB_MIN_PLUS_SEMIRING_UINT16) ;
837                             case GB_UINT32_code: return (GrB_MIN_PLUS_SEMIRING_UINT32) ;
838                             case GB_UINT64_code: return (GrB_MIN_PLUS_SEMIRING_UINT64) ;
839                             case GB_FP32_code  : return (GrB_MIN_PLUS_SEMIRING_FP32  ) ;
840                             case GB_FP64_code  : return (GrB_MIN_PLUS_SEMIRING_FP64  ) ;
841                             default : ;
842                         }
843                         break ;
844 
845                     case GB_MAX_opcode :
846 
847                         switch (zcode)
848                         {
849                             case GB_INT8_code  : return (GrB_MAX_PLUS_SEMIRING_INT8  ) ;
850                             case GB_INT16_code : return (GrB_MAX_PLUS_SEMIRING_INT16 ) ;
851                             case GB_INT32_code : return (GrB_MAX_PLUS_SEMIRING_INT32 ) ;
852                             case GB_INT64_code : return (GrB_MAX_PLUS_SEMIRING_INT64 ) ;
853                             case GB_UINT8_code : return (GrB_MAX_PLUS_SEMIRING_UINT8 ) ;
854                             case GB_UINT16_code: return (GrB_MAX_PLUS_SEMIRING_UINT16) ;
855                             case GB_UINT32_code: return (GrB_MAX_PLUS_SEMIRING_UINT32) ;
856                             case GB_UINT64_code: return (GrB_MAX_PLUS_SEMIRING_UINT64) ;
857                             case GB_FP32_code  : return (GrB_MAX_PLUS_SEMIRING_FP32  ) ;
858                             case GB_FP64_code  : return (GrB_MAX_PLUS_SEMIRING_FP64  ) ;
859                             default : ;
860                         }
861                         break ;
862 
863                     case GB_PLUS_opcode :
864 
865                         switch (zcode)
866                         {
867                             case GB_INT8_code  : return (GxB_PLUS_PLUS_INT8     ) ;
868                             case GB_UINT8_code : return (GxB_PLUS_PLUS_UINT8    ) ;
869                             case GB_INT16_code : return (GxB_PLUS_PLUS_INT16    ) ;
870                             case GB_UINT16_code: return (GxB_PLUS_PLUS_UINT16   ) ;
871                             case GB_INT32_code : return (GxB_PLUS_PLUS_INT32    ) ;
872                             case GB_UINT32_code: return (GxB_PLUS_PLUS_UINT32   ) ;
873                             case GB_INT64_code : return (GxB_PLUS_PLUS_INT64    ) ;
874                             case GB_UINT64_code: return (GxB_PLUS_PLUS_UINT64   ) ;
875                             case GB_FP32_code  : return (GxB_PLUS_PLUS_FP32     ) ;
876                             case GB_FP64_code  : return (GxB_PLUS_PLUS_FP64     ) ;
877                             default : ;
878                         }
879                         break ;
880 
881                     case GB_TIMES_opcode :
882 
883                         switch (zcode)
884                         {
885                             case GB_INT8_code  : return (GxB_TIMES_PLUS_INT8    ) ;
886                             case GB_UINT8_code : return (GxB_TIMES_PLUS_UINT8   ) ;
887                             case GB_INT16_code : return (GxB_TIMES_PLUS_INT16   ) ;
888                             case GB_UINT16_code: return (GxB_TIMES_PLUS_UINT16  ) ;
889                             case GB_INT32_code : return (GxB_TIMES_PLUS_INT32   ) ;
890                             case GB_UINT32_code: return (GxB_TIMES_PLUS_UINT32  ) ;
891                             case GB_INT64_code : return (GxB_TIMES_PLUS_INT64   ) ;
892                             case GB_UINT64_code: return (GxB_TIMES_PLUS_UINT64  ) ;
893                             case GB_FP32_code  : return (GxB_TIMES_PLUS_FP32    ) ;
894                             case GB_FP64_code  : return (GxB_TIMES_PLUS_FP64    ) ;
895                             default : ;
896                         }
897                         break ;
898 
899                     case GB_ANY_opcode :
900 
901                         switch (zcode)
902                         {
903                             case GB_INT8_code  : return (GxB_ANY_PLUS_INT8      ) ;
904                             case GB_UINT8_code : return (GxB_ANY_PLUS_UINT8     ) ;
905                             case GB_INT16_code : return (GxB_ANY_PLUS_INT16     ) ;
906                             case GB_UINT16_code: return (GxB_ANY_PLUS_UINT16    ) ;
907                             case GB_INT32_code : return (GxB_ANY_PLUS_INT32     ) ;
908                             case GB_UINT32_code: return (GxB_ANY_PLUS_UINT32    ) ;
909                             case GB_INT64_code : return (GxB_ANY_PLUS_INT64     ) ;
910                             case GB_UINT64_code: return (GxB_ANY_PLUS_UINT64    ) ;
911                             case GB_FP32_code  : return (GxB_ANY_PLUS_FP32      ) ;
912                             case GB_FP64_code  : return (GxB_ANY_PLUS_FP64      ) ;
913                             default : ;
914                         }
915                         break ;
916 
917                     default : ;
918                 }
919                 break ;
920 
921             case GB_MINUS_opcode : // with (5 monoids) x (10 nonboolean types)
922 
923                 switch (add_opcode)
924                 {
925 
926                     case GB_MIN_opcode :
927 
928                         switch (zcode)
929                         {
930                             case GB_INT8_code  : return (GxB_MIN_MINUS_INT8     ) ;
931                             case GB_UINT8_code : return (GxB_MIN_MINUS_UINT8    ) ;
932                             case GB_INT16_code : return (GxB_MIN_MINUS_INT16    ) ;
933                             case GB_UINT16_code: return (GxB_MIN_MINUS_UINT16   ) ;
934                             case GB_INT32_code : return (GxB_MIN_MINUS_INT32    ) ;
935                             case GB_UINT32_code: return (GxB_MIN_MINUS_UINT32   ) ;
936                             case GB_INT64_code : return (GxB_MIN_MINUS_INT64    ) ;
937                             case GB_UINT64_code: return (GxB_MIN_MINUS_UINT64   ) ;
938                             case GB_FP32_code  : return (GxB_MIN_MINUS_FP32     ) ;
939                             case GB_FP64_code  : return (GxB_MIN_MINUS_FP64     ) ;
940                             default : ;
941                         }
942                         break ;
943 
944                     case GB_MAX_opcode :
945 
946                         switch (zcode)
947                         {
948                             case GB_INT8_code  : return (GxB_MAX_MINUS_INT8     ) ;
949                             case GB_UINT8_code : return (GxB_MAX_MINUS_UINT8    ) ;
950                             case GB_INT16_code : return (GxB_MAX_MINUS_INT16    ) ;
951                             case GB_UINT16_code: return (GxB_MAX_MINUS_UINT16   ) ;
952                             case GB_INT32_code : return (GxB_MAX_MINUS_INT32    ) ;
953                             case GB_UINT32_code: return (GxB_MAX_MINUS_UINT32   ) ;
954                             case GB_INT64_code : return (GxB_MAX_MINUS_INT64    ) ;
955                             case GB_UINT64_code: return (GxB_MAX_MINUS_UINT64   ) ;
956                             case GB_FP32_code  : return (GxB_MAX_MINUS_FP32     ) ;
957                             case GB_FP64_code  : return (GxB_MAX_MINUS_FP64     ) ;
958                             default : ;
959                         }
960                         break ;
961 
962                     case GB_PLUS_opcode :
963 
964                         switch (zcode)
965                         {
966                             case GB_INT8_code  : return (GxB_PLUS_MINUS_INT8    ) ;
967                             case GB_UINT8_code : return (GxB_PLUS_MINUS_UINT8   ) ;
968                             case GB_INT16_code : return (GxB_PLUS_MINUS_INT16   ) ;
969                             case GB_UINT16_code: return (GxB_PLUS_MINUS_UINT16  ) ;
970                             case GB_INT32_code : return (GxB_PLUS_MINUS_INT32   ) ;
971                             case GB_UINT32_code: return (GxB_PLUS_MINUS_UINT32  ) ;
972                             case GB_INT64_code : return (GxB_PLUS_MINUS_INT64   ) ;
973                             case GB_UINT64_code: return (GxB_PLUS_MINUS_UINT64  ) ;
974                             case GB_FP32_code  : return (GxB_PLUS_MINUS_FP32    ) ;
975                             case GB_FP64_code  : return (GxB_PLUS_MINUS_FP64    ) ;
976                             default : ;
977                         }
978                         break ;
979 
980                     case GB_TIMES_opcode :
981 
982                         switch (zcode)
983                         {
984                             case GB_INT8_code  : return (GxB_TIMES_MINUS_INT8   ) ;
985                             case GB_UINT8_code : return (GxB_TIMES_MINUS_UINT8  ) ;
986                             case GB_INT16_code : return (GxB_TIMES_MINUS_INT16  ) ;
987                             case GB_UINT16_code: return (GxB_TIMES_MINUS_UINT16 ) ;
988                             case GB_INT32_code : return (GxB_TIMES_MINUS_INT32  ) ;
989                             case GB_UINT32_code: return (GxB_TIMES_MINUS_UINT32 ) ;
990                             case GB_INT64_code : return (GxB_TIMES_MINUS_INT64  ) ;
991                             case GB_UINT64_code: return (GxB_TIMES_MINUS_UINT64 ) ;
992                             case GB_FP32_code  : return (GxB_TIMES_MINUS_FP32   ) ;
993                             case GB_FP64_code  : return (GxB_TIMES_MINUS_FP64   ) ;
994                             default : ;
995                         }
996                         break ;
997 
998                     case GB_ANY_opcode :
999 
1000                         switch (zcode)
1001                         {
1002                             case GB_INT8_code  : return (GxB_ANY_MINUS_INT8     ) ;
1003                             case GB_UINT8_code : return (GxB_ANY_MINUS_UINT8    ) ;
1004                             case GB_INT16_code : return (GxB_ANY_MINUS_INT16    ) ;
1005                             case GB_UINT16_code: return (GxB_ANY_MINUS_UINT16   ) ;
1006                             case GB_INT32_code : return (GxB_ANY_MINUS_INT32    ) ;
1007                             case GB_UINT32_code: return (GxB_ANY_MINUS_UINT32   ) ;
1008                             case GB_INT64_code : return (GxB_ANY_MINUS_INT64    ) ;
1009                             case GB_UINT64_code: return (GxB_ANY_MINUS_UINT64   ) ;
1010                             case GB_FP32_code  : return (GxB_ANY_MINUS_FP32     ) ;
1011                             case GB_FP64_code  : return (GxB_ANY_MINUS_FP64     ) ;
1012                             default : ;
1013                         }
1014                         break ;
1015 
1016                     default : ;
1017                 }
1018                 break ;
1019 
1020             case GB_RMINUS_opcode : // with (5 monoids) x (10 nonboolean types)
1021 
1022                 switch (add_opcode)
1023                 {
1024 
1025                     case GB_MIN_opcode :
1026 
1027                         switch (zcode)
1028                         {
1029                             case GB_INT8_code  : return (GxB_MIN_RMINUS_INT8    ) ;
1030                             case GB_UINT8_code : return (GxB_MIN_RMINUS_UINT8   ) ;
1031                             case GB_INT16_code : return (GxB_MIN_RMINUS_INT16   ) ;
1032                             case GB_UINT16_code: return (GxB_MIN_RMINUS_UINT16  ) ;
1033                             case GB_INT32_code : return (GxB_MIN_RMINUS_INT32   ) ;
1034                             case GB_UINT32_code: return (GxB_MIN_RMINUS_UINT32  ) ;
1035                             case GB_INT64_code : return (GxB_MIN_RMINUS_INT64   ) ;
1036                             case GB_UINT64_code: return (GxB_MIN_RMINUS_UINT64  ) ;
1037                             case GB_FP32_code  : return (GxB_MIN_RMINUS_FP32    ) ;
1038                             case GB_FP64_code  : return (GxB_MIN_RMINUS_FP64    ) ;
1039                             default : ;
1040                         }
1041                         break ;
1042 
1043                     case GB_MAX_opcode :
1044 
1045                         switch (zcode)
1046                         {
1047                             case GB_INT8_code  : return (GxB_MAX_RMINUS_INT8    ) ;
1048                             case GB_UINT8_code : return (GxB_MAX_RMINUS_UINT8   ) ;
1049                             case GB_INT16_code : return (GxB_MAX_RMINUS_INT16   ) ;
1050                             case GB_UINT16_code: return (GxB_MAX_RMINUS_UINT16  ) ;
1051                             case GB_INT32_code : return (GxB_MAX_RMINUS_INT32   ) ;
1052                             case GB_UINT32_code: return (GxB_MAX_RMINUS_UINT32  ) ;
1053                             case GB_INT64_code : return (GxB_MAX_RMINUS_INT64   ) ;
1054                             case GB_UINT64_code: return (GxB_MAX_RMINUS_UINT64  ) ;
1055                             case GB_FP32_code  : return (GxB_MAX_RMINUS_FP32    ) ;
1056                             case GB_FP64_code  : return (GxB_MAX_RMINUS_FP64    ) ;
1057                             default : ;
1058                         }
1059                         break ;
1060 
1061                     case GB_PLUS_opcode :
1062 
1063                         switch (zcode)
1064                         {
1065                             case GB_INT8_code  : return (GxB_PLUS_RMINUS_INT8   ) ;
1066                             case GB_UINT8_code : return (GxB_PLUS_RMINUS_UINT8  ) ;
1067                             case GB_INT16_code : return (GxB_PLUS_RMINUS_INT16  ) ;
1068                             case GB_UINT16_code: return (GxB_PLUS_RMINUS_UINT16 ) ;
1069                             case GB_INT32_code : return (GxB_PLUS_RMINUS_INT32  ) ;
1070                             case GB_UINT32_code: return (GxB_PLUS_RMINUS_UINT32 ) ;
1071                             case GB_INT64_code : return (GxB_PLUS_RMINUS_INT64  ) ;
1072                             case GB_UINT64_code: return (GxB_PLUS_RMINUS_UINT64 ) ;
1073                             case GB_FP32_code  : return (GxB_PLUS_RMINUS_FP32   ) ;
1074                             case GB_FP64_code  : return (GxB_PLUS_RMINUS_FP64   ) ;
1075                             default : ;
1076                         }
1077                         break ;
1078 
1079                     case GB_TIMES_opcode :
1080 
1081                         switch (zcode)
1082                         {
1083                             case GB_INT8_code  : return (GxB_TIMES_RMINUS_INT8  ) ;
1084                             case GB_UINT8_code : return (GxB_TIMES_RMINUS_UINT8 ) ;
1085                             case GB_INT16_code : return (GxB_TIMES_RMINUS_INT16 ) ;
1086                             case GB_UINT16_code: return (GxB_TIMES_RMINUS_UINT16) ;
1087                             case GB_INT32_code : return (GxB_TIMES_RMINUS_INT32 ) ;
1088                             case GB_UINT32_code: return (GxB_TIMES_RMINUS_UINT32) ;
1089                             case GB_INT64_code : return (GxB_TIMES_RMINUS_INT64 ) ;
1090                             case GB_UINT64_code: return (GxB_TIMES_RMINUS_UINT64) ;
1091                             case GB_FP32_code  : return (GxB_TIMES_RMINUS_FP32  ) ;
1092                             case GB_FP64_code  : return (GxB_TIMES_RMINUS_FP64  ) ;
1093                             default : ;
1094                         }
1095                         break ;
1096 
1097                     case GB_ANY_opcode :
1098 
1099                         switch (zcode)
1100                         {
1101                             case GB_INT8_code  : return (GxB_ANY_RMINUS_INT8    ) ;
1102                             case GB_UINT8_code : return (GxB_ANY_RMINUS_UINT8   ) ;
1103                             case GB_INT16_code : return (GxB_ANY_RMINUS_INT16   ) ;
1104                             case GB_UINT16_code: return (GxB_ANY_RMINUS_UINT16  ) ;
1105                             case GB_INT32_code : return (GxB_ANY_RMINUS_INT32   ) ;
1106                             case GB_UINT32_code: return (GxB_ANY_RMINUS_UINT32  ) ;
1107                             case GB_INT64_code : return (GxB_ANY_RMINUS_INT64   ) ;
1108                             case GB_UINT64_code: return (GxB_ANY_RMINUS_UINT64  ) ;
1109                             case GB_FP32_code  : return (GxB_ANY_RMINUS_FP32    ) ;
1110                             case GB_FP64_code  : return (GxB_ANY_RMINUS_FP64    ) ;
1111                             default : ;
1112                         }
1113                         break ;
1114 
1115                     default : ;
1116                 }
1117                 break ;
1118 
1119             case GB_TIMES_opcode : // with (5 monoids) x (10 nonboolean types)
1120 
1121                 switch (add_opcode)
1122                 {
1123 
1124                     case GB_MIN_opcode :
1125 
1126                         switch (zcode)
1127                         {
1128                             case GB_INT8_code  : return (GrB_MIN_TIMES_SEMIRING_INT8  ) ;
1129                             case GB_INT16_code : return (GrB_MIN_TIMES_SEMIRING_INT16 ) ;
1130                             case GB_INT32_code : return (GrB_MIN_TIMES_SEMIRING_INT32 ) ;
1131                             case GB_INT64_code : return (GrB_MIN_TIMES_SEMIRING_INT64 ) ;
1132                             case GB_UINT8_code : return (GrB_MIN_TIMES_SEMIRING_UINT8 ) ;
1133                             case GB_UINT16_code: return (GrB_MIN_TIMES_SEMIRING_UINT16) ;
1134                             case GB_UINT32_code: return (GrB_MIN_TIMES_SEMIRING_UINT32) ;
1135                             case GB_UINT64_code: return (GrB_MIN_TIMES_SEMIRING_UINT64) ;
1136                             case GB_FP32_code  : return (GrB_MIN_TIMES_SEMIRING_FP32  ) ;
1137                             case GB_FP64_code  : return (GrB_MIN_TIMES_SEMIRING_FP64  ) ;
1138                             default : ;
1139                         }
1140                         break ;
1141 
1142                     case GB_MAX_opcode :
1143 
1144                         switch (zcode)
1145                         {
1146                             case GB_INT8_code  : return (GrB_MAX_TIMES_SEMIRING_INT8  ) ;
1147                             case GB_INT16_code : return (GrB_MAX_TIMES_SEMIRING_INT16 ) ;
1148                             case GB_INT32_code : return (GrB_MAX_TIMES_SEMIRING_INT32 ) ;
1149                             case GB_INT64_code : return (GrB_MAX_TIMES_SEMIRING_INT64 ) ;
1150                             case GB_UINT8_code : return (GrB_MAX_TIMES_SEMIRING_UINT8 ) ;
1151                             case GB_UINT16_code: return (GrB_MAX_TIMES_SEMIRING_UINT16) ;
1152                             case GB_UINT32_code: return (GrB_MAX_TIMES_SEMIRING_UINT32) ;
1153                             case GB_UINT64_code: return (GrB_MAX_TIMES_SEMIRING_UINT64) ;
1154                             case GB_FP32_code  : return (GrB_MAX_TIMES_SEMIRING_FP32  ) ;
1155                             case GB_FP64_code  : return (GrB_MAX_TIMES_SEMIRING_FP64  ) ;
1156                             default : ;
1157                         }
1158                         break ;
1159 
1160                     case GB_PLUS_opcode :
1161 
1162                         switch (zcode)
1163                         {
1164                             case GB_INT8_code  : return (GrB_PLUS_TIMES_SEMIRING_INT8  ) ;
1165                             case GB_INT16_code : return (GrB_PLUS_TIMES_SEMIRING_INT16 ) ;
1166                             case GB_INT32_code : return (GrB_PLUS_TIMES_SEMIRING_INT32 ) ;
1167                             case GB_INT64_code : return (GrB_PLUS_TIMES_SEMIRING_INT64 ) ;
1168                             case GB_UINT8_code : return (GrB_PLUS_TIMES_SEMIRING_UINT8 ) ;
1169                             case GB_UINT16_code: return (GrB_PLUS_TIMES_SEMIRING_UINT16) ;
1170                             case GB_UINT32_code: return (GrB_PLUS_TIMES_SEMIRING_UINT32) ;
1171                             case GB_UINT64_code: return (GrB_PLUS_TIMES_SEMIRING_UINT64) ;
1172                             case GB_FP32_code  : return (GrB_PLUS_TIMES_SEMIRING_FP32  ) ;
1173                             case GB_FP64_code  : return (GrB_PLUS_TIMES_SEMIRING_FP64  ) ;
1174                             default : ;
1175                         }
1176                         break ;
1177 
1178                     case GB_TIMES_opcode :
1179 
1180                         switch (zcode)
1181                         {
1182                             case GB_INT8_code  : return (GxB_TIMES_TIMES_INT8   ) ;
1183                             case GB_UINT8_code : return (GxB_TIMES_TIMES_UINT8  ) ;
1184                             case GB_INT16_code : return (GxB_TIMES_TIMES_INT16  ) ;
1185                             case GB_UINT16_code: return (GxB_TIMES_TIMES_UINT16 ) ;
1186                             case GB_INT32_code : return (GxB_TIMES_TIMES_INT32  ) ;
1187                             case GB_UINT32_code: return (GxB_TIMES_TIMES_UINT32 ) ;
1188                             case GB_INT64_code : return (GxB_TIMES_TIMES_INT64  ) ;
1189                             case GB_UINT64_code: return (GxB_TIMES_TIMES_UINT64 ) ;
1190                             case GB_FP32_code  : return (GxB_TIMES_TIMES_FP32   ) ;
1191                             case GB_FP64_code  : return (GxB_TIMES_TIMES_FP64   ) ;
1192                             default : ;
1193                         }
1194                         break ;
1195 
1196                     case GB_ANY_opcode :
1197 
1198                         switch (zcode)
1199                         {
1200                             case GB_INT8_code  : return (GxB_ANY_TIMES_INT8     ) ;
1201                             case GB_UINT8_code : return (GxB_ANY_TIMES_UINT8    ) ;
1202                             case GB_INT16_code : return (GxB_ANY_TIMES_INT16    ) ;
1203                             case GB_UINT16_code: return (GxB_ANY_TIMES_UINT16   ) ;
1204                             case GB_INT32_code : return (GxB_ANY_TIMES_INT32    ) ;
1205                             case GB_UINT32_code: return (GxB_ANY_TIMES_UINT32   ) ;
1206                             case GB_INT64_code : return (GxB_ANY_TIMES_INT64    ) ;
1207                             case GB_UINT64_code: return (GxB_ANY_TIMES_UINT64   ) ;
1208                             case GB_FP32_code  : return (GxB_ANY_TIMES_FP32     ) ;
1209                             case GB_FP64_code  : return (GxB_ANY_TIMES_FP64     ) ;
1210                             default : ;
1211                         }
1212                         break ;
1213 
1214                     default : ;
1215                 }
1216                 break ;
1217 
1218             case GB_DIV_opcode : // with (5 monoids) x (10 nonboolean types)
1219 
1220                 switch (add_opcode)
1221                 {
1222 
1223                     case GB_MIN_opcode :
1224 
1225                         switch (zcode)
1226                         {
1227                             case GB_INT8_code  : return (GxB_MIN_DIV_INT8       ) ;
1228                             case GB_UINT8_code : return (GxB_MIN_DIV_UINT8      ) ;
1229                             case GB_INT16_code : return (GxB_MIN_DIV_INT16      ) ;
1230                             case GB_UINT16_code: return (GxB_MIN_DIV_UINT16     ) ;
1231                             case GB_INT32_code : return (GxB_MIN_DIV_INT32      ) ;
1232                             case GB_UINT32_code: return (GxB_MIN_DIV_UINT32     ) ;
1233                             case GB_INT64_code : return (GxB_MIN_DIV_INT64      ) ;
1234                             case GB_UINT64_code: return (GxB_MIN_DIV_UINT64     ) ;
1235                             case GB_FP32_code  : return (GxB_MIN_DIV_FP32       ) ;
1236                             case GB_FP64_code  : return (GxB_MIN_DIV_FP64       ) ;
1237                             default : ;
1238                         }
1239                         break ;
1240 
1241                     case GB_MAX_opcode :
1242 
1243                         switch (zcode)
1244                         {
1245                             case GB_INT8_code  : return (GxB_MAX_DIV_INT8       ) ;
1246                             case GB_UINT8_code : return (GxB_MAX_DIV_UINT8      ) ;
1247                             case GB_INT16_code : return (GxB_MAX_DIV_INT16      ) ;
1248                             case GB_UINT16_code: return (GxB_MAX_DIV_UINT16     ) ;
1249                             case GB_INT32_code : return (GxB_MAX_DIV_INT32      ) ;
1250                             case GB_UINT32_code: return (GxB_MAX_DIV_UINT32     ) ;
1251                             case GB_INT64_code : return (GxB_MAX_DIV_INT64      ) ;
1252                             case GB_UINT64_code: return (GxB_MAX_DIV_UINT64     ) ;
1253                             case GB_FP32_code  : return (GxB_MAX_DIV_FP32       ) ;
1254                             case GB_FP64_code  : return (GxB_MAX_DIV_FP64       ) ;
1255                             default : ;
1256                         }
1257                         break ;
1258 
1259                     case GB_PLUS_opcode :
1260 
1261                         switch (zcode)
1262                         {
1263                             case GB_INT8_code  : return (GxB_PLUS_DIV_INT8      ) ;
1264                             case GB_UINT8_code : return (GxB_PLUS_DIV_UINT8     ) ;
1265                             case GB_INT16_code : return (GxB_PLUS_DIV_INT16     ) ;
1266                             case GB_UINT16_code: return (GxB_PLUS_DIV_UINT16    ) ;
1267                             case GB_INT32_code : return (GxB_PLUS_DIV_INT32     ) ;
1268                             case GB_UINT32_code: return (GxB_PLUS_DIV_UINT32    ) ;
1269                             case GB_INT64_code : return (GxB_PLUS_DIV_INT64     ) ;
1270                             case GB_UINT64_code: return (GxB_PLUS_DIV_UINT64    ) ;
1271                             case GB_FP32_code  : return (GxB_PLUS_DIV_FP32      ) ;
1272                             case GB_FP64_code  : return (GxB_PLUS_DIV_FP64      ) ;
1273                             default : ;
1274                         }
1275                         break ;
1276 
1277                     case GB_TIMES_opcode :
1278 
1279                         switch (zcode)
1280                         {
1281                             case GB_INT8_code  : return (GxB_TIMES_DIV_INT8     ) ;
1282                             case GB_UINT8_code : return (GxB_TIMES_DIV_UINT8    ) ;
1283                             case GB_INT16_code : return (GxB_TIMES_DIV_INT16    ) ;
1284                             case GB_UINT16_code: return (GxB_TIMES_DIV_UINT16   ) ;
1285                             case GB_INT32_code : return (GxB_TIMES_DIV_INT32    ) ;
1286                             case GB_UINT32_code: return (GxB_TIMES_DIV_UINT32   ) ;
1287                             case GB_INT64_code : return (GxB_TIMES_DIV_INT64    ) ;
1288                             case GB_UINT64_code: return (GxB_TIMES_DIV_UINT64   ) ;
1289                             case GB_FP32_code  : return (GxB_TIMES_DIV_FP32     ) ;
1290                             case GB_FP64_code  : return (GxB_TIMES_DIV_FP64     ) ;
1291                             default : ;
1292                         }
1293                         break ;
1294 
1295                     case GB_ANY_opcode :
1296 
1297                         switch (zcode)
1298                         {
1299                             case GB_INT8_code  : return (GxB_ANY_DIV_INT8       ) ;
1300                             case GB_UINT8_code : return (GxB_ANY_DIV_UINT8      ) ;
1301                             case GB_INT16_code : return (GxB_ANY_DIV_INT16      ) ;
1302                             case GB_UINT16_code: return (GxB_ANY_DIV_UINT16     ) ;
1303                             case GB_INT32_code : return (GxB_ANY_DIV_INT32      ) ;
1304                             case GB_UINT32_code: return (GxB_ANY_DIV_UINT32     ) ;
1305                             case GB_INT64_code : return (GxB_ANY_DIV_INT64      ) ;
1306                             case GB_UINT64_code: return (GxB_ANY_DIV_UINT64     ) ;
1307                             case GB_FP32_code  : return (GxB_ANY_DIV_FP32       ) ;
1308                             case GB_FP64_code  : return (GxB_ANY_DIV_FP64       ) ;
1309                             default : ;
1310                         }
1311                         break ;
1312 
1313                     default : ;
1314                 }
1315                 break ;
1316 
1317             case GB_RDIV_opcode : // with (5 monoids) x (10 nonboolean types)
1318 
1319                 switch (add_opcode)
1320                 {
1321 
1322                     case GB_MIN_opcode :
1323 
1324                         switch (zcode)
1325                         {
1326                             case GB_INT8_code  : return (GxB_MIN_RDIV_INT8      ) ;
1327                             case GB_UINT8_code : return (GxB_MIN_RDIV_UINT8     ) ;
1328                             case GB_INT16_code : return (GxB_MIN_RDIV_INT16     ) ;
1329                             case GB_UINT16_code: return (GxB_MIN_RDIV_UINT16    ) ;
1330                             case GB_INT32_code : return (GxB_MIN_RDIV_INT32     ) ;
1331                             case GB_UINT32_code: return (GxB_MIN_RDIV_UINT32    ) ;
1332                             case GB_INT64_code : return (GxB_MIN_RDIV_INT64     ) ;
1333                             case GB_UINT64_code: return (GxB_MIN_RDIV_UINT64    ) ;
1334                             case GB_FP32_code  : return (GxB_MIN_RDIV_FP32      ) ;
1335                             case GB_FP64_code  : return (GxB_MIN_RDIV_FP64      ) ;
1336                             default : ;
1337                         }
1338                         break ;
1339 
1340                     case GB_MAX_opcode :
1341 
1342                         switch (zcode)
1343                         {
1344                             case GB_INT8_code  : return (GxB_MAX_RDIV_INT8      ) ;
1345                             case GB_UINT8_code : return (GxB_MAX_RDIV_UINT8     ) ;
1346                             case GB_INT16_code : return (GxB_MAX_RDIV_INT16     ) ;
1347                             case GB_UINT16_code: return (GxB_MAX_RDIV_UINT16    ) ;
1348                             case GB_INT32_code : return (GxB_MAX_RDIV_INT32     ) ;
1349                             case GB_UINT32_code: return (GxB_MAX_RDIV_UINT32    ) ;
1350                             case GB_INT64_code : return (GxB_MAX_RDIV_INT64     ) ;
1351                             case GB_UINT64_code: return (GxB_MAX_RDIV_UINT64    ) ;
1352                             case GB_FP32_code  : return (GxB_MAX_RDIV_FP32      ) ;
1353                             case GB_FP64_code  : return (GxB_MAX_RDIV_FP64      ) ;
1354                             default : ;
1355                         }
1356                         break ;
1357 
1358                     case GB_PLUS_opcode :
1359 
1360                         switch (zcode)
1361                         {
1362                             case GB_INT8_code  : return (GxB_PLUS_RDIV_INT8     ) ;
1363                             case GB_UINT8_code : return (GxB_PLUS_RDIV_UINT8    ) ;
1364                             case GB_INT16_code : return (GxB_PLUS_RDIV_INT16    ) ;
1365                             case GB_UINT16_code: return (GxB_PLUS_RDIV_UINT16   ) ;
1366                             case GB_INT32_code : return (GxB_PLUS_RDIV_INT32    ) ;
1367                             case GB_UINT32_code: return (GxB_PLUS_RDIV_UINT32   ) ;
1368                             case GB_INT64_code : return (GxB_PLUS_RDIV_INT64    ) ;
1369                             case GB_UINT64_code: return (GxB_PLUS_RDIV_UINT64   ) ;
1370                             case GB_FP32_code  : return (GxB_PLUS_RDIV_FP32     ) ;
1371                             case GB_FP64_code  : return (GxB_PLUS_RDIV_FP64     ) ;
1372                             default : ;
1373                         }
1374                         break ;
1375 
1376                     case GB_TIMES_opcode :
1377 
1378                         switch (zcode)
1379                         {
1380                             case GB_INT8_code  : return (GxB_TIMES_RDIV_INT8    ) ;
1381                             case GB_UINT8_code : return (GxB_TIMES_RDIV_UINT8   ) ;
1382                             case GB_INT16_code : return (GxB_TIMES_RDIV_INT16   ) ;
1383                             case GB_UINT16_code: return (GxB_TIMES_RDIV_UINT16  ) ;
1384                             case GB_INT32_code : return (GxB_TIMES_RDIV_INT32   ) ;
1385                             case GB_UINT32_code: return (GxB_TIMES_RDIV_UINT32  ) ;
1386                             case GB_INT64_code : return (GxB_TIMES_RDIV_INT64   ) ;
1387                             case GB_UINT64_code: return (GxB_TIMES_RDIV_UINT64  ) ;
1388                             case GB_FP32_code  : return (GxB_TIMES_RDIV_FP32    ) ;
1389                             case GB_FP64_code  : return (GxB_TIMES_RDIV_FP64    ) ;
1390                             default : ;
1391                         }
1392                         break ;
1393 
1394                     case GB_ANY_opcode :
1395 
1396                         switch (zcode)
1397                         {
1398                             case GB_INT8_code  : return (GxB_ANY_RDIV_INT8      ) ;
1399                             case GB_UINT8_code : return (GxB_ANY_RDIV_UINT8     ) ;
1400                             case GB_INT16_code : return (GxB_ANY_RDIV_INT16     ) ;
1401                             case GB_UINT16_code: return (GxB_ANY_RDIV_UINT16    ) ;
1402                             case GB_INT32_code : return (GxB_ANY_RDIV_INT32     ) ;
1403                             case GB_UINT32_code: return (GxB_ANY_RDIV_UINT32    ) ;
1404                             case GB_INT64_code : return (GxB_ANY_RDIV_INT64     ) ;
1405                             case GB_UINT64_code: return (GxB_ANY_RDIV_UINT64    ) ;
1406                             case GB_FP32_code  : return (GxB_ANY_RDIV_FP32      ) ;
1407                             case GB_FP64_code  : return (GxB_ANY_RDIV_FP64      ) ;
1408                             default : ;
1409                         }
1410                         break ;
1411 
1412                     default : ;
1413                 }
1414                 break ;
1415 
1416             case GB_ISEQ_opcode : // with (5 monoids) x (10 nonboolean types)
1417 
1418                 switch (add_opcode)
1419                 {
1420 
1421                     case GB_MIN_opcode :
1422 
1423                         switch (zcode)
1424                         {
1425                             case GB_INT8_code  : return (GxB_MIN_ISEQ_INT8      ) ;
1426                             case GB_UINT8_code : return (GxB_MIN_ISEQ_UINT8     ) ;
1427                             case GB_INT16_code : return (GxB_MIN_ISEQ_INT16     ) ;
1428                             case GB_UINT16_code: return (GxB_MIN_ISEQ_UINT16    ) ;
1429                             case GB_INT32_code : return (GxB_MIN_ISEQ_INT32     ) ;
1430                             case GB_UINT32_code: return (GxB_MIN_ISEQ_UINT32    ) ;
1431                             case GB_INT64_code : return (GxB_MIN_ISEQ_INT64     ) ;
1432                             case GB_UINT64_code: return (GxB_MIN_ISEQ_UINT64    ) ;
1433                             case GB_FP32_code  : return (GxB_MIN_ISEQ_FP32      ) ;
1434                             case GB_FP64_code  : return (GxB_MIN_ISEQ_FP64      ) ;
1435                             default : ;
1436                         }
1437                         break ;
1438 
1439                     case GB_MAX_opcode :
1440 
1441                         switch (zcode)
1442                         {
1443                             case GB_INT8_code  : return (GxB_MAX_ISEQ_INT8      ) ;
1444                             case GB_UINT8_code : return (GxB_MAX_ISEQ_UINT8     ) ;
1445                             case GB_INT16_code : return (GxB_MAX_ISEQ_INT16     ) ;
1446                             case GB_UINT16_code: return (GxB_MAX_ISEQ_UINT16    ) ;
1447                             case GB_INT32_code : return (GxB_MAX_ISEQ_INT32     ) ;
1448                             case GB_UINT32_code: return (GxB_MAX_ISEQ_UINT32    ) ;
1449                             case GB_INT64_code : return (GxB_MAX_ISEQ_INT64     ) ;
1450                             case GB_UINT64_code: return (GxB_MAX_ISEQ_UINT64    ) ;
1451                             case GB_FP32_code  : return (GxB_MAX_ISEQ_FP32      ) ;
1452                             case GB_FP64_code  : return (GxB_MAX_ISEQ_FP64      ) ;
1453                             default : ;
1454                         }
1455                         break ;
1456 
1457                     case GB_PLUS_opcode :
1458 
1459                         switch (zcode)
1460                         {
1461                             case GB_INT8_code  : return (GxB_PLUS_ISEQ_INT8     ) ;
1462                             case GB_UINT8_code : return (GxB_PLUS_ISEQ_UINT8    ) ;
1463                             case GB_INT16_code : return (GxB_PLUS_ISEQ_INT16    ) ;
1464                             case GB_UINT16_code: return (GxB_PLUS_ISEQ_UINT16   ) ;
1465                             case GB_INT32_code : return (GxB_PLUS_ISEQ_INT32    ) ;
1466                             case GB_UINT32_code: return (GxB_PLUS_ISEQ_UINT32   ) ;
1467                             case GB_INT64_code : return (GxB_PLUS_ISEQ_INT64    ) ;
1468                             case GB_UINT64_code: return (GxB_PLUS_ISEQ_UINT64   ) ;
1469                             case GB_FP32_code  : return (GxB_PLUS_ISEQ_FP32     ) ;
1470                             case GB_FP64_code  : return (GxB_PLUS_ISEQ_FP64     ) ;
1471                             default : ;
1472                         }
1473                         break ;
1474 
1475                     case GB_TIMES_opcode :
1476 
1477                         switch (zcode)
1478                         {
1479                             case GB_INT8_code  : return (GxB_TIMES_ISEQ_INT8    ) ;
1480                             case GB_UINT8_code : return (GxB_TIMES_ISEQ_UINT8   ) ;
1481                             case GB_INT16_code : return (GxB_TIMES_ISEQ_INT16   ) ;
1482                             case GB_UINT16_code: return (GxB_TIMES_ISEQ_UINT16  ) ;
1483                             case GB_INT32_code : return (GxB_TIMES_ISEQ_INT32   ) ;
1484                             case GB_UINT32_code: return (GxB_TIMES_ISEQ_UINT32  ) ;
1485                             case GB_INT64_code : return (GxB_TIMES_ISEQ_INT64   ) ;
1486                             case GB_UINT64_code: return (GxB_TIMES_ISEQ_UINT64  ) ;
1487                             case GB_FP32_code  : return (GxB_TIMES_ISEQ_FP32    ) ;
1488                             case GB_FP64_code  : return (GxB_TIMES_ISEQ_FP64    ) ;
1489                             default : ;
1490                         }
1491                         break ;
1492 
1493                     case GB_ANY_opcode :
1494 
1495                         switch (zcode)
1496                         {
1497                             case GB_INT8_code  : return (GxB_ANY_ISEQ_INT8      ) ;
1498                             case GB_UINT8_code : return (GxB_ANY_ISEQ_UINT8     ) ;
1499                             case GB_INT16_code : return (GxB_ANY_ISEQ_INT16     ) ;
1500                             case GB_UINT16_code: return (GxB_ANY_ISEQ_UINT16    ) ;
1501                             case GB_INT32_code : return (GxB_ANY_ISEQ_INT32     ) ;
1502                             case GB_UINT32_code: return (GxB_ANY_ISEQ_UINT32    ) ;
1503                             case GB_INT64_code : return (GxB_ANY_ISEQ_INT64     ) ;
1504                             case GB_UINT64_code: return (GxB_ANY_ISEQ_UINT64    ) ;
1505                             case GB_FP32_code  : return (GxB_ANY_ISEQ_FP32      ) ;
1506                             case GB_FP64_code  : return (GxB_ANY_ISEQ_FP64      ) ;
1507                             default : ;
1508                         }
1509                         break ;
1510 
1511                     default : ;
1512                 }
1513                 break ;
1514 
1515             case GB_ISNE_opcode : // with (5 monoids) x (10 nonboolean types)
1516 
1517                 switch (add_opcode)
1518                 {
1519 
1520                     case GB_MIN_opcode :
1521 
1522                         switch (zcode)
1523                         {
1524                             case GB_INT8_code  : return (GxB_MIN_ISNE_INT8      ) ;
1525                             case GB_UINT8_code : return (GxB_MIN_ISNE_UINT8     ) ;
1526                             case GB_INT16_code : return (GxB_MIN_ISNE_INT16     ) ;
1527                             case GB_UINT16_code: return (GxB_MIN_ISNE_UINT16    ) ;
1528                             case GB_INT32_code : return (GxB_MIN_ISNE_INT32     ) ;
1529                             case GB_UINT32_code: return (GxB_MIN_ISNE_UINT32    ) ;
1530                             case GB_INT64_code : return (GxB_MIN_ISNE_INT64     ) ;
1531                             case GB_UINT64_code: return (GxB_MIN_ISNE_UINT64    ) ;
1532                             case GB_FP32_code  : return (GxB_MIN_ISNE_FP32      ) ;
1533                             case GB_FP64_code  : return (GxB_MIN_ISNE_FP64      ) ;
1534                             default : ;
1535                         }
1536                         break ;
1537 
1538                     case GB_MAX_opcode :
1539 
1540                         switch (zcode)
1541                         {
1542                             case GB_INT8_code  : return (GxB_MAX_ISNE_INT8      ) ;
1543                             case GB_UINT8_code : return (GxB_MAX_ISNE_UINT8     ) ;
1544                             case GB_INT16_code : return (GxB_MAX_ISNE_INT16     ) ;
1545                             case GB_UINT16_code: return (GxB_MAX_ISNE_UINT16    ) ;
1546                             case GB_INT32_code : return (GxB_MAX_ISNE_INT32     ) ;
1547                             case GB_UINT32_code: return (GxB_MAX_ISNE_UINT32    ) ;
1548                             case GB_INT64_code : return (GxB_MAX_ISNE_INT64     ) ;
1549                             case GB_UINT64_code: return (GxB_MAX_ISNE_UINT64    ) ;
1550                             case GB_FP32_code  : return (GxB_MAX_ISNE_FP32      ) ;
1551                             case GB_FP64_code  : return (GxB_MAX_ISNE_FP64      ) ;
1552                             default : ;
1553                         }
1554                         break ;
1555 
1556                     case GB_PLUS_opcode :
1557 
1558                         switch (zcode)
1559                         {
1560                             case GB_INT8_code  : return (GxB_PLUS_ISNE_INT8     ) ;
1561                             case GB_UINT8_code : return (GxB_PLUS_ISNE_UINT8    ) ;
1562                             case GB_INT16_code : return (GxB_PLUS_ISNE_INT16    ) ;
1563                             case GB_UINT16_code: return (GxB_PLUS_ISNE_UINT16   ) ;
1564                             case GB_INT32_code : return (GxB_PLUS_ISNE_INT32    ) ;
1565                             case GB_UINT32_code: return (GxB_PLUS_ISNE_UINT32   ) ;
1566                             case GB_INT64_code : return (GxB_PLUS_ISNE_INT64    ) ;
1567                             case GB_UINT64_code: return (GxB_PLUS_ISNE_UINT64   ) ;
1568                             case GB_FP32_code  : return (GxB_PLUS_ISNE_FP32     ) ;
1569                             case GB_FP64_code  : return (GxB_PLUS_ISNE_FP64     ) ;
1570                             default : ;
1571                         }
1572                         break ;
1573 
1574                     case GB_TIMES_opcode :
1575 
1576                         switch (zcode)
1577                         {
1578                             case GB_INT8_code  : return (GxB_TIMES_ISNE_INT8    ) ;
1579                             case GB_UINT8_code : return (GxB_TIMES_ISNE_UINT8   ) ;
1580                             case GB_INT16_code : return (GxB_TIMES_ISNE_INT16   ) ;
1581                             case GB_UINT16_code: return (GxB_TIMES_ISNE_UINT16  ) ;
1582                             case GB_INT32_code : return (GxB_TIMES_ISNE_INT32   ) ;
1583                             case GB_UINT32_code: return (GxB_TIMES_ISNE_UINT32  ) ;
1584                             case GB_INT64_code : return (GxB_TIMES_ISNE_INT64   ) ;
1585                             case GB_UINT64_code: return (GxB_TIMES_ISNE_UINT64  ) ;
1586                             case GB_FP32_code  : return (GxB_TIMES_ISNE_FP32    ) ;
1587                             case GB_FP64_code  : return (GxB_TIMES_ISNE_FP64    ) ;
1588                             default : ;
1589                         }
1590                         break ;
1591 
1592                     case GB_ANY_opcode :
1593 
1594                         switch (zcode)
1595                         {
1596                             case GB_INT8_code  : return (GxB_ANY_ISNE_INT8      ) ;
1597                             case GB_UINT8_code : return (GxB_ANY_ISNE_UINT8     ) ;
1598                             case GB_INT16_code : return (GxB_ANY_ISNE_INT16     ) ;
1599                             case GB_UINT16_code: return (GxB_ANY_ISNE_UINT16    ) ;
1600                             case GB_INT32_code : return (GxB_ANY_ISNE_INT32     ) ;
1601                             case GB_UINT32_code: return (GxB_ANY_ISNE_UINT32    ) ;
1602                             case GB_INT64_code : return (GxB_ANY_ISNE_INT64     ) ;
1603                             case GB_UINT64_code: return (GxB_ANY_ISNE_UINT64    ) ;
1604                             case GB_FP32_code  : return (GxB_ANY_ISNE_FP32      ) ;
1605                             case GB_FP64_code  : return (GxB_ANY_ISNE_FP64      ) ;
1606                             default : ;
1607                         }
1608                         break ;
1609 
1610                     default : ;
1611                 }
1612                 break ;
1613 
1614             case GB_ISGT_opcode : // with (5 monoids) x (10 nonboolean types)
1615 
1616                 switch (add_opcode)
1617                 {
1618 
1619                     case GB_MIN_opcode :
1620 
1621                         switch (zcode)
1622                         {
1623                             case GB_INT8_code  : return (GxB_MIN_ISGT_INT8      ) ;
1624                             case GB_UINT8_code : return (GxB_MIN_ISGT_UINT8     ) ;
1625                             case GB_INT16_code : return (GxB_MIN_ISGT_INT16     ) ;
1626                             case GB_UINT16_code: return (GxB_MIN_ISGT_UINT16    ) ;
1627                             case GB_INT32_code : return (GxB_MIN_ISGT_INT32     ) ;
1628                             case GB_UINT32_code: return (GxB_MIN_ISGT_UINT32    ) ;
1629                             case GB_INT64_code : return (GxB_MIN_ISGT_INT64     ) ;
1630                             case GB_UINT64_code: return (GxB_MIN_ISGT_UINT64    ) ;
1631                             case GB_FP32_code  : return (GxB_MIN_ISGT_FP32      ) ;
1632                             case GB_FP64_code  : return (GxB_MIN_ISGT_FP64      ) ;
1633                             default : ;
1634                         }
1635                         break ;
1636 
1637                     case GB_MAX_opcode :
1638 
1639                         switch (zcode)
1640                         {
1641                             case GB_INT8_code  : return (GxB_MAX_ISGT_INT8      ) ;
1642                             case GB_UINT8_code : return (GxB_MAX_ISGT_UINT8     ) ;
1643                             case GB_INT16_code : return (GxB_MAX_ISGT_INT16     ) ;
1644                             case GB_UINT16_code: return (GxB_MAX_ISGT_UINT16    ) ;
1645                             case GB_INT32_code : return (GxB_MAX_ISGT_INT32     ) ;
1646                             case GB_UINT32_code: return (GxB_MAX_ISGT_UINT32    ) ;
1647                             case GB_INT64_code : return (GxB_MAX_ISGT_INT64     ) ;
1648                             case GB_UINT64_code: return (GxB_MAX_ISGT_UINT64    ) ;
1649                             case GB_FP32_code  : return (GxB_MAX_ISGT_FP32      ) ;
1650                             case GB_FP64_code  : return (GxB_MAX_ISGT_FP64      ) ;
1651                             default : ;
1652                         }
1653                         break ;
1654 
1655                     case GB_PLUS_opcode :
1656 
1657                         switch (zcode)
1658                         {
1659                             case GB_INT8_code  : return (GxB_PLUS_ISGT_INT8     ) ;
1660                             case GB_UINT8_code : return (GxB_PLUS_ISGT_UINT8    ) ;
1661                             case GB_INT16_code : return (GxB_PLUS_ISGT_INT16    ) ;
1662                             case GB_UINT16_code: return (GxB_PLUS_ISGT_UINT16   ) ;
1663                             case GB_INT32_code : return (GxB_PLUS_ISGT_INT32    ) ;
1664                             case GB_UINT32_code: return (GxB_PLUS_ISGT_UINT32   ) ;
1665                             case GB_INT64_code : return (GxB_PLUS_ISGT_INT64    ) ;
1666                             case GB_UINT64_code: return (GxB_PLUS_ISGT_UINT64   ) ;
1667                             case GB_FP32_code  : return (GxB_PLUS_ISGT_FP32     ) ;
1668                             case GB_FP64_code  : return (GxB_PLUS_ISGT_FP64     ) ;
1669                             default : ;
1670                         }
1671                         break ;
1672 
1673                     case GB_TIMES_opcode :
1674 
1675                         switch (zcode)
1676                         {
1677                             case GB_INT8_code  : return (GxB_TIMES_ISGT_INT8    ) ;
1678                             case GB_UINT8_code : return (GxB_TIMES_ISGT_UINT8   ) ;
1679                             case GB_INT16_code : return (GxB_TIMES_ISGT_INT16   ) ;
1680                             case GB_UINT16_code: return (GxB_TIMES_ISGT_UINT16  ) ;
1681                             case GB_INT32_code : return (GxB_TIMES_ISGT_INT32   ) ;
1682                             case GB_UINT32_code: return (GxB_TIMES_ISGT_UINT32  ) ;
1683                             case GB_INT64_code : return (GxB_TIMES_ISGT_INT64   ) ;
1684                             case GB_UINT64_code: return (GxB_TIMES_ISGT_UINT64  ) ;
1685                             case GB_FP32_code  : return (GxB_TIMES_ISGT_FP32    ) ;
1686                             case GB_FP64_code  : return (GxB_TIMES_ISGT_FP64    ) ;
1687                             default : ;
1688                         }
1689                         break ;
1690 
1691                     case GB_ANY_opcode :
1692 
1693                         switch (zcode)
1694                         {
1695                             case GB_INT8_code  : return (GxB_ANY_ISGT_INT8      ) ;
1696                             case GB_UINT8_code : return (GxB_ANY_ISGT_UINT8     ) ;
1697                             case GB_INT16_code : return (GxB_ANY_ISGT_INT16     ) ;
1698                             case GB_UINT16_code: return (GxB_ANY_ISGT_UINT16    ) ;
1699                             case GB_INT32_code : return (GxB_ANY_ISGT_INT32     ) ;
1700                             case GB_UINT32_code: return (GxB_ANY_ISGT_UINT32    ) ;
1701                             case GB_INT64_code : return (GxB_ANY_ISGT_INT64     ) ;
1702                             case GB_UINT64_code: return (GxB_ANY_ISGT_UINT64    ) ;
1703                             case GB_FP32_code  : return (GxB_ANY_ISGT_FP32      ) ;
1704                             case GB_FP64_code  : return (GxB_ANY_ISGT_FP64      ) ;
1705                             default : ;
1706                         }
1707                         break ;
1708 
1709                     default : ;
1710                 }
1711                 break ;
1712 
1713             case GB_ISLT_opcode : // with (5 monoids) x (10 nonboolean types)
1714 
1715                 switch (add_opcode)
1716                 {
1717 
1718                     case GB_MIN_opcode :
1719 
1720                         switch (zcode)
1721                         {
1722                             case GB_INT8_code  : return (GxB_MIN_ISLT_INT8      ) ;
1723                             case GB_UINT8_code : return (GxB_MIN_ISLT_UINT8     ) ;
1724                             case GB_INT16_code : return (GxB_MIN_ISLT_INT16     ) ;
1725                             case GB_UINT16_code: return (GxB_MIN_ISLT_UINT16    ) ;
1726                             case GB_INT32_code : return (GxB_MIN_ISLT_INT32     ) ;
1727                             case GB_UINT32_code: return (GxB_MIN_ISLT_UINT32    ) ;
1728                             case GB_INT64_code : return (GxB_MIN_ISLT_INT64     ) ;
1729                             case GB_UINT64_code: return (GxB_MIN_ISLT_UINT64    ) ;
1730                             case GB_FP32_code  : return (GxB_MIN_ISLT_FP32      ) ;
1731                             case GB_FP64_code  : return (GxB_MIN_ISLT_FP64      ) ;
1732                             default : ;
1733                         }
1734                         break ;
1735 
1736                     case GB_MAX_opcode :
1737 
1738                         switch (zcode)
1739                         {
1740                             case GB_INT8_code  : return (GxB_MAX_ISLT_INT8      ) ;
1741                             case GB_UINT8_code : return (GxB_MAX_ISLT_UINT8     ) ;
1742                             case GB_INT16_code : return (GxB_MAX_ISLT_INT16     ) ;
1743                             case GB_UINT16_code: return (GxB_MAX_ISLT_UINT16    ) ;
1744                             case GB_INT32_code : return (GxB_MAX_ISLT_INT32     ) ;
1745                             case GB_UINT32_code: return (GxB_MAX_ISLT_UINT32    ) ;
1746                             case GB_INT64_code : return (GxB_MAX_ISLT_INT64     ) ;
1747                             case GB_UINT64_code: return (GxB_MAX_ISLT_UINT64    ) ;
1748                             case GB_FP32_code  : return (GxB_MAX_ISLT_FP32      ) ;
1749                             case GB_FP64_code  : return (GxB_MAX_ISLT_FP64      ) ;
1750                             default : ;
1751                         }
1752                         break ;
1753 
1754                     case GB_PLUS_opcode :
1755 
1756                         switch (zcode)
1757                         {
1758                             case GB_INT8_code  : return (GxB_PLUS_ISLT_INT8     ) ;
1759                             case GB_UINT8_code : return (GxB_PLUS_ISLT_UINT8    ) ;
1760                             case GB_INT16_code : return (GxB_PLUS_ISLT_INT16    ) ;
1761                             case GB_UINT16_code: return (GxB_PLUS_ISLT_UINT16   ) ;
1762                             case GB_INT32_code : return (GxB_PLUS_ISLT_INT32    ) ;
1763                             case GB_UINT32_code: return (GxB_PLUS_ISLT_UINT32   ) ;
1764                             case GB_INT64_code : return (GxB_PLUS_ISLT_INT64    ) ;
1765                             case GB_UINT64_code: return (GxB_PLUS_ISLT_UINT64   ) ;
1766                             case GB_FP32_code  : return (GxB_PLUS_ISLT_FP32     ) ;
1767                             case GB_FP64_code  : return (GxB_PLUS_ISLT_FP64     ) ;
1768                             default : ;
1769                         }
1770                         break ;
1771 
1772                     case GB_TIMES_opcode :
1773 
1774                         switch (zcode)
1775                         {
1776                             case GB_INT8_code  : return (GxB_TIMES_ISLT_INT8    ) ;
1777                             case GB_UINT8_code : return (GxB_TIMES_ISLT_UINT8   ) ;
1778                             case GB_INT16_code : return (GxB_TIMES_ISLT_INT16   ) ;
1779                             case GB_UINT16_code: return (GxB_TIMES_ISLT_UINT16  ) ;
1780                             case GB_INT32_code : return (GxB_TIMES_ISLT_INT32   ) ;
1781                             case GB_UINT32_code: return (GxB_TIMES_ISLT_UINT32  ) ;
1782                             case GB_INT64_code : return (GxB_TIMES_ISLT_INT64   ) ;
1783                             case GB_UINT64_code: return (GxB_TIMES_ISLT_UINT64  ) ;
1784                             case GB_FP32_code  : return (GxB_TIMES_ISLT_FP32    ) ;
1785                             case GB_FP64_code  : return (GxB_TIMES_ISLT_FP64    ) ;
1786                             default : ;
1787                         }
1788                         break ;
1789 
1790                     case GB_ANY_opcode :
1791 
1792                         switch (zcode)
1793                         {
1794                             case GB_INT8_code  : return (GxB_ANY_ISLT_INT8      ) ;
1795                             case GB_UINT8_code : return (GxB_ANY_ISLT_UINT8     ) ;
1796                             case GB_INT16_code : return (GxB_ANY_ISLT_INT16     ) ;
1797                             case GB_UINT16_code: return (GxB_ANY_ISLT_UINT16    ) ;
1798                             case GB_INT32_code : return (GxB_ANY_ISLT_INT32     ) ;
1799                             case GB_UINT32_code: return (GxB_ANY_ISLT_UINT32    ) ;
1800                             case GB_INT64_code : return (GxB_ANY_ISLT_INT64     ) ;
1801                             case GB_UINT64_code: return (GxB_ANY_ISLT_UINT64    ) ;
1802                             case GB_FP32_code  : return (GxB_ANY_ISLT_FP32      ) ;
1803                             case GB_FP64_code  : return (GxB_ANY_ISLT_FP64      ) ;
1804                             default : ;
1805                         }
1806                         break ;
1807 
1808                     default : ;
1809                 }
1810                 break ;
1811 
1812             case GB_ISGE_opcode : // with (5 monoids) x (10 nonboolean types)
1813 
1814                 switch (add_opcode)
1815                 {
1816 
1817                     case GB_MIN_opcode :
1818 
1819                         switch (zcode)
1820                         {
1821                             case GB_INT8_code  : return (GxB_MIN_ISGE_INT8      ) ;
1822                             case GB_UINT8_code : return (GxB_MIN_ISGE_UINT8     ) ;
1823                             case GB_INT16_code : return (GxB_MIN_ISGE_INT16     ) ;
1824                             case GB_UINT16_code: return (GxB_MIN_ISGE_UINT16    ) ;
1825                             case GB_INT32_code : return (GxB_MIN_ISGE_INT32     ) ;
1826                             case GB_UINT32_code: return (GxB_MIN_ISGE_UINT32    ) ;
1827                             case GB_INT64_code : return (GxB_MIN_ISGE_INT64     ) ;
1828                             case GB_UINT64_code: return (GxB_MIN_ISGE_UINT64    ) ;
1829                             case GB_FP32_code  : return (GxB_MIN_ISGE_FP32      ) ;
1830                             case GB_FP64_code  : return (GxB_MIN_ISGE_FP64      ) ;
1831                             default : ;
1832                         }
1833                         break ;
1834 
1835                     case GB_MAX_opcode :
1836 
1837                         switch (zcode)
1838                         {
1839                             case GB_INT8_code  : return (GxB_MAX_ISGE_INT8      ) ;
1840                             case GB_UINT8_code : return (GxB_MAX_ISGE_UINT8     ) ;
1841                             case GB_INT16_code : return (GxB_MAX_ISGE_INT16     ) ;
1842                             case GB_UINT16_code: return (GxB_MAX_ISGE_UINT16    ) ;
1843                             case GB_INT32_code : return (GxB_MAX_ISGE_INT32     ) ;
1844                             case GB_UINT32_code: return (GxB_MAX_ISGE_UINT32    ) ;
1845                             case GB_INT64_code : return (GxB_MAX_ISGE_INT64     ) ;
1846                             case GB_UINT64_code: return (GxB_MAX_ISGE_UINT64    ) ;
1847                             case GB_FP32_code  : return (GxB_MAX_ISGE_FP32      ) ;
1848                             case GB_FP64_code  : return (GxB_MAX_ISGE_FP64      ) ;
1849                             default : ;
1850                         }
1851                         break ;
1852 
1853                     case GB_PLUS_opcode :
1854 
1855                         switch (zcode)
1856                         {
1857                             case GB_INT8_code  : return (GxB_PLUS_ISGE_INT8     ) ;
1858                             case GB_UINT8_code : return (GxB_PLUS_ISGE_UINT8    ) ;
1859                             case GB_INT16_code : return (GxB_PLUS_ISGE_INT16    ) ;
1860                             case GB_UINT16_code: return (GxB_PLUS_ISGE_UINT16   ) ;
1861                             case GB_INT32_code : return (GxB_PLUS_ISGE_INT32    ) ;
1862                             case GB_UINT32_code: return (GxB_PLUS_ISGE_UINT32   ) ;
1863                             case GB_INT64_code : return (GxB_PLUS_ISGE_INT64    ) ;
1864                             case GB_UINT64_code: return (GxB_PLUS_ISGE_UINT64   ) ;
1865                             case GB_FP32_code  : return (GxB_PLUS_ISGE_FP32     ) ;
1866                             case GB_FP64_code  : return (GxB_PLUS_ISGE_FP64     ) ;
1867                             default : ;
1868                         }
1869                         break ;
1870 
1871                     case GB_TIMES_opcode :
1872 
1873                         switch (zcode)
1874                         {
1875                             case GB_INT8_code  : return (GxB_TIMES_ISGE_INT8    ) ;
1876                             case GB_UINT8_code : return (GxB_TIMES_ISGE_UINT8   ) ;
1877                             case GB_INT16_code : return (GxB_TIMES_ISGE_INT16   ) ;
1878                             case GB_UINT16_code: return (GxB_TIMES_ISGE_UINT16  ) ;
1879                             case GB_INT32_code : return (GxB_TIMES_ISGE_INT32   ) ;
1880                             case GB_UINT32_code: return (GxB_TIMES_ISGE_UINT32  ) ;
1881                             case GB_INT64_code : return (GxB_TIMES_ISGE_INT64   ) ;
1882                             case GB_UINT64_code: return (GxB_TIMES_ISGE_UINT64  ) ;
1883                             case GB_FP32_code  : return (GxB_TIMES_ISGE_FP32    ) ;
1884                             case GB_FP64_code  : return (GxB_TIMES_ISGE_FP64    ) ;
1885                             default : ;
1886                         }
1887                         break ;
1888 
1889                     case GB_ANY_opcode :
1890 
1891                         switch (zcode)
1892                         {
1893                             case GB_INT8_code  : return (GxB_ANY_ISGE_INT8      ) ;
1894                             case GB_UINT8_code : return (GxB_ANY_ISGE_UINT8     ) ;
1895                             case GB_INT16_code : return (GxB_ANY_ISGE_INT16     ) ;
1896                             case GB_UINT16_code: return (GxB_ANY_ISGE_UINT16    ) ;
1897                             case GB_INT32_code : return (GxB_ANY_ISGE_INT32     ) ;
1898                             case GB_UINT32_code: return (GxB_ANY_ISGE_UINT32    ) ;
1899                             case GB_INT64_code : return (GxB_ANY_ISGE_INT64     ) ;
1900                             case GB_UINT64_code: return (GxB_ANY_ISGE_UINT64    ) ;
1901                             case GB_FP32_code  : return (GxB_ANY_ISGE_FP32      ) ;
1902                             case GB_FP64_code  : return (GxB_ANY_ISGE_FP64      ) ;
1903                             default : ;
1904                         }
1905                         break ;
1906 
1907                     default : ;
1908                 }
1909                 break ;
1910 
1911             case GB_ISLE_opcode : // with (5 monoids) x (10 nonboolean types)
1912 
1913                 switch (add_opcode)
1914                 {
1915 
1916                     case GB_MIN_opcode :
1917 
1918                         switch (zcode)
1919                         {
1920                             case GB_INT8_code  : return (GxB_MIN_ISLE_INT8      ) ;
1921                             case GB_UINT8_code : return (GxB_MIN_ISLE_UINT8     ) ;
1922                             case GB_INT16_code : return (GxB_MIN_ISLE_INT16     ) ;
1923                             case GB_UINT16_code: return (GxB_MIN_ISLE_UINT16    ) ;
1924                             case GB_INT32_code : return (GxB_MIN_ISLE_INT32     ) ;
1925                             case GB_UINT32_code: return (GxB_MIN_ISLE_UINT32    ) ;
1926                             case GB_INT64_code : return (GxB_MIN_ISLE_INT64     ) ;
1927                             case GB_UINT64_code: return (GxB_MIN_ISLE_UINT64    ) ;
1928                             case GB_FP32_code  : return (GxB_MIN_ISLE_FP32      ) ;
1929                             case GB_FP64_code  : return (GxB_MIN_ISLE_FP64      ) ;
1930                             default : ;
1931                         }
1932                         break ;
1933 
1934                     case GB_MAX_opcode :
1935 
1936                         switch (zcode)
1937                         {
1938                             case GB_INT8_code  : return (GxB_MAX_ISLE_INT8      ) ;
1939                             case GB_UINT8_code : return (GxB_MAX_ISLE_UINT8     ) ;
1940                             case GB_INT16_code : return (GxB_MAX_ISLE_INT16     ) ;
1941                             case GB_UINT16_code: return (GxB_MAX_ISLE_UINT16    ) ;
1942                             case GB_INT32_code : return (GxB_MAX_ISLE_INT32     ) ;
1943                             case GB_UINT32_code: return (GxB_MAX_ISLE_UINT32    ) ;
1944                             case GB_INT64_code : return (GxB_MAX_ISLE_INT64     ) ;
1945                             case GB_UINT64_code: return (GxB_MAX_ISLE_UINT64    ) ;
1946                             case GB_FP32_code  : return (GxB_MAX_ISLE_FP32      ) ;
1947                             case GB_FP64_code  : return (GxB_MAX_ISLE_FP64      ) ;
1948                             default : ;
1949                         }
1950                         break ;
1951 
1952                     case GB_PLUS_opcode :
1953 
1954                         switch (zcode)
1955                         {
1956                             case GB_INT8_code  : return (GxB_PLUS_ISLE_INT8     ) ;
1957                             case GB_UINT8_code : return (GxB_PLUS_ISLE_UINT8    ) ;
1958                             case GB_INT16_code : return (GxB_PLUS_ISLE_INT16    ) ;
1959                             case GB_UINT16_code: return (GxB_PLUS_ISLE_UINT16   ) ;
1960                             case GB_INT32_code : return (GxB_PLUS_ISLE_INT32    ) ;
1961                             case GB_UINT32_code: return (GxB_PLUS_ISLE_UINT32   ) ;
1962                             case GB_INT64_code : return (GxB_PLUS_ISLE_INT64    ) ;
1963                             case GB_UINT64_code: return (GxB_PLUS_ISLE_UINT64   ) ;
1964                             case GB_FP32_code  : return (GxB_PLUS_ISLE_FP32     ) ;
1965                             case GB_FP64_code  : return (GxB_PLUS_ISLE_FP64     ) ;
1966                             default : ;
1967                         }
1968                         break ;
1969 
1970                     case GB_TIMES_opcode :
1971 
1972                         switch (zcode)
1973                         {
1974                             case GB_INT8_code  : return (GxB_TIMES_ISLE_INT8    ) ;
1975                             case GB_UINT8_code : return (GxB_TIMES_ISLE_UINT8   ) ;
1976                             case GB_INT16_code : return (GxB_TIMES_ISLE_INT16   ) ;
1977                             case GB_UINT16_code: return (GxB_TIMES_ISLE_UINT16  ) ;
1978                             case GB_INT32_code : return (GxB_TIMES_ISLE_INT32   ) ;
1979                             case GB_UINT32_code: return (GxB_TIMES_ISLE_UINT32  ) ;
1980                             case GB_INT64_code : return (GxB_TIMES_ISLE_INT64   ) ;
1981                             case GB_UINT64_code: return (GxB_TIMES_ISLE_UINT64  ) ;
1982                             case GB_FP32_code  : return (GxB_TIMES_ISLE_FP32    ) ;
1983                             case GB_FP64_code  : return (GxB_TIMES_ISLE_FP64    ) ;
1984                             default : ;
1985                         }
1986                         break ;
1987 
1988                     case GB_ANY_opcode :
1989 
1990                         switch (zcode)
1991                         {
1992                             case GB_INT8_code  : return (GxB_ANY_ISLE_INT8      ) ;
1993                             case GB_UINT8_code : return (GxB_ANY_ISLE_UINT8     ) ;
1994                             case GB_INT16_code : return (GxB_ANY_ISLE_INT16     ) ;
1995                             case GB_UINT16_code: return (GxB_ANY_ISLE_UINT16    ) ;
1996                             case GB_INT32_code : return (GxB_ANY_ISLE_INT32     ) ;
1997                             case GB_UINT32_code: return (GxB_ANY_ISLE_UINT32    ) ;
1998                             case GB_INT64_code : return (GxB_ANY_ISLE_INT64     ) ;
1999                             case GB_UINT64_code: return (GxB_ANY_ISLE_UINT64    ) ;
2000                             case GB_FP32_code  : return (GxB_ANY_ISLE_FP32      ) ;
2001                             case GB_FP64_code  : return (GxB_ANY_ISLE_FP64      ) ;
2002                             default : ;
2003                         }
2004                         break ;
2005 
2006                     default : ;
2007                 }
2008                 break ;
2009 
2010             case GB_LOR_opcode : // with (5 monoids) x (10 nonboolean types)
2011 
2012                 switch (add_opcode)
2013                 {
2014 
2015                     case GB_MIN_opcode :
2016 
2017                         switch (zcode)
2018                         {
2019                             case GB_INT8_code  : return (GxB_MIN_LOR_INT8       ) ;
2020                             case GB_UINT8_code : return (GxB_MIN_LOR_UINT8      ) ;
2021                             case GB_INT16_code : return (GxB_MIN_LOR_INT16      ) ;
2022                             case GB_UINT16_code: return (GxB_MIN_LOR_UINT16     ) ;
2023                             case GB_INT32_code : return (GxB_MIN_LOR_INT32      ) ;
2024                             case GB_UINT32_code: return (GxB_MIN_LOR_UINT32     ) ;
2025                             case GB_INT64_code : return (GxB_MIN_LOR_INT64      ) ;
2026                             case GB_UINT64_code: return (GxB_MIN_LOR_UINT64     ) ;
2027                             case GB_FP32_code  : return (GxB_MIN_LOR_FP32       ) ;
2028                             case GB_FP64_code  : return (GxB_MIN_LOR_FP64       ) ;
2029                             default : ;
2030                         }
2031                         break ;
2032 
2033                     case GB_MAX_opcode :
2034 
2035                         switch (zcode)
2036                         {
2037                             case GB_INT8_code  : return (GxB_MAX_LOR_INT8       ) ;
2038                             case GB_UINT8_code : return (GxB_MAX_LOR_UINT8      ) ;
2039                             case GB_INT16_code : return (GxB_MAX_LOR_INT16      ) ;
2040                             case GB_UINT16_code: return (GxB_MAX_LOR_UINT16     ) ;
2041                             case GB_INT32_code : return (GxB_MAX_LOR_INT32      ) ;
2042                             case GB_UINT32_code: return (GxB_MAX_LOR_UINT32     ) ;
2043                             case GB_INT64_code : return (GxB_MAX_LOR_INT64      ) ;
2044                             case GB_UINT64_code: return (GxB_MAX_LOR_UINT64     ) ;
2045                             case GB_FP32_code  : return (GxB_MAX_LOR_FP32       ) ;
2046                             case GB_FP64_code  : return (GxB_MAX_LOR_FP64       ) ;
2047                             default : ;
2048                         }
2049                         break ;
2050 
2051                     case GB_PLUS_opcode :
2052 
2053                         switch (zcode)
2054                         {
2055                             case GB_INT8_code  : return (GxB_PLUS_LOR_INT8      ) ;
2056                             case GB_UINT8_code : return (GxB_PLUS_LOR_UINT8     ) ;
2057                             case GB_INT16_code : return (GxB_PLUS_LOR_INT16     ) ;
2058                             case GB_UINT16_code: return (GxB_PLUS_LOR_UINT16    ) ;
2059                             case GB_INT32_code : return (GxB_PLUS_LOR_INT32     ) ;
2060                             case GB_UINT32_code: return (GxB_PLUS_LOR_UINT32    ) ;
2061                             case GB_INT64_code : return (GxB_PLUS_LOR_INT64     ) ;
2062                             case GB_UINT64_code: return (GxB_PLUS_LOR_UINT64    ) ;
2063                             case GB_FP32_code  : return (GxB_PLUS_LOR_FP32      ) ;
2064                             case GB_FP64_code  : return (GxB_PLUS_LOR_FP64      ) ;
2065                             default : ;
2066                         }
2067                         break ;
2068 
2069                     case GB_TIMES_opcode :
2070 
2071                         switch (zcode)
2072                         {
2073                             case GB_INT8_code  : return (GxB_TIMES_LOR_INT8     ) ;
2074                             case GB_UINT8_code : return (GxB_TIMES_LOR_UINT8    ) ;
2075                             case GB_INT16_code : return (GxB_TIMES_LOR_INT16    ) ;
2076                             case GB_UINT16_code: return (GxB_TIMES_LOR_UINT16   ) ;
2077                             case GB_INT32_code : return (GxB_TIMES_LOR_INT32    ) ;
2078                             case GB_UINT32_code: return (GxB_TIMES_LOR_UINT32   ) ;
2079                             case GB_INT64_code : return (GxB_TIMES_LOR_INT64    ) ;
2080                             case GB_UINT64_code: return (GxB_TIMES_LOR_UINT64   ) ;
2081                             case GB_FP32_code  : return (GxB_TIMES_LOR_FP32     ) ;
2082                             case GB_FP64_code  : return (GxB_TIMES_LOR_FP64     ) ;
2083                             default : ;
2084                         }
2085                         break ;
2086 
2087                     case GB_ANY_opcode :
2088 
2089                         switch (zcode)
2090                         {
2091                             case GB_INT8_code  : return (GxB_ANY_LOR_INT8       ) ;
2092                             case GB_UINT8_code : return (GxB_ANY_LOR_UINT8      ) ;
2093                             case GB_INT16_code : return (GxB_ANY_LOR_INT16      ) ;
2094                             case GB_UINT16_code: return (GxB_ANY_LOR_UINT16     ) ;
2095                             case GB_INT32_code : return (GxB_ANY_LOR_INT32      ) ;
2096                             case GB_UINT32_code: return (GxB_ANY_LOR_UINT32     ) ;
2097                             case GB_INT64_code : return (GxB_ANY_LOR_INT64      ) ;
2098                             case GB_UINT64_code: return (GxB_ANY_LOR_UINT64     ) ;
2099                             case GB_FP32_code  : return (GxB_ANY_LOR_FP32       ) ;
2100                             case GB_FP64_code  : return (GxB_ANY_LOR_FP64       ) ;
2101                             default : ;
2102                         }
2103                         break ;
2104 
2105                     default : ;
2106                 }
2107                 break ;
2108 
2109             case GB_LAND_opcode : // with (5 monoids) x (10 nonboolean types)
2110 
2111                 switch (add_opcode)
2112                 {
2113 
2114                     case GB_MIN_opcode :
2115 
2116                         switch (zcode)
2117                         {
2118                             case GB_INT8_code  : return (GxB_MIN_LAND_INT8      ) ;
2119                             case GB_UINT8_code : return (GxB_MIN_LAND_UINT8     ) ;
2120                             case GB_INT16_code : return (GxB_MIN_LAND_INT16     ) ;
2121                             case GB_UINT16_code: return (GxB_MIN_LAND_UINT16    ) ;
2122                             case GB_INT32_code : return (GxB_MIN_LAND_INT32     ) ;
2123                             case GB_UINT32_code: return (GxB_MIN_LAND_UINT32    ) ;
2124                             case GB_INT64_code : return (GxB_MIN_LAND_INT64     ) ;
2125                             case GB_UINT64_code: return (GxB_MIN_LAND_UINT64    ) ;
2126                             case GB_FP32_code  : return (GxB_MIN_LAND_FP32      ) ;
2127                             case GB_FP64_code  : return (GxB_MIN_LAND_FP64      ) ;
2128                             default : ;
2129                         }
2130                         break ;
2131 
2132                     case GB_MAX_opcode :
2133 
2134                         switch (zcode)
2135                         {
2136                             case GB_INT8_code  : return (GxB_MAX_LAND_INT8      ) ;
2137                             case GB_UINT8_code : return (GxB_MAX_LAND_UINT8     ) ;
2138                             case GB_INT16_code : return (GxB_MAX_LAND_INT16     ) ;
2139                             case GB_UINT16_code: return (GxB_MAX_LAND_UINT16    ) ;
2140                             case GB_INT32_code : return (GxB_MAX_LAND_INT32     ) ;
2141                             case GB_UINT32_code: return (GxB_MAX_LAND_UINT32    ) ;
2142                             case GB_INT64_code : return (GxB_MAX_LAND_INT64     ) ;
2143                             case GB_UINT64_code: return (GxB_MAX_LAND_UINT64    ) ;
2144                             case GB_FP32_code  : return (GxB_MAX_LAND_FP32      ) ;
2145                             case GB_FP64_code  : return (GxB_MAX_LAND_FP64      ) ;
2146                             default : ;
2147                         }
2148                         break ;
2149 
2150                     case GB_PLUS_opcode :
2151 
2152                         switch (zcode)
2153                         {
2154                             case GB_INT8_code  : return (GxB_PLUS_LAND_INT8     ) ;
2155                             case GB_UINT8_code : return (GxB_PLUS_LAND_UINT8    ) ;
2156                             case GB_INT16_code : return (GxB_PLUS_LAND_INT16    ) ;
2157                             case GB_UINT16_code: return (GxB_PLUS_LAND_UINT16   ) ;
2158                             case GB_INT32_code : return (GxB_PLUS_LAND_INT32    ) ;
2159                             case GB_UINT32_code: return (GxB_PLUS_LAND_UINT32   ) ;
2160                             case GB_INT64_code : return (GxB_PLUS_LAND_INT64    ) ;
2161                             case GB_UINT64_code: return (GxB_PLUS_LAND_UINT64   ) ;
2162                             case GB_FP32_code  : return (GxB_PLUS_LAND_FP32     ) ;
2163                             case GB_FP64_code  : return (GxB_PLUS_LAND_FP64     ) ;
2164                             default : ;
2165                         }
2166                         break ;
2167 
2168                     case GB_TIMES_opcode :
2169 
2170                         switch (zcode)
2171                         {
2172                             case GB_INT8_code  : return (GxB_TIMES_LAND_INT8    ) ;
2173                             case GB_UINT8_code : return (GxB_TIMES_LAND_UINT8   ) ;
2174                             case GB_INT16_code : return (GxB_TIMES_LAND_INT16   ) ;
2175                             case GB_UINT16_code: return (GxB_TIMES_LAND_UINT16  ) ;
2176                             case GB_INT32_code : return (GxB_TIMES_LAND_INT32   ) ;
2177                             case GB_UINT32_code: return (GxB_TIMES_LAND_UINT32  ) ;
2178                             case GB_INT64_code : return (GxB_TIMES_LAND_INT64   ) ;
2179                             case GB_UINT64_code: return (GxB_TIMES_LAND_UINT64  ) ;
2180                             case GB_FP32_code  : return (GxB_TIMES_LAND_FP32    ) ;
2181                             case GB_FP64_code  : return (GxB_TIMES_LAND_FP64    ) ;
2182                             default : ;
2183                         }
2184                         break ;
2185 
2186                     case GB_ANY_opcode :
2187 
2188                         switch (zcode)
2189                         {
2190                             case GB_INT8_code  : return (GxB_ANY_LAND_INT8      ) ;
2191                             case GB_UINT8_code : return (GxB_ANY_LAND_UINT8     ) ;
2192                             case GB_INT16_code : return (GxB_ANY_LAND_INT16     ) ;
2193                             case GB_UINT16_code: return (GxB_ANY_LAND_UINT16    ) ;
2194                             case GB_INT32_code : return (GxB_ANY_LAND_INT32     ) ;
2195                             case GB_UINT32_code: return (GxB_ANY_LAND_UINT32    ) ;
2196                             case GB_INT64_code : return (GxB_ANY_LAND_INT64     ) ;
2197                             case GB_UINT64_code: return (GxB_ANY_LAND_UINT64    ) ;
2198                             case GB_FP32_code  : return (GxB_ANY_LAND_FP32      ) ;
2199                             case GB_FP64_code  : return (GxB_ANY_LAND_FP64      ) ;
2200                             default : ;
2201                         }
2202                         break ;
2203 
2204                     default : ;
2205                 }
2206                 break ;
2207 
2208             case GB_LXOR_opcode : // with (5 monoids) x (10 nonboolean types)
2209 
2210                 switch (add_opcode)
2211                 {
2212 
2213                     case GB_MIN_opcode :
2214 
2215                         switch (zcode)
2216                         {
2217                             case GB_INT8_code  : return (GxB_MIN_LXOR_INT8      ) ;
2218                             case GB_UINT8_code : return (GxB_MIN_LXOR_UINT8     ) ;
2219                             case GB_INT16_code : return (GxB_MIN_LXOR_INT16     ) ;
2220                             case GB_UINT16_code: return (GxB_MIN_LXOR_UINT16    ) ;
2221                             case GB_INT32_code : return (GxB_MIN_LXOR_INT32     ) ;
2222                             case GB_UINT32_code: return (GxB_MIN_LXOR_UINT32    ) ;
2223                             case GB_INT64_code : return (GxB_MIN_LXOR_INT64     ) ;
2224                             case GB_UINT64_code: return (GxB_MIN_LXOR_UINT64    ) ;
2225                             case GB_FP32_code  : return (GxB_MIN_LXOR_FP32      ) ;
2226                             case GB_FP64_code  : return (GxB_MIN_LXOR_FP64      ) ;
2227                             default : ;
2228                         }
2229                         break ;
2230 
2231                     case GB_MAX_opcode :
2232 
2233                         switch (zcode)
2234                         {
2235                             case GB_INT8_code  : return (GxB_MAX_LXOR_INT8      ) ;
2236                             case GB_UINT8_code : return (GxB_MAX_LXOR_UINT8     ) ;
2237                             case GB_INT16_code : return (GxB_MAX_LXOR_INT16     ) ;
2238                             case GB_UINT16_code: return (GxB_MAX_LXOR_UINT16    ) ;
2239                             case GB_INT32_code : return (GxB_MAX_LXOR_INT32     ) ;
2240                             case GB_UINT32_code: return (GxB_MAX_LXOR_UINT32    ) ;
2241                             case GB_INT64_code : return (GxB_MAX_LXOR_INT64     ) ;
2242                             case GB_UINT64_code: return (GxB_MAX_LXOR_UINT64    ) ;
2243                             case GB_FP32_code  : return (GxB_MAX_LXOR_FP32      ) ;
2244                             case GB_FP64_code  : return (GxB_MAX_LXOR_FP64      ) ;
2245                             default : ;
2246                         }
2247                         break ;
2248 
2249                     case GB_PLUS_opcode :
2250 
2251                         switch (zcode)
2252                         {
2253                             case GB_INT8_code  : return (GxB_PLUS_LXOR_INT8     ) ;
2254                             case GB_UINT8_code : return (GxB_PLUS_LXOR_UINT8    ) ;
2255                             case GB_INT16_code : return (GxB_PLUS_LXOR_INT16    ) ;
2256                             case GB_UINT16_code: return (GxB_PLUS_LXOR_UINT16   ) ;
2257                             case GB_INT32_code : return (GxB_PLUS_LXOR_INT32    ) ;
2258                             case GB_UINT32_code: return (GxB_PLUS_LXOR_UINT32   ) ;
2259                             case GB_INT64_code : return (GxB_PLUS_LXOR_INT64    ) ;
2260                             case GB_UINT64_code: return (GxB_PLUS_LXOR_UINT64   ) ;
2261                             case GB_FP32_code  : return (GxB_PLUS_LXOR_FP32     ) ;
2262                             case GB_FP64_code  : return (GxB_PLUS_LXOR_FP64     ) ;
2263                             default : ;
2264                         }
2265                         break ;
2266 
2267                     case GB_TIMES_opcode :
2268 
2269                         switch (zcode)
2270                         {
2271                             case GB_INT8_code  : return (GxB_TIMES_LXOR_INT8    ) ;
2272                             case GB_UINT8_code : return (GxB_TIMES_LXOR_UINT8   ) ;
2273                             case GB_INT16_code : return (GxB_TIMES_LXOR_INT16   ) ;
2274                             case GB_UINT16_code: return (GxB_TIMES_LXOR_UINT16  ) ;
2275                             case GB_INT32_code : return (GxB_TIMES_LXOR_INT32   ) ;
2276                             case GB_UINT32_code: return (GxB_TIMES_LXOR_UINT32  ) ;
2277                             case GB_INT64_code : return (GxB_TIMES_LXOR_INT64   ) ;
2278                             case GB_UINT64_code: return (GxB_TIMES_LXOR_UINT64  ) ;
2279                             case GB_FP32_code  : return (GxB_TIMES_LXOR_FP32    ) ;
2280                             case GB_FP64_code  : return (GxB_TIMES_LXOR_FP64    ) ;
2281                             default : ;
2282                         }
2283                         break ;
2284 
2285                     case GB_ANY_opcode :
2286 
2287                         switch (zcode)
2288                         {
2289                             case GB_INT8_code  : return (GxB_ANY_LXOR_INT8      ) ;
2290                             case GB_UINT8_code : return (GxB_ANY_LXOR_UINT8     ) ;
2291                             case GB_INT16_code : return (GxB_ANY_LXOR_INT16     ) ;
2292                             case GB_UINT16_code: return (GxB_ANY_LXOR_UINT16    ) ;
2293                             case GB_INT32_code : return (GxB_ANY_LXOR_INT32     ) ;
2294                             case GB_UINT32_code: return (GxB_ANY_LXOR_UINT32    ) ;
2295                             case GB_INT64_code : return (GxB_ANY_LXOR_INT64     ) ;
2296                             case GB_UINT64_code: return (GxB_ANY_LXOR_UINT64    ) ;
2297                             case GB_FP32_code  : return (GxB_ANY_LXOR_FP32      ) ;
2298                             case GB_FP64_code  : return (GxB_ANY_LXOR_FP64      ) ;
2299                             default : ;
2300                         }
2301                         break ;
2302 
2303                     default : ;
2304                 }
2305                 break ;
2306 
2307             default : ;
2308         }
2309 
2310         //----------------------------------------------------------------------
2311         // 64 bitwise semirings
2312         //----------------------------------------------------------------------
2313 
2314         switch (mult_opcode)
2315         {
2316 
2317             case GB_BOR_opcode :
2318 
2319                 switch (add_opcode)
2320                 {
2321                     case GB_BOR_opcode :
2322 
2323                         switch (zcode)
2324                         {
2325                             case GB_UINT8_code : return (GxB_BOR_BOR_UINT8     ) ;
2326                             case GB_UINT16_code: return (GxB_BOR_BOR_UINT16    ) ;
2327                             case GB_UINT32_code: return (GxB_BOR_BOR_UINT32    ) ;
2328                             case GB_UINT64_code: return (GxB_BOR_BOR_UINT64    ) ;
2329                             default : ;
2330                         }
2331                         break ;
2332 
2333                     case GB_BAND_opcode :
2334 
2335                         switch (zcode)
2336                         {
2337                             case GB_UINT8_code : return (GxB_BAND_BOR_UINT8     ) ;
2338                             case GB_UINT16_code: return (GxB_BAND_BOR_UINT16    ) ;
2339                             case GB_UINT32_code: return (GxB_BAND_BOR_UINT32    ) ;
2340                             case GB_UINT64_code: return (GxB_BAND_BOR_UINT64    ) ;
2341                             default : ;
2342                         }
2343                         break ;
2344 
2345                     case GB_BXOR_opcode :
2346 
2347                         switch (zcode)
2348                         {
2349                             case GB_UINT8_code : return (GxB_BXOR_BOR_UINT8     ) ;
2350                             case GB_UINT16_code: return (GxB_BXOR_BOR_UINT16    ) ;
2351                             case GB_UINT32_code: return (GxB_BXOR_BOR_UINT32    ) ;
2352                             case GB_UINT64_code: return (GxB_BXOR_BOR_UINT64    ) ;
2353                             default : ;
2354                         }
2355                         break ;
2356 
2357                     case GB_BXNOR_opcode :
2358 
2359                         switch (zcode)
2360                         {
2361                             case GB_UINT8_code : return (GxB_BXNOR_BOR_UINT8     ) ;
2362                             case GB_UINT16_code: return (GxB_BXNOR_BOR_UINT16    ) ;
2363                             case GB_UINT32_code: return (GxB_BXNOR_BOR_UINT32    ) ;
2364                             case GB_UINT64_code: return (GxB_BXNOR_BOR_UINT64    ) ;
2365                             default : ;
2366                         }
2367                         break ;
2368 
2369                     default : ;
2370                 }
2371                 break ;
2372 
2373             case GB_BAND_opcode :
2374 
2375                 switch (add_opcode)
2376                 {
2377                     case GB_BOR_opcode :
2378 
2379                         switch (zcode)
2380                         {
2381                             case GB_UINT8_code : return (GxB_BOR_BAND_UINT8     ) ;
2382                             case GB_UINT16_code: return (GxB_BOR_BAND_UINT16    ) ;
2383                             case GB_UINT32_code: return (GxB_BOR_BAND_UINT32    ) ;
2384                             case GB_UINT64_code: return (GxB_BOR_BAND_UINT64    ) ;
2385                             default : ;
2386                         }
2387                         break ;
2388 
2389                     case GB_BAND_opcode :
2390 
2391                         switch (zcode)
2392                         {
2393                             case GB_UINT8_code : return (GxB_BAND_BAND_UINT8     ) ;
2394                             case GB_UINT16_code: return (GxB_BAND_BAND_UINT16    ) ;
2395                             case GB_UINT32_code: return (GxB_BAND_BAND_UINT32    ) ;
2396                             case GB_UINT64_code: return (GxB_BAND_BAND_UINT64    ) ;
2397                             default : ;
2398                         }
2399                         break ;
2400 
2401                     case GB_BXOR_opcode :
2402 
2403                         switch (zcode)
2404                         {
2405                             case GB_UINT8_code : return (GxB_BXOR_BAND_UINT8     ) ;
2406                             case GB_UINT16_code: return (GxB_BXOR_BAND_UINT16    ) ;
2407                             case GB_UINT32_code: return (GxB_BXOR_BAND_UINT32    ) ;
2408                             case GB_UINT64_code: return (GxB_BXOR_BAND_UINT64    ) ;
2409                             default : ;
2410                         }
2411                         break ;
2412 
2413                     case GB_BXNOR_opcode :
2414 
2415                         switch (zcode)
2416                         {
2417                             case GB_UINT8_code : return (GxB_BXNOR_BAND_UINT8     ) ;
2418                             case GB_UINT16_code: return (GxB_BXNOR_BAND_UINT16    ) ;
2419                             case GB_UINT32_code: return (GxB_BXNOR_BAND_UINT32    ) ;
2420                             case GB_UINT64_code: return (GxB_BXNOR_BAND_UINT64    ) ;
2421                             default : ;
2422                         }
2423                         break ;
2424 
2425                     default : ;
2426                 }
2427                 break ;
2428 
2429             case GB_BXOR_opcode :
2430 
2431                 switch (add_opcode)
2432                 {
2433                     case GB_BOR_opcode :
2434 
2435                         switch (zcode)
2436                         {
2437                             case GB_UINT8_code : return (GxB_BOR_BXOR_UINT8     ) ;
2438                             case GB_UINT16_code: return (GxB_BOR_BXOR_UINT16    ) ;
2439                             case GB_UINT32_code: return (GxB_BOR_BXOR_UINT32    ) ;
2440                             case GB_UINT64_code: return (GxB_BOR_BXOR_UINT64    ) ;
2441                             default : ;
2442                         }
2443                         break ;
2444 
2445                     case GB_BAND_opcode :
2446 
2447                         switch (zcode)
2448                         {
2449                             case GB_UINT8_code : return (GxB_BAND_BXOR_UINT8     ) ;
2450                             case GB_UINT16_code: return (GxB_BAND_BXOR_UINT16    ) ;
2451                             case GB_UINT32_code: return (GxB_BAND_BXOR_UINT32    ) ;
2452                             case GB_UINT64_code: return (GxB_BAND_BXOR_UINT64    ) ;
2453                             default : ;
2454                         }
2455                         break ;
2456 
2457                     case GB_BXOR_opcode :
2458 
2459                         switch (zcode)
2460                         {
2461                             case GB_UINT8_code : return (GxB_BXOR_BXOR_UINT8     ) ;
2462                             case GB_UINT16_code: return (GxB_BXOR_BXOR_UINT16    ) ;
2463                             case GB_UINT32_code: return (GxB_BXOR_BXOR_UINT32    ) ;
2464                             case GB_UINT64_code: return (GxB_BXOR_BXOR_UINT64    ) ;
2465                             default : ;
2466                         }
2467                         break ;
2468 
2469                     case GB_BXNOR_opcode :
2470 
2471                         switch (zcode)
2472                         {
2473                             case GB_UINT8_code : return (GxB_BXNOR_BXOR_UINT8     ) ;
2474                             case GB_UINT16_code: return (GxB_BXNOR_BXOR_UINT16    ) ;
2475                             case GB_UINT32_code: return (GxB_BXNOR_BXOR_UINT32    ) ;
2476                             case GB_UINT64_code: return (GxB_BXNOR_BXOR_UINT64    ) ;
2477                             default : ;
2478                         }
2479                         break ;
2480 
2481                     default : ;
2482                 }
2483                 break ;
2484 
2485             case GB_BXNOR_opcode :
2486 
2487                 switch (add_opcode)
2488                 {
2489                     case GB_BOR_opcode :
2490 
2491                         switch (zcode)
2492                         {
2493                             case GB_UINT8_code : return (GxB_BOR_BXNOR_UINT8     ) ;
2494                             case GB_UINT16_code: return (GxB_BOR_BXNOR_UINT16    ) ;
2495                             case GB_UINT32_code: return (GxB_BOR_BXNOR_UINT32    ) ;
2496                             case GB_UINT64_code: return (GxB_BOR_BXNOR_UINT64    ) ;
2497                             default : ;
2498                         }
2499                         break ;
2500 
2501                     case GB_BAND_opcode :
2502 
2503                         switch (zcode)
2504                         {
2505                             case GB_UINT8_code : return (GxB_BAND_BXNOR_UINT8     ) ;
2506                             case GB_UINT16_code: return (GxB_BAND_BXNOR_UINT16    ) ;
2507                             case GB_UINT32_code: return (GxB_BAND_BXNOR_UINT32    ) ;
2508                             case GB_UINT64_code: return (GxB_BAND_BXNOR_UINT64    ) ;
2509                             default : ;
2510                         }
2511                         break ;
2512 
2513                     case GB_BXOR_opcode :
2514 
2515                         switch (zcode)
2516                         {
2517                             case GB_UINT8_code : return (GxB_BXOR_BXNOR_UINT8     ) ;
2518                             case GB_UINT16_code: return (GxB_BXOR_BXNOR_UINT16    ) ;
2519                             case GB_UINT32_code: return (GxB_BXOR_BXNOR_UINT32    ) ;
2520                             case GB_UINT64_code: return (GxB_BXOR_BXNOR_UINT64    ) ;
2521                             default : ;
2522                         }
2523                         break ;
2524 
2525                     case GB_BXNOR_opcode :
2526 
2527                         switch (zcode)
2528                         {
2529                             case GB_UINT8_code : return (GxB_BXNOR_BXNOR_UINT8     ) ;
2530                             case GB_UINT16_code: return (GxB_BXNOR_BXNOR_UINT16    ) ;
2531                             case GB_UINT32_code: return (GxB_BXNOR_BXNOR_UINT32    ) ;
2532                             case GB_UINT64_code: return (GxB_BXNOR_BXNOR_UINT64    ) ;
2533                             default : ;
2534                         }
2535                         break ;
2536 
2537                     default : ;
2538                 }
2539                 break ;
2540 
2541             default : ;
2542         }
2543 
2544         //----------------------------------------------------------------------
2545         // 80 positional semirings
2546         //----------------------------------------------------------------------
2547 
2548         switch (mult_opcode)
2549         {
2550 
2551             case GB_FIRSTI_opcode   :   // z = first_i(A(i,k),y) == i
2552 
2553                 if (zcode == GB_INT64_code)
2554                 {
2555                     switch (add_opcode)
2556                     {
2557                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTI_INT64) ;
2558                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTI_INT64) ;
2559                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTI_INT64) ;
2560                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTI_INT64) ;
2561                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTI_INT64) ;
2562                         default: ;
2563                     }
2564                 }
2565                 else
2566                 {
2567                     switch (add_opcode)
2568                     {
2569                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTI_INT32) ;
2570                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTI_INT32) ;
2571                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTI_INT32) ;
2572                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTI_INT32) ;
2573                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTI_INT32) ;
2574                         default: ;
2575                     }
2576                 }
2577                 break ;
2578 
2579             case GB_FIRSTI1_opcode  :   // z = first_i1(A(i,k),y) == i+1
2580 
2581                 if (zcode == GB_INT64_code)
2582                 {
2583                     switch (add_opcode)
2584                     {
2585                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTI1_INT64) ;
2586                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTI1_INT64) ;
2587                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTI1_INT64) ;
2588                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTI1_INT64) ;
2589                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTI1_INT64) ;
2590                         default: ;
2591                     }
2592                 }
2593                 else
2594                 {
2595                     switch (add_opcode)
2596                     {
2597                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTI1_INT32) ;
2598                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTI1_INT32) ;
2599                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTI1_INT32) ;
2600                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTI1_INT32) ;
2601                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTI1_INT32) ;
2602                         default: ;
2603                     }
2604                 }
2605                 break ;
2606 
2607             case GB_FIRSTJ_opcode   :   // z = first_j(A(i,k),y) == k
2608 
2609                 if (zcode == GB_INT64_code)
2610                 {
2611                     switch (add_opcode)
2612                     {
2613                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTJ_INT64) ;
2614                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTJ_INT64) ;
2615                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTJ_INT64) ;
2616                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTJ_INT64) ;
2617                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTJ_INT64) ;
2618                         default: ;
2619                     }
2620                 }
2621                 else
2622                 {
2623                     switch (add_opcode)
2624                     {
2625                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTJ_INT32) ;
2626                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTJ_INT32) ;
2627                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTJ_INT32) ;
2628                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTJ_INT32) ;
2629                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTJ_INT32) ;
2630                         default: ;
2631                     }
2632                 }
2633                 break ;
2634 
2635             case GB_FIRSTJ1_opcode  :   // z = first_j1(A(i,k),y) == k+1
2636 
2637                 if (zcode == GB_INT64_code)
2638                 {
2639                     switch (add_opcode)
2640                     {
2641                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTJ1_INT64) ;
2642                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTJ1_INT64) ;
2643                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTJ1_INT64) ;
2644                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTJ1_INT64) ;
2645                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTJ1_INT64) ;
2646                         default: ;
2647                     }
2648                 }
2649                 else
2650                 {
2651                     switch (add_opcode)
2652                     {
2653                         case GB_MIN_opcode   : return (GxB_MIN_FIRSTJ1_INT32) ;
2654                         case GB_MAX_opcode   : return (GxB_MAX_FIRSTJ1_INT32) ;
2655                         case GB_TIMES_opcode : return (GxB_TIMES_FIRSTJ1_INT32) ;
2656                         case GB_PLUS_opcode  : return (GxB_PLUS_FIRSTJ1_INT32) ;
2657                         case GB_ANY_opcode   : return (GxB_ANY_FIRSTJ1_INT32) ;
2658                         default: ;
2659                     }
2660                 }
2661                 break ;
2662 
2663             case GB_SECONDI_opcode  :   // z = second_i(x,B(k,j)) == k
2664 
2665                 if (zcode == GB_INT64_code)
2666                 {
2667                     switch (add_opcode)
2668                     {
2669                         case GB_MIN_opcode   : return (GxB_MIN_SECONDI_INT64) ;
2670                         case GB_MAX_opcode   : return (GxB_MAX_SECONDI_INT64) ;
2671                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDI_INT64) ;
2672                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDI_INT64) ;
2673                         case GB_ANY_opcode   : return (GxB_ANY_SECONDI_INT64) ;
2674                         default: ;
2675                     }
2676                 }
2677                 else
2678                 {
2679                     switch (add_opcode)
2680                     {
2681                         case GB_MIN_opcode   : return (GxB_MIN_SECONDI_INT32) ;
2682                         case GB_MAX_opcode   : return (GxB_MAX_SECONDI_INT32) ;
2683                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDI_INT32) ;
2684                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDI_INT32) ;
2685                         case GB_ANY_opcode   : return (GxB_ANY_SECONDI_INT32) ;
2686                         default: ;
2687                     }
2688                 }
2689                 break ;
2690 
2691             case GB_SECONDI1_opcode :   // z = second_i1(x,B(k,j)) == k+1
2692 
2693                 if (zcode == GB_INT64_code)
2694                 {
2695                     switch (add_opcode)
2696                     {
2697                         case GB_MIN_opcode   : return (GxB_MIN_SECONDI1_INT64) ;
2698                         case GB_MAX_opcode   : return (GxB_MAX_SECONDI1_INT64) ;
2699                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDI1_INT64) ;
2700                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDI1_INT64) ;
2701                         case GB_ANY_opcode   : return (GxB_ANY_SECONDI1_INT64) ;
2702                         default: ;
2703                     }
2704                 }
2705                 else
2706                 {
2707                     switch (add_opcode)
2708                     {
2709                         case GB_MIN_opcode   : return (GxB_MIN_SECONDI1_INT32) ;
2710                         case GB_MAX_opcode   : return (GxB_MAX_SECONDI1_INT32) ;
2711                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDI1_INT32) ;
2712                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDI1_INT32) ;
2713                         case GB_ANY_opcode   : return (GxB_ANY_SECONDI1_INT32) ;
2714                         default: ;
2715                     }
2716                 }
2717                 break ;
2718 
2719             case GB_SECONDJ_opcode  :   // z = second_j(x,B(i,j)) == j
2720 
2721                 if (zcode == GB_INT64_code)
2722                 {
2723                     switch (add_opcode)
2724                     {
2725                         case GB_MIN_opcode   : return (GxB_MIN_SECONDJ_INT64) ;
2726                         case GB_MAX_opcode   : return (GxB_MAX_SECONDJ_INT64) ;
2727                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDJ_INT64) ;
2728                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDJ_INT64) ;
2729                         case GB_ANY_opcode   : return (GxB_ANY_SECONDJ_INT64) ;
2730                         default: ;
2731                     }
2732                 }
2733                 else
2734                 {
2735                     switch (add_opcode)
2736                     {
2737                         case GB_MIN_opcode   : return (GxB_MIN_SECONDJ_INT32) ;
2738                         case GB_MAX_opcode   : return (GxB_MAX_SECONDJ_INT32) ;
2739                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDJ_INT32) ;
2740                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDJ_INT32) ;
2741                         case GB_ANY_opcode   : return (GxB_ANY_SECONDJ_INT32) ;
2742                         default: ;
2743                     }
2744                 }
2745                 break ;
2746 
2747             case GB_SECONDJ1_opcode :   // z = second_j1(x,B(i,j)) == j+1
2748 
2749                 if (zcode == GB_INT64_code)
2750                 {
2751                     switch (add_opcode)
2752                     {
2753                         case GB_MIN_opcode   : return (GxB_MIN_SECONDJ1_INT64) ;
2754                         case GB_MAX_opcode   : return (GxB_MAX_SECONDJ1_INT64) ;
2755                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDJ1_INT64) ;
2756                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDJ1_INT64) ;
2757                         case GB_ANY_opcode   : return (GxB_ANY_SECONDJ1_INT64) ;
2758                         default: ;
2759                     }
2760                 }
2761                 else
2762                 {
2763                     switch (add_opcode)
2764                     {
2765                         case GB_MIN_opcode   : return (GxB_MIN_SECONDJ1_INT32) ;
2766                         case GB_MAX_opcode   : return (GxB_MAX_SECONDJ1_INT32) ;
2767                         case GB_TIMES_opcode : return (GxB_TIMES_SECONDJ1_INT32) ;
2768                         case GB_PLUS_opcode  : return (GxB_PLUS_SECONDJ1_INT32) ;
2769                         case GB_ANY_opcode   : return (GxB_ANY_SECONDJ1_INT32) ;
2770                         default: ;
2771                     }
2772                 }
2773                 break ;
2774 
2775             default  : ;
2776         }
2777 
2778     }
2779     else if (xcode != GB_BOOL_code)
2780     {
2781 
2782         //----------------------------------------------------------------------
2783         // 300 semirings with TxT -> bool multiply operators
2784         //----------------------------------------------------------------------
2785 
2786         // x,y are one of the 10 non-Boolean types, z is Boolean
2787 
2788         switch (mult_opcode)
2789         {
2790 
2791             case GB_EQ_opcode : // with (5 bool monoids) x (10 nonboolean types)
2792 
2793                 switch (add_opcode)
2794                 {
2795 
2796                     case GB_LOR_opcode :
2797 
2798                         switch (xcode)
2799                         {
2800                             case GB_INT8_code  : return (GxB_LOR_EQ_INT8        ) ;
2801                             case GB_UINT8_code : return (GxB_LOR_EQ_UINT8       ) ;
2802                             case GB_INT16_code : return (GxB_LOR_EQ_INT16       ) ;
2803                             case GB_UINT16_code: return (GxB_LOR_EQ_UINT16      ) ;
2804                             case GB_INT32_code : return (GxB_LOR_EQ_INT32       ) ;
2805                             case GB_UINT32_code: return (GxB_LOR_EQ_UINT32      ) ;
2806                             case GB_INT64_code : return (GxB_LOR_EQ_INT64       ) ;
2807                             case GB_UINT64_code: return (GxB_LOR_EQ_UINT64      ) ;
2808                             case GB_FP32_code  : return (GxB_LOR_EQ_FP32        ) ;
2809                             case GB_FP64_code  : return (GxB_LOR_EQ_FP64        ) ;
2810                             default : ;
2811                         }
2812                         break ;
2813 
2814                     case GB_LAND_opcode :
2815 
2816                         switch (xcode)
2817                         {
2818                             case GB_INT8_code  : return (GxB_LAND_EQ_INT8       ) ;
2819                             case GB_UINT8_code : return (GxB_LAND_EQ_UINT8      ) ;
2820                             case GB_INT16_code : return (GxB_LAND_EQ_INT16      ) ;
2821                             case GB_UINT16_code: return (GxB_LAND_EQ_UINT16     ) ;
2822                             case GB_INT32_code : return (GxB_LAND_EQ_INT32      ) ;
2823                             case GB_UINT32_code: return (GxB_LAND_EQ_UINT32     ) ;
2824                             case GB_INT64_code : return (GxB_LAND_EQ_INT64      ) ;
2825                             case GB_UINT64_code: return (GxB_LAND_EQ_UINT64     ) ;
2826                             case GB_FP32_code  : return (GxB_LAND_EQ_FP32       ) ;
2827                             case GB_FP64_code  : return (GxB_LAND_EQ_FP64       ) ;
2828                             default : ;
2829                         }
2830                         break ;
2831 
2832                     case GB_LXOR_opcode :
2833 
2834                         switch (xcode)
2835                         {
2836                             case GB_INT8_code  : return (GxB_LXOR_EQ_INT8       ) ;
2837                             case GB_UINT8_code : return (GxB_LXOR_EQ_UINT8      ) ;
2838                             case GB_INT16_code : return (GxB_LXOR_EQ_INT16      ) ;
2839                             case GB_UINT16_code: return (GxB_LXOR_EQ_UINT16     ) ;
2840                             case GB_INT32_code : return (GxB_LXOR_EQ_INT32      ) ;
2841                             case GB_UINT32_code: return (GxB_LXOR_EQ_UINT32     ) ;
2842                             case GB_INT64_code : return (GxB_LXOR_EQ_INT64      ) ;
2843                             case GB_UINT64_code: return (GxB_LXOR_EQ_UINT64     ) ;
2844                             case GB_FP32_code  : return (GxB_LXOR_EQ_FP32       ) ;
2845                             case GB_FP64_code  : return (GxB_LXOR_EQ_FP64       ) ;
2846                             default : ;
2847                         }
2848                         break ;
2849 
2850                     case GB_EQ_opcode :
2851 
2852                         switch (xcode)
2853                         {
2854                             case GB_INT8_code  : return (GxB_EQ_EQ_INT8         ) ;
2855                             case GB_UINT8_code : return (GxB_EQ_EQ_UINT8        ) ;
2856                             case GB_INT16_code : return (GxB_EQ_EQ_INT16        ) ;
2857                             case GB_UINT16_code: return (GxB_EQ_EQ_UINT16       ) ;
2858                             case GB_INT32_code : return (GxB_EQ_EQ_INT32        ) ;
2859                             case GB_UINT32_code: return (GxB_EQ_EQ_UINT32       ) ;
2860                             case GB_INT64_code : return (GxB_EQ_EQ_INT64        ) ;
2861                             case GB_UINT64_code: return (GxB_EQ_EQ_UINT64       ) ;
2862                             case GB_FP32_code  : return (GxB_EQ_EQ_FP32         ) ;
2863                             case GB_FP64_code  : return (GxB_EQ_EQ_FP64         ) ;
2864                             default : ;
2865                         }
2866                         break ;
2867 
2868                     case GB_ANY_opcode :
2869 
2870                         switch (xcode)
2871                         {
2872                             case GB_INT8_code  : return (GxB_ANY_EQ_INT8        ) ;
2873                             case GB_UINT8_code : return (GxB_ANY_EQ_UINT8       ) ;
2874                             case GB_INT16_code : return (GxB_ANY_EQ_INT16       ) ;
2875                             case GB_UINT16_code: return (GxB_ANY_EQ_UINT16      ) ;
2876                             case GB_INT32_code : return (GxB_ANY_EQ_INT32       ) ;
2877                             case GB_UINT32_code: return (GxB_ANY_EQ_UINT32      ) ;
2878                             case GB_INT64_code : return (GxB_ANY_EQ_INT64       ) ;
2879                             case GB_UINT64_code: return (GxB_ANY_EQ_UINT64      ) ;
2880                             case GB_FP32_code  : return (GxB_ANY_EQ_FP32        ) ;
2881                             case GB_FP64_code  : return (GxB_ANY_EQ_FP64        ) ;
2882                             default : ;
2883                         }
2884                         break ;
2885 
2886                     default : ;
2887                 }
2888                 break ;
2889 
2890             case GB_NE_opcode : // with (5 bool monoids) x (10 nonboolean types)
2891 
2892                 switch (add_opcode)
2893                 {
2894 
2895                     case GB_LOR_opcode :
2896 
2897                         switch (xcode)
2898                         {
2899                             case GB_INT8_code  : return (GxB_LOR_NE_INT8        ) ;
2900                             case GB_UINT8_code : return (GxB_LOR_NE_UINT8       ) ;
2901                             case GB_INT16_code : return (GxB_LOR_NE_INT16       ) ;
2902                             case GB_UINT16_code: return (GxB_LOR_NE_UINT16      ) ;
2903                             case GB_INT32_code : return (GxB_LOR_NE_INT32       ) ;
2904                             case GB_UINT32_code: return (GxB_LOR_NE_UINT32      ) ;
2905                             case GB_INT64_code : return (GxB_LOR_NE_INT64       ) ;
2906                             case GB_UINT64_code: return (GxB_LOR_NE_UINT64      ) ;
2907                             case GB_FP32_code  : return (GxB_LOR_NE_FP32        ) ;
2908                             case GB_FP64_code  : return (GxB_LOR_NE_FP64        ) ;
2909                             default : ;
2910                         }
2911                         break ;
2912 
2913                     case GB_LAND_opcode :
2914 
2915                         switch (xcode)
2916                         {
2917                             case GB_INT8_code  : return (GxB_LAND_NE_INT8       ) ;
2918                             case GB_UINT8_code : return (GxB_LAND_NE_UINT8      ) ;
2919                             case GB_INT16_code : return (GxB_LAND_NE_INT16      ) ;
2920                             case GB_UINT16_code: return (GxB_LAND_NE_UINT16     ) ;
2921                             case GB_INT32_code : return (GxB_LAND_NE_INT32      ) ;
2922                             case GB_UINT32_code: return (GxB_LAND_NE_UINT32     ) ;
2923                             case GB_INT64_code : return (GxB_LAND_NE_INT64      ) ;
2924                             case GB_UINT64_code: return (GxB_LAND_NE_UINT64     ) ;
2925                             case GB_FP32_code  : return (GxB_LAND_NE_FP32       ) ;
2926                             case GB_FP64_code  : return (GxB_LAND_NE_FP64       ) ;
2927                             default : ;
2928                         }
2929                         break ;
2930 
2931                     case GB_LXOR_opcode :
2932 
2933                         switch (xcode)
2934                         {
2935                             case GB_INT8_code  : return (GxB_LXOR_NE_INT8       ) ;
2936                             case GB_UINT8_code : return (GxB_LXOR_NE_UINT8      ) ;
2937                             case GB_INT16_code : return (GxB_LXOR_NE_INT16      ) ;
2938                             case GB_UINT16_code: return (GxB_LXOR_NE_UINT16     ) ;
2939                             case GB_INT32_code : return (GxB_LXOR_NE_INT32      ) ;
2940                             case GB_UINT32_code: return (GxB_LXOR_NE_UINT32     ) ;
2941                             case GB_INT64_code : return (GxB_LXOR_NE_INT64      ) ;
2942                             case GB_UINT64_code: return (GxB_LXOR_NE_UINT64     ) ;
2943                             case GB_FP32_code  : return (GxB_LXOR_NE_FP32       ) ;
2944                             case GB_FP64_code  : return (GxB_LXOR_NE_FP64       ) ;
2945                             default : ;
2946                         }
2947                         break ;
2948 
2949                     case GB_EQ_opcode :
2950 
2951                         switch (xcode)
2952                         {
2953                             case GB_INT8_code  : return (GxB_EQ_NE_INT8         ) ;
2954                             case GB_UINT8_code : return (GxB_EQ_NE_UINT8        ) ;
2955                             case GB_INT16_code : return (GxB_EQ_NE_INT16        ) ;
2956                             case GB_UINT16_code: return (GxB_EQ_NE_UINT16       ) ;
2957                             case GB_INT32_code : return (GxB_EQ_NE_INT32        ) ;
2958                             case GB_UINT32_code: return (GxB_EQ_NE_UINT32       ) ;
2959                             case GB_INT64_code : return (GxB_EQ_NE_INT64        ) ;
2960                             case GB_UINT64_code: return (GxB_EQ_NE_UINT64       ) ;
2961                             case GB_FP32_code  : return (GxB_EQ_NE_FP32         ) ;
2962                             case GB_FP64_code  : return (GxB_EQ_NE_FP64         ) ;
2963                             default : ;
2964                         }
2965                         break ;
2966 
2967                     case GB_ANY_opcode :
2968 
2969                         switch (xcode)
2970                         {
2971                             case GB_INT8_code  : return (GxB_ANY_NE_INT8        ) ;
2972                             case GB_UINT8_code : return (GxB_ANY_NE_UINT8       ) ;
2973                             case GB_INT16_code : return (GxB_ANY_NE_INT16       ) ;
2974                             case GB_UINT16_code: return (GxB_ANY_NE_UINT16      ) ;
2975                             case GB_INT32_code : return (GxB_ANY_NE_INT32       ) ;
2976                             case GB_UINT32_code: return (GxB_ANY_NE_UINT32      ) ;
2977                             case GB_INT64_code : return (GxB_ANY_NE_INT64       ) ;
2978                             case GB_UINT64_code: return (GxB_ANY_NE_UINT64      ) ;
2979                             case GB_FP32_code  : return (GxB_ANY_NE_FP32        ) ;
2980                             case GB_FP64_code  : return (GxB_ANY_NE_FP64        ) ;
2981                             default : ;
2982                         }
2983                         break ;
2984 
2985                     default : ;
2986                 }
2987                 break ;
2988 
2989             case GB_GT_opcode : // with (5 bool monoids) x (10 nonboolean types)
2990 
2991                 switch (add_opcode)
2992                 {
2993 
2994                     case GB_LOR_opcode :
2995 
2996                         switch (xcode)
2997                         {
2998                             case GB_INT8_code  : return (GxB_LOR_GT_INT8        ) ;
2999                             case GB_UINT8_code : return (GxB_LOR_GT_UINT8       ) ;
3000                             case GB_INT16_code : return (GxB_LOR_GT_INT16       ) ;
3001                             case GB_UINT16_code: return (GxB_LOR_GT_UINT16      ) ;
3002                             case GB_INT32_code : return (GxB_LOR_GT_INT32       ) ;
3003                             case GB_UINT32_code: return (GxB_LOR_GT_UINT32      ) ;
3004                             case GB_INT64_code : return (GxB_LOR_GT_INT64       ) ;
3005                             case GB_UINT64_code: return (GxB_LOR_GT_UINT64      ) ;
3006                             case GB_FP32_code  : return (GxB_LOR_GT_FP32        ) ;
3007                             case GB_FP64_code  : return (GxB_LOR_GT_FP64        ) ;
3008                             default : ;
3009                         }
3010                         break ;
3011 
3012                     case GB_LAND_opcode :
3013 
3014                         switch (xcode)
3015                         {
3016                             case GB_INT8_code  : return (GxB_LAND_GT_INT8       ) ;
3017                             case GB_UINT8_code : return (GxB_LAND_GT_UINT8      ) ;
3018                             case GB_INT16_code : return (GxB_LAND_GT_INT16      ) ;
3019                             case GB_UINT16_code: return (GxB_LAND_GT_UINT16     ) ;
3020                             case GB_INT32_code : return (GxB_LAND_GT_INT32      ) ;
3021                             case GB_UINT32_code: return (GxB_LAND_GT_UINT32     ) ;
3022                             case GB_INT64_code : return (GxB_LAND_GT_INT64      ) ;
3023                             case GB_UINT64_code: return (GxB_LAND_GT_UINT64     ) ;
3024                             case GB_FP32_code  : return (GxB_LAND_GT_FP32       ) ;
3025                             case GB_FP64_code  : return (GxB_LAND_GT_FP64       ) ;
3026                             default : ;
3027                         }
3028                         break ;
3029 
3030                     case GB_LXOR_opcode :
3031 
3032                         switch (xcode)
3033                         {
3034                             case GB_INT8_code  : return (GxB_LXOR_GT_INT8       ) ;
3035                             case GB_UINT8_code : return (GxB_LXOR_GT_UINT8      ) ;
3036                             case GB_INT16_code : return (GxB_LXOR_GT_INT16      ) ;
3037                             case GB_UINT16_code: return (GxB_LXOR_GT_UINT16     ) ;
3038                             case GB_INT32_code : return (GxB_LXOR_GT_INT32      ) ;
3039                             case GB_UINT32_code: return (GxB_LXOR_GT_UINT32     ) ;
3040                             case GB_INT64_code : return (GxB_LXOR_GT_INT64      ) ;
3041                             case GB_UINT64_code: return (GxB_LXOR_GT_UINT64     ) ;
3042                             case GB_FP32_code  : return (GxB_LXOR_GT_FP32       ) ;
3043                             case GB_FP64_code  : return (GxB_LXOR_GT_FP64       ) ;
3044                             default : ;
3045                         }
3046                         break ;
3047 
3048                     case GB_EQ_opcode :
3049 
3050                         switch (xcode)
3051                         {
3052                             case GB_INT8_code  : return (GxB_EQ_GT_INT8         ) ;
3053                             case GB_UINT8_code : return (GxB_EQ_GT_UINT8        ) ;
3054                             case GB_INT16_code : return (GxB_EQ_GT_INT16        ) ;
3055                             case GB_UINT16_code: return (GxB_EQ_GT_UINT16       ) ;
3056                             case GB_INT32_code : return (GxB_EQ_GT_INT32        ) ;
3057                             case GB_UINT32_code: return (GxB_EQ_GT_UINT32       ) ;
3058                             case GB_INT64_code : return (GxB_EQ_GT_INT64        ) ;
3059                             case GB_UINT64_code: return (GxB_EQ_GT_UINT64       ) ;
3060                             case GB_FP32_code  : return (GxB_EQ_GT_FP32         ) ;
3061                             case GB_FP64_code  : return (GxB_EQ_GT_FP64         ) ;
3062                             default : ;
3063                         }
3064                         break ;
3065 
3066                     case GB_ANY_opcode :
3067 
3068                         switch (xcode)
3069                         {
3070                             case GB_INT8_code  : return (GxB_ANY_GT_INT8        ) ;
3071                             case GB_UINT8_code : return (GxB_ANY_GT_UINT8       ) ;
3072                             case GB_INT16_code : return (GxB_ANY_GT_INT16       ) ;
3073                             case GB_UINT16_code: return (GxB_ANY_GT_UINT16      ) ;
3074                             case GB_INT32_code : return (GxB_ANY_GT_INT32       ) ;
3075                             case GB_UINT32_code: return (GxB_ANY_GT_UINT32      ) ;
3076                             case GB_INT64_code : return (GxB_ANY_GT_INT64       ) ;
3077                             case GB_UINT64_code: return (GxB_ANY_GT_UINT64      ) ;
3078                             case GB_FP32_code  : return (GxB_ANY_GT_FP32        ) ;
3079                             case GB_FP64_code  : return (GxB_ANY_GT_FP64        ) ;
3080                             default : ;
3081                         }
3082                         break ;
3083 
3084                     default : ;
3085                 }
3086                 break ;
3087 
3088             case GB_LT_opcode : // with (5 bool monoids) x (10 nonboolean types)
3089 
3090                 switch (add_opcode)
3091                 {
3092 
3093                     case GB_LOR_opcode :
3094 
3095                         switch (xcode)
3096                         {
3097                             case GB_INT8_code  : return (GxB_LOR_LT_INT8        ) ;
3098                             case GB_UINT8_code : return (GxB_LOR_LT_UINT8       ) ;
3099                             case GB_INT16_code : return (GxB_LOR_LT_INT16       ) ;
3100                             case GB_UINT16_code: return (GxB_LOR_LT_UINT16      ) ;
3101                             case GB_INT32_code : return (GxB_LOR_LT_INT32       ) ;
3102                             case GB_UINT32_code: return (GxB_LOR_LT_UINT32      ) ;
3103                             case GB_INT64_code : return (GxB_LOR_LT_INT64       ) ;
3104                             case GB_UINT64_code: return (GxB_LOR_LT_UINT64      ) ;
3105                             case GB_FP32_code  : return (GxB_LOR_LT_FP32        ) ;
3106                             case GB_FP64_code  : return (GxB_LOR_LT_FP64        ) ;
3107                             default : ;
3108                         }
3109                         break ;
3110 
3111                     case GB_LAND_opcode :
3112 
3113                         switch (xcode)
3114                         {
3115                             case GB_INT8_code  : return (GxB_LAND_LT_INT8       ) ;
3116                             case GB_UINT8_code : return (GxB_LAND_LT_UINT8      ) ;
3117                             case GB_INT16_code : return (GxB_LAND_LT_INT16      ) ;
3118                             case GB_UINT16_code: return (GxB_LAND_LT_UINT16     ) ;
3119                             case GB_INT32_code : return (GxB_LAND_LT_INT32      ) ;
3120                             case GB_UINT32_code: return (GxB_LAND_LT_UINT32     ) ;
3121                             case GB_INT64_code : return (GxB_LAND_LT_INT64      ) ;
3122                             case GB_UINT64_code: return (GxB_LAND_LT_UINT64     ) ;
3123                             case GB_FP32_code  : return (GxB_LAND_LT_FP32       ) ;
3124                             case GB_FP64_code  : return (GxB_LAND_LT_FP64       ) ;
3125                             default : ;
3126                         }
3127                         break ;
3128 
3129                     case GB_LXOR_opcode :
3130 
3131                         switch (xcode)
3132                         {
3133                             case GB_INT8_code  : return (GxB_LXOR_LT_INT8       ) ;
3134                             case GB_UINT8_code : return (GxB_LXOR_LT_UINT8      ) ;
3135                             case GB_INT16_code : return (GxB_LXOR_LT_INT16      ) ;
3136                             case GB_UINT16_code: return (GxB_LXOR_LT_UINT16     ) ;
3137                             case GB_INT32_code : return (GxB_LXOR_LT_INT32      ) ;
3138                             case GB_UINT32_code: return (GxB_LXOR_LT_UINT32     ) ;
3139                             case GB_INT64_code : return (GxB_LXOR_LT_INT64      ) ;
3140                             case GB_UINT64_code: return (GxB_LXOR_LT_UINT64     ) ;
3141                             case GB_FP32_code  : return (GxB_LXOR_LT_FP32       ) ;
3142                             case GB_FP64_code  : return (GxB_LXOR_LT_FP64       ) ;
3143                             default : ;
3144                         }
3145                         break ;
3146 
3147                     case GB_EQ_opcode :
3148 
3149                         switch (xcode)
3150                         {
3151                             case GB_INT8_code  : return (GxB_EQ_LT_INT8         ) ;
3152                             case GB_UINT8_code : return (GxB_EQ_LT_UINT8        ) ;
3153                             case GB_INT16_code : return (GxB_EQ_LT_INT16        ) ;
3154                             case GB_UINT16_code: return (GxB_EQ_LT_UINT16       ) ;
3155                             case GB_INT32_code : return (GxB_EQ_LT_INT32        ) ;
3156                             case GB_UINT32_code: return (GxB_EQ_LT_UINT32       ) ;
3157                             case GB_INT64_code : return (GxB_EQ_LT_INT64        ) ;
3158                             case GB_UINT64_code: return (GxB_EQ_LT_UINT64       ) ;
3159                             case GB_FP32_code  : return (GxB_EQ_LT_FP32         ) ;
3160                             case GB_FP64_code  : return (GxB_EQ_LT_FP64         ) ;
3161                             default : ;
3162                         }
3163                         break ;
3164 
3165                     case GB_ANY_opcode :
3166 
3167                         switch (xcode)
3168                         {
3169                             case GB_INT8_code  : return (GxB_ANY_LT_INT8        ) ;
3170                             case GB_UINT8_code : return (GxB_ANY_LT_UINT8       ) ;
3171                             case GB_INT16_code : return (GxB_ANY_LT_INT16       ) ;
3172                             case GB_UINT16_code: return (GxB_ANY_LT_UINT16      ) ;
3173                             case GB_INT32_code : return (GxB_ANY_LT_INT32       ) ;
3174                             case GB_UINT32_code: return (GxB_ANY_LT_UINT32      ) ;
3175                             case GB_INT64_code : return (GxB_ANY_LT_INT64       ) ;
3176                             case GB_UINT64_code: return (GxB_ANY_LT_UINT64      ) ;
3177                             case GB_FP32_code  : return (GxB_ANY_LT_FP32        ) ;
3178                             case GB_FP64_code  : return (GxB_ANY_LT_FP64        ) ;
3179                             default : ;
3180                         }
3181                         break ;
3182 
3183                     default : ;
3184                 }
3185                 break ;
3186 
3187             case GB_GE_opcode : // with (5 bool monoids) x (10 nonboolean types)
3188 
3189                 switch (add_opcode)
3190                 {
3191 
3192                     case GB_LOR_opcode :
3193 
3194                         switch (xcode)
3195                         {
3196                             case GB_INT8_code  : return (GxB_LOR_GE_INT8        ) ;
3197                             case GB_UINT8_code : return (GxB_LOR_GE_UINT8       ) ;
3198                             case GB_INT16_code : return (GxB_LOR_GE_INT16       ) ;
3199                             case GB_UINT16_code: return (GxB_LOR_GE_UINT16      ) ;
3200                             case GB_INT32_code : return (GxB_LOR_GE_INT32       ) ;
3201                             case GB_UINT32_code: return (GxB_LOR_GE_UINT32      ) ;
3202                             case GB_INT64_code : return (GxB_LOR_GE_INT64       ) ;
3203                             case GB_UINT64_code: return (GxB_LOR_GE_UINT64      ) ;
3204                             case GB_FP32_code  : return (GxB_LOR_GE_FP32        ) ;
3205                             case GB_FP64_code  : return (GxB_LOR_GE_FP64        ) ;
3206                             default : ;
3207                         }
3208                         break ;
3209 
3210                     case GB_LAND_opcode :
3211 
3212                         switch (xcode)
3213                         {
3214                             case GB_INT8_code  : return (GxB_LAND_GE_INT8       ) ;
3215                             case GB_UINT8_code : return (GxB_LAND_GE_UINT8      ) ;
3216                             case GB_INT16_code : return (GxB_LAND_GE_INT16      ) ;
3217                             case GB_UINT16_code: return (GxB_LAND_GE_UINT16     ) ;
3218                             case GB_INT32_code : return (GxB_LAND_GE_INT32      ) ;
3219                             case GB_UINT32_code: return (GxB_LAND_GE_UINT32     ) ;
3220                             case GB_INT64_code : return (GxB_LAND_GE_INT64      ) ;
3221                             case GB_UINT64_code: return (GxB_LAND_GE_UINT64     ) ;
3222                             case GB_FP32_code  : return (GxB_LAND_GE_FP32       ) ;
3223                             case GB_FP64_code  : return (GxB_LAND_GE_FP64       ) ;
3224                             default : ;
3225                         }
3226                         break ;
3227 
3228                     case GB_LXOR_opcode :
3229 
3230                         switch (xcode)
3231                         {
3232                             case GB_INT8_code  : return (GxB_LXOR_GE_INT8       ) ;
3233                             case GB_UINT8_code : return (GxB_LXOR_GE_UINT8      ) ;
3234                             case GB_INT16_code : return (GxB_LXOR_GE_INT16      ) ;
3235                             case GB_UINT16_code: return (GxB_LXOR_GE_UINT16     ) ;
3236                             case GB_INT32_code : return (GxB_LXOR_GE_INT32      ) ;
3237                             case GB_UINT32_code: return (GxB_LXOR_GE_UINT32     ) ;
3238                             case GB_INT64_code : return (GxB_LXOR_GE_INT64      ) ;
3239                             case GB_UINT64_code: return (GxB_LXOR_GE_UINT64     ) ;
3240                             case GB_FP32_code  : return (GxB_LXOR_GE_FP32       ) ;
3241                             case GB_FP64_code  : return (GxB_LXOR_GE_FP64       ) ;
3242                             default : ;
3243                         }
3244                         break ;
3245 
3246                     case GB_EQ_opcode :
3247 
3248                         switch (xcode)
3249                         {
3250                             case GB_INT8_code  : return (GxB_EQ_GE_INT8         ) ;
3251                             case GB_UINT8_code : return (GxB_EQ_GE_UINT8        ) ;
3252                             case GB_INT16_code : return (GxB_EQ_GE_INT16        ) ;
3253                             case GB_UINT16_code: return (GxB_EQ_GE_UINT16       ) ;
3254                             case GB_INT32_code : return (GxB_EQ_GE_INT32        ) ;
3255                             case GB_UINT32_code: return (GxB_EQ_GE_UINT32       ) ;
3256                             case GB_INT64_code : return (GxB_EQ_GE_INT64        ) ;
3257                             case GB_UINT64_code: return (GxB_EQ_GE_UINT64       ) ;
3258                             case GB_FP32_code  : return (GxB_EQ_GE_FP32         ) ;
3259                             case GB_FP64_code  : return (GxB_EQ_GE_FP64         ) ;
3260                             default : ;
3261                         }
3262                         break ;
3263 
3264                     case GB_ANY_opcode :
3265 
3266                         switch (xcode)
3267                         {
3268                             case GB_INT8_code  : return (GxB_ANY_GE_INT8        ) ;
3269                             case GB_UINT8_code : return (GxB_ANY_GE_UINT8       ) ;
3270                             case GB_INT16_code : return (GxB_ANY_GE_INT16       ) ;
3271                             case GB_UINT16_code: return (GxB_ANY_GE_UINT16      ) ;
3272                             case GB_INT32_code : return (GxB_ANY_GE_INT32       ) ;
3273                             case GB_UINT32_code: return (GxB_ANY_GE_UINT32      ) ;
3274                             case GB_INT64_code : return (GxB_ANY_GE_INT64       ) ;
3275                             case GB_UINT64_code: return (GxB_ANY_GE_UINT64      ) ;
3276                             case GB_FP32_code  : return (GxB_ANY_GE_FP32        ) ;
3277                             case GB_FP64_code  : return (GxB_ANY_GE_FP64        ) ;
3278                             default : ;
3279                         }
3280                         break ;
3281 
3282                     default : ;
3283                 }
3284                 break ;
3285 
3286             case GB_LE_opcode : // with (5 bool monoids) x (10 nonboolean types)
3287 
3288                 switch (add_opcode)
3289                 {
3290 
3291                     case GB_LOR_opcode :
3292 
3293                         switch (xcode)
3294                         {
3295                             case GB_INT8_code  : return (GxB_LOR_LE_INT8        ) ;
3296                             case GB_UINT8_code : return (GxB_LOR_LE_UINT8       ) ;
3297                             case GB_INT16_code : return (GxB_LOR_LE_INT16       ) ;
3298                             case GB_UINT16_code: return (GxB_LOR_LE_UINT16      ) ;
3299                             case GB_INT32_code : return (GxB_LOR_LE_INT32       ) ;
3300                             case GB_UINT32_code: return (GxB_LOR_LE_UINT32      ) ;
3301                             case GB_INT64_code : return (GxB_LOR_LE_INT64       ) ;
3302                             case GB_UINT64_code: return (GxB_LOR_LE_UINT64      ) ;
3303                             case GB_FP32_code  : return (GxB_LOR_LE_FP32        ) ;
3304                             case GB_FP64_code  : return (GxB_LOR_LE_FP64        ) ;
3305                             default : ;
3306                         }
3307                         break ;
3308 
3309                     case GB_LAND_opcode :
3310 
3311                         switch (xcode)
3312                         {
3313                             case GB_INT8_code  : return (GxB_LAND_LE_INT8       ) ;
3314                             case GB_UINT8_code : return (GxB_LAND_LE_UINT8      ) ;
3315                             case GB_INT16_code : return (GxB_LAND_LE_INT16      ) ;
3316                             case GB_UINT16_code: return (GxB_LAND_LE_UINT16     ) ;
3317                             case GB_INT32_code : return (GxB_LAND_LE_INT32      ) ;
3318                             case GB_UINT32_code: return (GxB_LAND_LE_UINT32     ) ;
3319                             case GB_INT64_code : return (GxB_LAND_LE_INT64      ) ;
3320                             case GB_UINT64_code: return (GxB_LAND_LE_UINT64     ) ;
3321                             case GB_FP32_code  : return (GxB_LAND_LE_FP32       ) ;
3322                             case GB_FP64_code  : return (GxB_LAND_LE_FP64       ) ;
3323                             default : ;
3324                         }
3325                         break ;
3326 
3327                     case GB_LXOR_opcode :
3328 
3329                         switch (xcode)
3330                         {
3331                             case GB_INT8_code  : return (GxB_LXOR_LE_INT8       ) ;
3332                             case GB_UINT8_code : return (GxB_LXOR_LE_UINT8      ) ;
3333                             case GB_INT16_code : return (GxB_LXOR_LE_INT16      ) ;
3334                             case GB_UINT16_code: return (GxB_LXOR_LE_UINT16     ) ;
3335                             case GB_INT32_code : return (GxB_LXOR_LE_INT32      ) ;
3336                             case GB_UINT32_code: return (GxB_LXOR_LE_UINT32     ) ;
3337                             case GB_INT64_code : return (GxB_LXOR_LE_INT64      ) ;
3338                             case GB_UINT64_code: return (GxB_LXOR_LE_UINT64     ) ;
3339                             case GB_FP32_code  : return (GxB_LXOR_LE_FP32       ) ;
3340                             case GB_FP64_code  : return (GxB_LXOR_LE_FP64       ) ;
3341                             default : ;
3342                         }
3343                         break ;
3344 
3345                     case GB_EQ_opcode :
3346 
3347                         switch (xcode)
3348                         {
3349                             case GB_INT8_code  : return (GxB_EQ_LE_INT8         ) ;
3350                             case GB_UINT8_code : return (GxB_EQ_LE_UINT8        ) ;
3351                             case GB_INT16_code : return (GxB_EQ_LE_INT16        ) ;
3352                             case GB_UINT16_code: return (GxB_EQ_LE_UINT16       ) ;
3353                             case GB_INT32_code : return (GxB_EQ_LE_INT32        ) ;
3354                             case GB_UINT32_code: return (GxB_EQ_LE_UINT32       ) ;
3355                             case GB_INT64_code : return (GxB_EQ_LE_INT64        ) ;
3356                             case GB_UINT64_code: return (GxB_EQ_LE_UINT64       ) ;
3357                             case GB_FP32_code  : return (GxB_EQ_LE_FP32         ) ;
3358                             case GB_FP64_code  : return (GxB_EQ_LE_FP64         ) ;
3359                             default : ;
3360                         }
3361                         break ;
3362 
3363                     case GB_ANY_opcode :
3364 
3365                         switch (xcode)
3366                         {
3367                             case GB_INT8_code  : return (GxB_ANY_LE_INT8        ) ;
3368                             case GB_UINT8_code : return (GxB_ANY_LE_UINT8       ) ;
3369                             case GB_INT16_code : return (GxB_ANY_LE_INT16       ) ;
3370                             case GB_UINT16_code: return (GxB_ANY_LE_UINT16      ) ;
3371                             case GB_INT32_code : return (GxB_ANY_LE_INT32       ) ;
3372                             case GB_UINT32_code: return (GxB_ANY_LE_UINT32      ) ;
3373                             case GB_INT64_code : return (GxB_ANY_LE_INT64       ) ;
3374                             case GB_UINT64_code: return (GxB_ANY_LE_UINT64      ) ;
3375                             case GB_FP32_code  : return (GxB_ANY_LE_FP32        ) ;
3376                             case GB_FP64_code  : return (GxB_ANY_LE_FP64        ) ;
3377                             default : ;
3378                         }
3379                         break ;
3380 
3381                     default : ;
3382                 }
3383                 break ;
3384 
3385             default : ;
3386         }
3387     }
3388     else
3389     {
3390 
3391         //----------------------------------------------------------------------
3392         // 55 purely Boolean semirings
3393         //----------------------------------------------------------------------
3394 
3395         // x,y,z are all Boolean, and all operators are Boolean
3396 
3397         switch (mult_opcode)
3398         {
3399 
3400             case GB_FIRST_opcode :
3401 
3402                 switch (add_opcode)
3403                 {
3404                     case GB_LOR_opcode        : return (GxB_LOR_FIRST_BOOL  ) ;
3405                     case GB_LAND_opcode       : return (GxB_LAND_FIRST_BOOL ) ;
3406                     case GB_LXOR_opcode       : return (GxB_LXOR_FIRST_BOOL ) ;
3407                     case GB_EQ_opcode         : return (GxB_EQ_FIRST_BOOL   ) ;
3408                     case GB_ANY_opcode        : return (GxB_ANY_FIRST_BOOL  ) ;
3409                     default : ;
3410                 }
3411                 break ;
3412 
3413             case GB_SECOND_opcode :
3414 
3415                 switch (add_opcode)
3416                 {
3417                     case GB_LOR_opcode        : return (GxB_LOR_SECOND_BOOL ) ;
3418                     case GB_LAND_opcode       : return (GxB_LAND_SECOND_BOOL) ;
3419                     case GB_LXOR_opcode       : return (GxB_LXOR_SECOND_BOOL) ;
3420                     case GB_EQ_opcode         : return (GxB_EQ_SECOND_BOOL  ) ;
3421                     case GB_ANY_opcode        : return (GxB_ANY_SECOND_BOOL ) ;
3422                     default : ;
3423                 }
3424                 break ;
3425 
3426             case GB_PAIR_opcode :
3427 
3428                 switch (add_opcode)
3429                 {
3430                     case GB_LOR_opcode        : return (GxB_LOR_PAIR_BOOL  ) ;
3431                     case GB_LAND_opcode       : return (GxB_LAND_PAIR_BOOL ) ;
3432                     case GB_LXOR_opcode       : return (GxB_LXOR_PAIR_BOOL ) ;
3433                     case GB_EQ_opcode         : return (GxB_EQ_PAIR_BOOL   ) ;
3434                     case GB_ANY_opcode        : return (GxB_ANY_PAIR_BOOL  ) ;
3435                     default : ;
3436                 }
3437                 break ;
3438 
3439             case GB_LOR_opcode :
3440 
3441                 switch (add_opcode)
3442                 {
3443                     case GB_LOR_opcode        : return (GxB_LOR_LOR_BOOL   ) ;
3444                     case GB_LAND_opcode       : return (GrB_LAND_LOR_SEMIRING_BOOL ) ;
3445                     case GB_LXOR_opcode       : return (GxB_LXOR_LOR_BOOL  ) ;
3446                     case GB_EQ_opcode         : return (GrB_LXNOR_LOR_SEMIRING_BOOL) ;
3447                     case GB_ANY_opcode        : return (GxB_ANY_LOR_BOOL   ) ;
3448                     default : ;
3449                 }
3450                 break ;
3451 
3452             case GB_LAND_opcode :
3453 
3454                 switch (add_opcode)
3455                 {
3456                     case GB_LOR_opcode        : return (GrB_LOR_LAND_SEMIRING_BOOL ) ;
3457                     case GB_LAND_opcode       : return (GxB_LAND_LAND_BOOL ) ;
3458                     case GB_LXOR_opcode       : return (GrB_LXOR_LAND_SEMIRING_BOOL) ;
3459                     case GB_EQ_opcode         : return (GxB_EQ_LAND_BOOL   ) ;
3460                     case GB_ANY_opcode        : return (GxB_ANY_LAND_BOOL  ) ;
3461                     default : ;
3462                 }
3463                 break ;
3464 
3465             case GB_LXOR_opcode :
3466 
3467                 switch (add_opcode)
3468                 {
3469                     case GB_LOR_opcode        : return (GxB_LOR_LXOR_BOOL  ) ;
3470                     case GB_LAND_opcode       : return (GxB_LAND_LXOR_BOOL ) ;
3471                     case GB_LXOR_opcode       : return (GxB_LXOR_LXOR_BOOL ) ;
3472                     case GB_EQ_opcode         : return (GxB_EQ_LXOR_BOOL   ) ;
3473                     case GB_ANY_opcode        : return (GxB_ANY_LXOR_BOOL  ) ;
3474                     default : ;
3475                 }
3476                 break ;
3477 
3478             case GB_EQ_opcode :
3479 
3480                 switch (add_opcode)
3481                 {
3482                     case GB_LOR_opcode        : return (GxB_LOR_EQ_BOOL ) ;
3483                     case GB_LAND_opcode       : return (GxB_LAND_EQ_BOOL) ;
3484                     case GB_LXOR_opcode       : return (GxB_LXOR_EQ_BOOL) ;
3485                     case GB_EQ_opcode         : return (GxB_EQ_EQ_BOOL  ) ;
3486                     case GB_ANY_opcode        : return (GxB_ANY_EQ_BOOL ) ;
3487                     default : ;
3488                 }
3489                 break ;
3490 
3491             case GB_GT_opcode :
3492 
3493                 switch (add_opcode)
3494                 {
3495                     case GB_LOR_opcode        : return (GxB_LOR_GT_BOOL ) ;
3496                     case GB_LAND_opcode       : return (GxB_LAND_GT_BOOL) ;
3497                     case GB_LXOR_opcode       : return (GxB_LXOR_GT_BOOL) ;
3498                     case GB_EQ_opcode         : return (GxB_EQ_GT_BOOL  ) ;
3499                     case GB_ANY_opcode        : return (GxB_ANY_GT_BOOL ) ;
3500                     default : ;
3501                 }
3502                 break ;
3503 
3504             case GB_LT_opcode :
3505 
3506                 switch (add_opcode)
3507                 {
3508                     case GB_LOR_opcode        : return (GxB_LOR_LT_BOOL ) ;
3509                     case GB_LAND_opcode       : return (GxB_LAND_LT_BOOL) ;
3510                     case GB_LXOR_opcode       : return (GxB_LXOR_LT_BOOL) ;
3511                     case GB_EQ_opcode         : return (GxB_EQ_LT_BOOL  ) ;
3512                     case GB_ANY_opcode        : return (GxB_ANY_LT_BOOL ) ;
3513                     default : ;
3514                 }
3515                 break ;
3516 
3517             case GB_GE_opcode :
3518 
3519                 switch (add_opcode)
3520                 {
3521                     case GB_LOR_opcode        : return (GxB_LOR_GE_BOOL ) ;
3522                     case GB_LAND_opcode       : return (GxB_LAND_GE_BOOL) ;
3523                     case GB_LXOR_opcode       : return (GxB_LXOR_GE_BOOL) ;
3524                     case GB_EQ_opcode         : return (GxB_EQ_GE_BOOL  ) ;
3525                     case GB_ANY_opcode        : return (GxB_ANY_GE_BOOL ) ;
3526                     default : ;
3527                 }
3528                 break ;
3529 
3530             case GB_LE_opcode :
3531 
3532                 switch (add_opcode)
3533                 {
3534                     case GB_LOR_opcode        : return (GxB_LOR_LE_BOOL ) ;
3535                     case GB_LAND_opcode       : return (GxB_LAND_LE_BOOL) ;
3536                     case GB_LXOR_opcode       : return (GxB_LXOR_LE_BOOL) ;
3537                     case GB_EQ_opcode         : return (GxB_EQ_LE_BOOL  ) ;
3538                     case GB_ANY_opcode        : return (GxB_ANY_LE_BOOL ) ;
3539                     default : ;
3540                 }
3541                 break ;
3542 
3543             default : ;
3544         }
3545     }
3546 
3547     //--------------------------------------------------------------------------
3548     // not a built-in semiring
3549     //--------------------------------------------------------------------------
3550 
3551     return (NULL) ;
3552 }
3553 
3554