1 //------------------------------------------------------------------------------
2 // GB_AxB_bitwise_factory.c: switch factory for C=A*B (bitwise monoids)
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 // A template file #include'd in GB_AxB_factory.c, which calls up to 16
11 // bitwise semirings.  The multiply operators are bor, band, bxor, or bxnor,
12 // as defined by GB_MNAME.
13 
14 {
15     switch (add_opcode)
16     {
17 
18         //----------------------------------------------------------------------
19         case GB_BOR_opcode :     // z = (x | y), bitwise or
20         //----------------------------------------------------------------------
21 
22             switch (zcode)
23             {
24                 case GB_UINT8_code  : GB_AxB_WORKER (_bor, GB_MNAME, _uint8 )
25                 case GB_UINT16_code : GB_AxB_WORKER (_bor, GB_MNAME, _uint16)
26                 case GB_UINT32_code : GB_AxB_WORKER (_bor, GB_MNAME, _uint32)
27                 case GB_UINT64_code : GB_AxB_WORKER (_bor, GB_MNAME, _uint64)
28                 default: ;
29             }
30             break ;
31 
32         //----------------------------------------------------------------------
33         case GB_BAND_opcode :    // z = (x & y), bitwise and
34         //----------------------------------------------------------------------
35 
36             switch (zcode)
37             {
38                 case GB_UINT8_code  : GB_AxB_WORKER (_band, GB_MNAME, _uint8 )
39                 case GB_UINT16_code : GB_AxB_WORKER (_band, GB_MNAME, _uint16)
40                 case GB_UINT32_code : GB_AxB_WORKER (_band, GB_MNAME, _uint32)
41                 case GB_UINT64_code : GB_AxB_WORKER (_band, GB_MNAME, _uint64)
42                 default: ;
43             }
44             break ;
45 
46         //----------------------------------------------------------------------
47         case GB_BXOR_opcode :    // z = (x ^ y), bitwise xor
48         //----------------------------------------------------------------------
49 
50             switch (zcode)
51             {
52                 case GB_UINT8_code  : GB_AxB_WORKER (_bxor, GB_MNAME, _uint8 )
53                 case GB_UINT16_code : GB_AxB_WORKER (_bxor, GB_MNAME, _uint16)
54                 case GB_UINT32_code : GB_AxB_WORKER (_bxor, GB_MNAME, _uint32)
55                 case GB_UINT64_code : GB_AxB_WORKER (_bxor, GB_MNAME, _uint64)
56                 default: ;
57             }
58             break ;
59 
60         //----------------------------------------------------------------------
61         case GB_BXNOR_opcode :   // z = ~(x ^ y), bitwise xnor
62         //----------------------------------------------------------------------
63 
64             switch (zcode)
65             {
66                 case GB_UINT8_code  : GB_AxB_WORKER (_bxnor, GB_MNAME, _uint8 )
67                 case GB_UINT16_code : GB_AxB_WORKER (_bxnor, GB_MNAME, _uint16)
68                 case GB_UINT32_code : GB_AxB_WORKER (_bxnor, GB_MNAME, _uint32)
69                 case GB_UINT64_code : GB_AxB_WORKER (_bxnor, GB_MNAME, _uint64)
70                 default: ;
71             }
72             break ;
73 
74         default: ;
75     }
76 }
77 
78 #undef GB_MNAME
79 
80