Skip to content

Commit a39c806

Browse files
committed
Add (true) bitwise ops, bitwise and logical xor
1 parent 2b10af0 commit a39c806

File tree

4 files changed

+199
-154
lines changed

4 files changed

+199
-154
lines changed

numexpr/expressions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -451,10 +451,10 @@ def __bool__(self):
451451
__rshift__ = binop('rshift')
452452
__rrshift__ = binop('rshift', reversed=True)
453453

454-
# boolean operations
455-
456-
__and__ = binop('and', kind='bool')
457-
__or__ = binop('or', kind='bool')
454+
# bitwise or logical operations
455+
__and__ = binop('and')
456+
__or__ = binop('or')
457+
__xor__ = binop('xor')
458458

459459
__gt__ = binop('gt', kind='bool')
460460
__ge__ = binop('ge', kind='bool')

numexpr/interp_body.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@
220220
case OP_INVERT_BB: VEC_ARG1(b_dest = !b1);
221221
case OP_AND_BBB: VEC_ARG2(b_dest = (b1 && b2));
222222
case OP_OR_BBB: VEC_ARG2(b_dest = (b1 || b2));
223+
case OP_XOR_BBB: VEC_ARG2(b_dest = (b1 || b2) && !(b1 && b2) );
223224

224225
case OP_EQ_BBB: VEC_ARG2(b_dest = (b1 == b2));
225226
case OP_NE_BBB: VEC_ARG2(b_dest = (b1 != b2));
@@ -268,6 +269,11 @@
268269
case OP_RSHIFT_III: VEC_ARG2(i_dest = i1 >> i2);
269270

270271
case OP_WHERE_IBII: VEC_ARG3(i_dest = b1 ? i2 : i3);
272+
//Bitwise ops
273+
case OP_INVERT_II: VEC_ARG1(i_dest = ~i1);
274+
case OP_AND_III: VEC_ARG2(i_dest = (i1 & i2));
275+
case OP_OR_III: VEC_ARG2(i_dest = (i1 | i2));
276+
case OP_XOR_III: VEC_ARG2(i_dest = (i1 ^ i2));
271277

272278
/* Long */
273279
case OP_CAST_LI: VEC_ARG1(l_dest = (long long)(i1));
@@ -288,6 +294,11 @@
288294
case OP_RSHIFT_LLL: VEC_ARG2(l_dest = l1 >> l2);
289295

290296
case OP_WHERE_LBLL: VEC_ARG3(l_dest = b1 ? l2 : l3);
297+
//Bitwise ops
298+
case OP_INVERT_LL: VEC_ARG1(l_dest = ~l1);
299+
case OP_AND_LLL: VEC_ARG2(l_dest = (l1 & l2));
300+
case OP_OR_LLL: VEC_ARG2(l_dest = (l1 | l2));
301+
case OP_XOR_LLL: VEC_ARG2(l_dest = (l1 ^ l2));
291302

292303
/* Float */
293304
case OP_CAST_FI: VEC_ARG1(f_dest = (float)(i1));

numexpr/opcodes.hpp

Lines changed: 161 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -26,168 +26,179 @@ OPCODE(1, OP_COPY_BB, "copy_bb", Tb, Tb, T0, T0)
2626
OPCODE(2, OP_INVERT_BB, "invert_bb", Tb, Tb, T0, T0)
2727
OPCODE(3, OP_AND_BBB, "and_bbb", Tb, Tb, Tb, T0)
2828
OPCODE(4, OP_OR_BBB, "or_bbb", Tb, Tb, Tb, T0)
29-
30-
OPCODE(5, OP_EQ_BBB, "eq_bbb", Tb, Tb, Tb, T0)
31-
OPCODE(6, OP_NE_BBB, "ne_bbb", Tb, Tb, Tb, T0)
32-
33-
OPCODE(7, OP_GT_BII, "gt_bii", Tb, Ti, Ti, T0)
34-
OPCODE(8, OP_GE_BII, "ge_bii", Tb, Ti, Ti, T0)
35-
OPCODE(9, OP_EQ_BII, "eq_bii", Tb, Ti, Ti, T0)
36-
OPCODE(10, OP_NE_BII, "ne_bii", Tb, Ti, Ti, T0)
37-
38-
OPCODE(11, OP_GT_BLL, "gt_bll", Tb, Tl, Tl, T0)
39-
OPCODE(12, OP_GE_BLL, "ge_bll", Tb, Tl, Tl, T0)
40-
OPCODE(13, OP_EQ_BLL, "eq_bll", Tb, Tl, Tl, T0)
41-
OPCODE(14, OP_NE_BLL, "ne_bll", Tb, Tl, Tl, T0)
42-
43-
OPCODE(15, OP_GT_BFF, "gt_bff", Tb, Tf, Tf, T0)
44-
OPCODE(16, OP_GE_BFF, "ge_bff", Tb, Tf, Tf, T0)
45-
OPCODE(17, OP_EQ_BFF, "eq_bff", Tb, Tf, Tf, T0)
46-
OPCODE(18, OP_NE_BFF, "ne_bff", Tb, Tf, Tf, T0)
47-
48-
OPCODE(19, OP_GT_BDD, "gt_bdd", Tb, Td, Td, T0)
49-
OPCODE(20, OP_GE_BDD, "ge_bdd", Tb, Td, Td, T0)
50-
OPCODE(21, OP_EQ_BDD, "eq_bdd", Tb, Td, Td, T0)
51-
OPCODE(22, OP_NE_BDD, "ne_bdd", Tb, Td, Td, T0)
52-
53-
OPCODE(23, OP_GT_BSS, "gt_bss", Tb, Ts, Ts, T0)
54-
OPCODE(24, OP_GE_BSS, "ge_bss", Tb, Ts, Ts, T0)
55-
OPCODE(25, OP_EQ_BSS, "eq_bss", Tb, Ts, Ts, T0)
56-
OPCODE(26, OP_NE_BSS, "ne_bss", Tb, Ts, Ts, T0)
57-
58-
OPCODE(27, OP_CAST_IB, "cast_ib", Ti, Tb, T0, T0)
59-
OPCODE(28, OP_COPY_II, "copy_ii", Ti, Ti, T0, T0)
60-
OPCODE(29, OP_ONES_LIKE_II, "ones_like_ii", Ti, T0, T0, T0)
61-
OPCODE(30, OP_NEG_II, "neg_ii", Ti, Ti, T0, T0)
62-
OPCODE(31, OP_ADD_III, "add_iii", Ti, Ti, Ti, T0)
63-
OPCODE(32, OP_SUB_III, "sub_iii", Ti, Ti, Ti, T0)
64-
OPCODE(33, OP_MUL_III, "mul_iii", Ti, Ti, Ti, T0)
65-
OPCODE(34, OP_DIV_III, "div_iii", Ti, Ti, Ti, T0)
66-
OPCODE(35, OP_POW_III, "pow_iii", Ti, Ti, Ti, T0)
67-
OPCODE(36, OP_MOD_III, "mod_iii", Ti, Ti, Ti, T0)
68-
69-
OPCODE(37, OP_LSHIFT_III, "lshift_iii", Ti, Ti, Ti, T0)
70-
OPCODE(38, OP_RSHIFT_III, "rshift_iii", Ti, Ti, Ti, T0)
71-
72-
OPCODE(39, OP_WHERE_IBII, "where_ibii", Ti, Tb, Ti, Ti)
73-
74-
OPCODE(40, OP_CAST_LI, "cast_li", Tl, Ti, T0, T0)
75-
OPCODE(41, OP_COPY_LL, "copy_ll", Tl, Tl, T0, T0)
76-
OPCODE(42, OP_ONES_LIKE_LL, "ones_like_ll", Tl, T0, T0, T0)
77-
OPCODE(43, OP_NEG_LL, "neg_ll", Tl, Tl, T0, T0)
78-
OPCODE(44, OP_ADD_LLL, "add_lll", Tl, Tl, Tl, T0)
79-
OPCODE(45, OP_SUB_LLL, "sub_lll", Tl, Tl, Tl, T0)
80-
OPCODE(46, OP_MUL_LLL, "mul_lll", Tl, Tl, Tl, T0)
81-
OPCODE(47, OP_DIV_LLL, "div_lll", Tl, Tl, Tl, T0)
82-
OPCODE(48, OP_POW_LLL, "pow_lll", Tl, Tl, Tl, T0)
83-
OPCODE(49, OP_MOD_LLL, "mod_lll", Tl, Tl, Tl, T0)
84-
85-
OPCODE(50, OP_LSHIFT_LLL, "lshift_lll", Tl, Tl, Tl, T0)
86-
OPCODE(51, OP_RSHIFT_LLL, "rshift_lll", Tl, Tl, Tl, T0)
87-
88-
OPCODE(52, OP_WHERE_LBLL, "where_lbll", Tl, Tb, Tl, Tl)
89-
90-
OPCODE(53, OP_CAST_FI, "cast_fi", Tf, Ti, T0, T0)
91-
OPCODE(54, OP_CAST_FL, "cast_fl", Tf, Tl, T0, T0)
92-
OPCODE(55, OP_COPY_FF, "copy_ff", Tf, Tf, T0, T0)
93-
OPCODE(56, OP_ONES_LIKE_FF, "ones_like_ff", Tf, T0, T0, T0)
94-
OPCODE(57, OP_NEG_FF, "neg_ff", Tf, Tf, T0, T0)
95-
OPCODE(58, OP_ADD_FFF, "add_fff", Tf, Tf, Tf, T0)
96-
OPCODE(59, OP_SUB_FFF, "sub_fff", Tf, Tf, Tf, T0)
97-
OPCODE(60, OP_MUL_FFF, "mul_fff", Tf, Tf, Tf, T0)
98-
OPCODE(61, OP_DIV_FFF, "div_fff", Tf, Tf, Tf, T0)
99-
OPCODE(62, OP_POW_FFF, "pow_fff", Tf, Tf, Tf, T0)
100-
OPCODE(63, OP_MOD_FFF, "mod_fff", Tf, Tf, Tf, T0)
101-
OPCODE(64, OP_SQRT_FF, "sqrt_ff", Tf, Tf, T0, T0)
102-
OPCODE(65, OP_WHERE_FBFF, "where_fbff", Tf, Tb, Tf, Tf)
103-
OPCODE(66, OP_FUNC_FFN, "func_ffn", Tf, Tf, Tn, T0)
104-
OPCODE(67, OP_FUNC_FFFN, "func_fffn", Tf, Tf, Tf, Tn)
105-
106-
OPCODE(68, OP_CAST_DI, "cast_di", Td, Ti, T0, T0)
107-
OPCODE(69, OP_CAST_DL, "cast_dl", Td, Tl, T0, T0)
108-
OPCODE(70, OP_CAST_DF, "cast_df", Td, Tf, T0, T0)
109-
OPCODE(71, OP_COPY_DD, "copy_dd", Td, Td, T0, T0)
110-
OPCODE(72, OP_ONES_LIKE_DD, "ones_like_dd", Td, T0, T0, T0)
111-
OPCODE(73, OP_NEG_DD, "neg_dd", Td, Td, T0, T0)
112-
OPCODE(74, OP_ADD_DDD, "add_ddd", Td, Td, Td, T0)
113-
OPCODE(75, OP_SUB_DDD, "sub_ddd", Td, Td, Td, T0)
114-
OPCODE(76, OP_MUL_DDD, "mul_ddd", Td, Td, Td, T0)
115-
OPCODE(77, OP_DIV_DDD, "div_ddd", Td, Td, Td, T0)
116-
OPCODE(78, OP_POW_DDD, "pow_ddd", Td, Td, Td, T0)
117-
OPCODE(79, OP_MOD_DDD, "mod_ddd", Td, Td, Td, T0)
118-
OPCODE(80, OP_SQRT_DD, "sqrt_dd", Td, Td, T0, T0)
119-
OPCODE(81, OP_WHERE_DBDD, "where_dbdd", Td, Tb, Td, Td)
120-
OPCODE(82, OP_FUNC_DDN, "func_ddn", Td, Td, Tn, T0)
121-
OPCODE(83, OP_FUNC_DDDN, "func_dddn", Td, Td, Td, Tn)
122-
123-
OPCODE(84, OP_EQ_BCC, "eq_bcc", Tb, Tc, Tc, T0)
124-
OPCODE(85, OP_NE_BCC, "ne_bcc", Tb, Tc, Tc, T0)
125-
126-
OPCODE(86, OP_CAST_CI, "cast_ci", Tc, Ti, T0, T0)
127-
OPCODE(87, OP_CAST_CL, "cast_cl", Tc, Tl, T0, T0)
128-
OPCODE(88, OP_CAST_CF, "cast_cf", Tc, Tf, T0, T0)
129-
OPCODE(89, OP_CAST_CD, "cast_cd", Tc, Td, T0, T0)
130-
OPCODE(90, OP_ONES_LIKE_CC, "ones_like_cc", Tc, T0, T0, T0)
131-
OPCODE(91, OP_COPY_CC, "copy_cc", Tc, Tc, T0, T0)
132-
OPCODE(92, OP_NEG_CC, "neg_cc", Tc, Tc, T0, T0)
133-
OPCODE(93, OP_ADD_CCC, "add_ccc", Tc, Tc, Tc, T0)
134-
OPCODE(94, OP_SUB_CCC, "sub_ccc", Tc, Tc, Tc, T0)
135-
OPCODE(95, OP_MUL_CCC, "mul_ccc", Tc, Tc, Tc, T0)
136-
OPCODE(96, OP_DIV_CCC, "div_ccc", Tc, Tc, Tc, T0)
137-
OPCODE(97, OP_WHERE_CBCC, "where_cbcc", Tc, Tb, Tc, Tc)
138-
OPCODE(98, OP_FUNC_CCN, "func_ccn", Tc, Tc, Tn, T0)
139-
OPCODE(99, OP_FUNC_CCCN, "func_cccn", Tc, Tc, Tc, Tn)
140-
141-
OPCODE(100, OP_REAL_DC, "real_dc", Td, Tc, T0, T0)
142-
OPCODE(101, OP_IMAG_DC, "imag_dc", Td, Tc, T0, T0)
143-
OPCODE(102, OP_COMPLEX_CDD, "complex_cdd", Tc, Td, Td, T0)
144-
145-
OPCODE(103, OP_COPY_SS, "copy_ss", Ts, Ts, T0, T0)
146-
147-
OPCODE(104, OP_WHERE_BBBB, "where_bbbb", Tb, Tb, Tb, Tb)
148-
149-
OPCODE(105, OP_CONTAINS_BSS, "contains_bss", Tb, Ts, Ts, T0)
29+
OPCODE(5, OP_XOR_BBB, "xor_bbb", Tb, Tb, Tb, T0)
30+
31+
OPCODE(6, OP_EQ_BBB, "eq_bbb", Tb, Tb, Tb, T0)
32+
OPCODE(7, OP_NE_BBB, "ne_bbb", Tb, Tb, Tb, T0)
33+
34+
OPCODE(8, OP_GT_BII, "gt_bii", Tb, Ti, Ti, T0)
35+
OPCODE(9, OP_GE_BII, "ge_bii", Tb, Ti, Ti, T0)
36+
OPCODE(10, OP_EQ_BII, "eq_bii", Tb, Ti, Ti, T0)
37+
OPCODE(11, OP_NE_BII, "ne_bii", Tb, Ti, Ti, T0)
38+
39+
OPCODE(12, OP_GT_BLL, "gt_bll", Tb, Tl, Tl, T0)
40+
OPCODE(13, OP_GE_BLL, "ge_bll", Tb, Tl, Tl, T0)
41+
OPCODE(14, OP_EQ_BLL, "eq_bll", Tb, Tl, Tl, T0)
42+
OPCODE(15, OP_NE_BLL, "ne_bll", Tb, Tl, Tl, T0)
43+
44+
OPCODE(16, OP_GT_BFF, "gt_bff", Tb, Tf, Tf, T0)
45+
OPCODE(17, OP_GE_BFF, "ge_bff", Tb, Tf, Tf, T0)
46+
OPCODE(18, OP_EQ_BFF, "eq_bff", Tb, Tf, Tf, T0)
47+
OPCODE(19, OP_NE_BFF, "ne_bff", Tb, Tf, Tf, T0)
48+
49+
OPCODE(20, OP_GT_BDD, "gt_bdd", Tb, Td, Td, T0)
50+
OPCODE(21, OP_GE_BDD, "ge_bdd", Tb, Td, Td, T0)
51+
OPCODE(22, OP_EQ_BDD, "eq_bdd", Tb, Td, Td, T0)
52+
OPCODE(23, OP_NE_BDD, "ne_bdd", Tb, Td, Td, T0)
53+
54+
OPCODE(24, OP_GT_BSS, "gt_bss", Tb, Ts, Ts, T0)
55+
OPCODE(25, OP_GE_BSS, "ge_bss", Tb, Ts, Ts, T0)
56+
OPCODE(26, OP_EQ_BSS, "eq_bss", Tb, Ts, Ts, T0)
57+
OPCODE(27, OP_NE_BSS, "ne_bss", Tb, Ts, Ts, T0)
58+
59+
OPCODE(28, OP_CAST_IB, "cast_ib", Ti, Tb, T0, T0)
60+
OPCODE(29, OP_COPY_II, "copy_ii", Ti, Ti, T0, T0)
61+
OPCODE(30, OP_ONES_LIKE_II, "ones_like_ii", Ti, T0, T0, T0)
62+
OPCODE(31, OP_NEG_II, "neg_ii", Ti, Ti, T0, T0)
63+
OPCODE(32, OP_ADD_III, "add_iii", Ti, Ti, Ti, T0)
64+
OPCODE(33, OP_SUB_III, "sub_iii", Ti, Ti, Ti, T0)
65+
OPCODE(34, OP_MUL_III, "mul_iii", Ti, Ti, Ti, T0)
66+
OPCODE(35, OP_DIV_III, "div_iii", Ti, Ti, Ti, T0)
67+
OPCODE(36, OP_POW_III, "pow_iii", Ti, Ti, Ti, T0)
68+
OPCODE(37, OP_MOD_III, "mod_iii", Ti, Ti, Ti, T0)
69+
70+
OPCODE(38, OP_LSHIFT_III, "lshift_iii", Ti, Ti, Ti, T0)
71+
OPCODE(39, OP_RSHIFT_III, "rshift_iii", Ti, Ti, Ti, T0)
72+
73+
OPCODE(40, OP_WHERE_IBII, "where_ibii", Ti, Tb, Ti, Ti)
74+
// Bitwise ops
75+
OPCODE(41, OP_INVERT_II, "invert_ii", Ti, Ti, T0, T0)
76+
OPCODE(42, OP_AND_III, "and_iii", Ti, Ti, Ti, T0)
77+
OPCODE(43, OP_OR_III, "or_iii", Ti, Ti, Ti, T0)
78+
OPCODE(44, OP_XOR_III, "xor_iii", Ti, Ti, Ti, T0)
79+
80+
OPCODE(45, OP_CAST_LI, "cast_li", Tl, Ti, T0, T0)
81+
OPCODE(46, OP_COPY_LL, "copy_ll", Tl, Tl, T0, T0)
82+
OPCODE(47, OP_ONES_LIKE_LL, "ones_like_ll", Tl, T0, T0, T0)
83+
OPCODE(48, OP_NEG_LL, "neg_ll", Tl, Tl, T0, T0)
84+
OPCODE(49, OP_ADD_LLL, "add_lll", Tl, Tl, Tl, T0)
85+
OPCODE(50, OP_SUB_LLL, "sub_lll", Tl, Tl, Tl, T0)
86+
OPCODE(51, OP_MUL_LLL, "mul_lll", Tl, Tl, Tl, T0)
87+
OPCODE(52, OP_DIV_LLL, "div_lll", Tl, Tl, Tl, T0)
88+
OPCODE(53, OP_POW_LLL, "pow_lll", Tl, Tl, Tl, T0)
89+
OPCODE(54, OP_MOD_LLL, "mod_lll", Tl, Tl, Tl, T0)
90+
91+
OPCODE(55, OP_LSHIFT_LLL, "lshift_lll", Tl, Tl, Tl, T0)
92+
OPCODE(56, OP_RSHIFT_LLL, "rshift_lll", Tl, Tl, Tl, T0)
93+
94+
OPCODE(57, OP_WHERE_LBLL, "where_lbll", Tl, Tb, Tl, Tl)
95+
// Bitwise ops
96+
OPCODE(58, OP_INVERT_LL, "invert_ll", Tl, Tl, T0, T0)
97+
OPCODE(59, OP_AND_LLL, "and_lll", Tl, Tl, Tl, T0)
98+
OPCODE(60, OP_OR_LLL, "or_lll", Tl, Tl, Tl, T0)
99+
OPCODE(61, OP_XOR_LLL, "xor_lll", Tl, Tl, Tl, T0)
100+
101+
OPCODE(62, OP_CAST_FI, "cast_fi", Tf, Ti, T0, T0)
102+
OPCODE(63, OP_CAST_FL, "cast_fl", Tf, Tl, T0, T0)
103+
OPCODE(64, OP_COPY_FF, "copy_ff", Tf, Tf, T0, T0)
104+
OPCODE(65, OP_ONES_LIKE_FF, "ones_like_ff", Tf, T0, T0, T0)
105+
OPCODE(66, OP_NEG_FF, "neg_ff", Tf, Tf, T0, T0)
106+
OPCODE(67, OP_ADD_FFF, "add_fff", Tf, Tf, Tf, T0)
107+
OPCODE(68, OP_SUB_FFF, "sub_fff", Tf, Tf, Tf, T0)
108+
OPCODE(69, OP_MUL_FFF, "mul_fff", Tf, Tf, Tf, T0)
109+
OPCODE(70, OP_DIV_FFF, "div_fff", Tf, Tf, Tf, T0)
110+
OPCODE(71, OP_POW_FFF, "pow_fff", Tf, Tf, Tf, T0)
111+
OPCODE(72, OP_MOD_FFF, "mod_fff", Tf, Tf, Tf, T0)
112+
OPCODE(73, OP_SQRT_FF, "sqrt_ff", Tf, Tf, T0, T0)
113+
OPCODE(74, OP_WHERE_FBFF, "where_fbff", Tf, Tb, Tf, Tf)
114+
OPCODE(75, OP_FUNC_FFN, "func_ffn", Tf, Tf, Tn, T0)
115+
OPCODE(76, OP_FUNC_FFFN, "func_fffn", Tf, Tf, Tf, Tn)
116+
117+
OPCODE(77, OP_CAST_DI, "cast_di", Td, Ti, T0, T0)
118+
OPCODE(78, OP_CAST_DL, "cast_dl", Td, Tl, T0, T0)
119+
OPCODE(79, OP_CAST_DF, "cast_df", Td, Tf, T0, T0)
120+
OPCODE(80, OP_COPY_DD, "copy_dd", Td, Td, T0, T0)
121+
OPCODE(81, OP_ONES_LIKE_DD, "ones_like_dd", Td, T0, T0, T0)
122+
OPCODE(82, OP_NEG_DD, "neg_dd", Td, Td, T0, T0)
123+
OPCODE(83, OP_ADD_DDD, "add_ddd", Td, Td, Td, T0)
124+
OPCODE(84, OP_SUB_DDD, "sub_ddd", Td, Td, Td, T0)
125+
OPCODE(85, OP_MUL_DDD, "mul_ddd", Td, Td, Td, T0)
126+
OPCODE(86, OP_DIV_DDD, "div_ddd", Td, Td, Td, T0)
127+
OPCODE(87, OP_POW_DDD, "pow_ddd", Td, Td, Td, T0)
128+
OPCODE(88, OP_MOD_DDD, "mod_ddd", Td, Td, Td, T0)
129+
OPCODE(89, OP_SQRT_DD, "sqrt_dd", Td, Td, T0, T0)
130+
OPCODE(90, OP_WHERE_DBDD, "where_dbdd", Td, Tb, Td, Td)
131+
OPCODE(91, OP_FUNC_DDN, "func_ddn", Td, Td, Tn, T0)
132+
OPCODE(92, OP_FUNC_DDDN, "func_dddn", Td, Td, Td, Tn)
133+
134+
OPCODE(93, OP_EQ_BCC, "eq_bcc", Tb, Tc, Tc, T0)
135+
OPCODE(94, OP_NE_BCC, "ne_bcc", Tb, Tc, Tc, T0)
136+
137+
OPCODE(95, OP_CAST_CI, "cast_ci", Tc, Ti, T0, T0)
138+
OPCODE(96, OP_CAST_CL, "cast_cl", Tc, Tl, T0, T0)
139+
OPCODE(97, OP_CAST_CF, "cast_cf", Tc, Tf, T0, T0)
140+
OPCODE(98, OP_CAST_CD, "cast_cd", Tc, Td, T0, T0)
141+
OPCODE(99, OP_ONES_LIKE_CC, "ones_like_cc", Tc, T0, T0, T0)
142+
OPCODE(100, OP_COPY_CC, "copy_cc", Tc, Tc, T0, T0)
143+
OPCODE(101, OP_NEG_CC, "neg_cc", Tc, Tc, T0, T0)
144+
OPCODE(102, OP_ADD_CCC, "add_ccc", Tc, Tc, Tc, T0)
145+
OPCODE(103, OP_SUB_CCC, "sub_ccc", Tc, Tc, Tc, T0)
146+
OPCODE(104, OP_MUL_CCC, "mul_ccc", Tc, Tc, Tc, T0)
147+
OPCODE(105, OP_DIV_CCC, "div_ccc", Tc, Tc, Tc, T0)
148+
OPCODE(106, OP_WHERE_CBCC, "where_cbcc", Tc, Tb, Tc, Tc)
149+
OPCODE(107, OP_FUNC_CCN, "func_ccn", Tc, Tc, Tn, T0)
150+
OPCODE(108, OP_FUNC_CCCN, "func_cccn", Tc, Tc, Tc, Tn)
151+
152+
OPCODE(109, OP_REAL_DC, "real_dc", Td, Tc, T0, T0)
153+
OPCODE(110, OP_IMAG_DC, "imag_dc", Td, Tc, T0, T0)
154+
OPCODE(111, OP_COMPLEX_CDD, "complex_cdd", Tc, Td, Td, T0)
155+
156+
OPCODE(112, OP_COPY_SS, "copy_ss", Ts, Ts, T0, T0)
157+
158+
OPCODE(113, OP_WHERE_BBBB, "where_bbbb", Tb, Tb, Tb, Tb)
159+
160+
OPCODE(114, OP_CONTAINS_BSS, "contains_bss", Tb, Ts, Ts, T0)
150161
//Boolean outputs
151-
OPCODE(106, OP_FUNC_BDN, "func_bdn", Tb, Td, Tn, T0)
152-
OPCODE(107, OP_FUNC_BFN, "func_bfn", Tb, Tf, Tn, T0)
153-
OPCODE(108, OP_FUNC_BCN, "func_bcn", Tb, Tc, Tn, T0)
162+
OPCODE(115, OP_FUNC_BDN, "func_bdn", Tb, Td, Tn, T0)
163+
OPCODE(116, OP_FUNC_BFN, "func_bfn", Tb, Tf, Tn, T0)
164+
OPCODE(117, OP_FUNC_BCN, "func_bcn", Tb, Tc, Tn, T0)
154165

155166
// Reductions always have to be at the end - parts of the code
156167
// use > OP_REDUCTION to decide whether operation is a reduction
157-
OPCODE(109, OP_REDUCTION, NULL, T0, T0, T0, T0)
168+
OPCODE(118, OP_REDUCTION, NULL, T0, T0, T0, T0)
158169

159170
/* Last argument in a reduction is the axis of the array the
160171
reduction should be applied along. */
161172

162-
OPCODE(110, OP_SUM_IIN, "sum_iin", Ti, Ti, Tn, T0)
163-
OPCODE(111, OP_SUM_LLN, "sum_lln", Tl, Tl, Tn, T0)
164-
OPCODE(112, OP_SUM_FFN, "sum_ffn", Tf, Tf, Tn, T0)
165-
OPCODE(113, OP_SUM_DDN, "sum_ddn", Td, Td, Tn, T0)
166-
OPCODE(114, OP_SUM_CCN, "sum_ccn", Tc, Tc, Tn, T0)
167-
168-
OPCODE(115, OP_PROD, NULL, T0, T0, T0, T0)
169-
OPCODE(116, OP_PROD_IIN, "prod_iin", Ti, Ti, Tn, T0)
170-
OPCODE(117, OP_PROD_LLN, "prod_lln", Tl, Tl, Tn, T0)
171-
OPCODE(118, OP_PROD_FFN, "prod_ffn", Tf, Tf, Tn, T0)
172-
OPCODE(119, OP_PROD_DDN, "prod_ddn", Td, Td, Tn, T0)
173-
OPCODE(120, OP_PROD_CCN, "prod_ccn", Tc, Tc, Tn, T0)
174-
175-
OPCODE(121, OP_MIN, NULL, T0, T0, T0, T0)
176-
OPCODE(122, OP_MIN_IIN, "min_iin", Ti, Ti, Tn, T0)
177-
OPCODE(123, OP_MIN_LLN, "min_lln", Tl, Tl, Tn, T0)
178-
OPCODE(124, OP_MIN_FFN, "min_ffn", Tf, Tf, Tn, T0)
179-
OPCODE(125, OP_MIN_DDN, "min_ddn", Td, Td, Tn, T0)
180-
181-
OPCODE(126, OP_MAX, NULL, T0, T0, T0, T0)
182-
OPCODE(127, OP_MAX_IIN, "max_iin", Ti, Ti, Tn, T0)
183-
OPCODE(128, OP_MAX_LLN, "max_lln", Tl, Tl, Tn, T0)
184-
OPCODE(129, OP_MAX_FFN, "max_ffn", Tf, Tf, Tn, T0)
185-
OPCODE(130, OP_MAX_DDN, "max_ddn", Td, Td, Tn, T0)
173+
OPCODE(119, OP_SUM_IIN, "sum_iin", Ti, Ti, Tn, T0)
174+
OPCODE(120, OP_SUM_LLN, "sum_lln", Tl, Tl, Tn, T0)
175+
OPCODE(121, OP_SUM_FFN, "sum_ffn", Tf, Tf, Tn, T0)
176+
OPCODE(122, OP_SUM_DDN, "sum_ddn", Td, Td, Tn, T0)
177+
OPCODE(123, OP_SUM_CCN, "sum_ccn", Tc, Tc, Tn, T0)
178+
179+
OPCODE(124, OP_PROD, NULL, T0, T0, T0, T0)
180+
OPCODE(125, OP_PROD_IIN, "prod_iin", Ti, Ti, Tn, T0)
181+
OPCODE(126, OP_PROD_LLN, "prod_lln", Tl, Tl, Tn, T0)
182+
OPCODE(127, OP_PROD_FFN, "prod_ffn", Tf, Tf, Tn, T0)
183+
OPCODE(128, OP_PROD_DDN, "prod_ddn", Td, Td, Tn, T0)
184+
OPCODE(129, OP_PROD_CCN, "prod_ccn", Tc, Tc, Tn, T0)
185+
186+
OPCODE(130, OP_MIN, NULL, T0, T0, T0, T0)
187+
OPCODE(131, OP_MIN_IIN, "min_iin", Ti, Ti, Tn, T0)
188+
OPCODE(132, OP_MIN_LLN, "min_lln", Tl, Tl, Tn, T0)
189+
OPCODE(133, OP_MIN_FFN, "min_ffn", Tf, Tf, Tn, T0)
190+
OPCODE(134, OP_MIN_DDN, "min_ddn", Td, Td, Tn, T0)
191+
192+
OPCODE(135, OP_MAX, NULL, T0, T0, T0, T0)
193+
OPCODE(136, OP_MAX_IIN, "max_iin", Ti, Ti, Tn, T0)
194+
OPCODE(137, OP_MAX_LLN, "max_lln", Tl, Tl, Tn, T0)
195+
OPCODE(138, OP_MAX_FFN, "max_ffn", Tf, Tf, Tn, T0)
196+
OPCODE(139, OP_MAX_DDN, "max_ddn", Td, Td, Tn, T0)
186197

187198
/*
188199
When we get to 255, will maybe have to change code again
189200
(change latin_1 encoding in necompiler.py, use something
190201
other than unsigned char for OPCODE table)
191202
*/
192203
/* Should be the last opcode */
193-
OPCODE(131, OP_END, NULL, T0, T0, T0, T0)
204+
OPCODE(140, OP_END, NULL, T0, T0, T0, T0)

0 commit comments

Comments
 (0)