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