py/runtime0.h: Move relational ops to the beginning of mp_binary_op_t.
This is to allow to encode arithmetic operations more efficiently, in preparation to introduction of __rOP__ method support.
This commit is contained in:
parent
5c603bd0fd
commit
d4d1c45a55
@ -221,7 +221,7 @@ mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i
|
|||||||
return mp_obj_new_float(flhs / frhs);
|
return mp_obj_new_float(flhs / frhs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} else if (op <= MP_BINARY_OP_INPLACE_POWER) {
|
} else if (op >= MP_BINARY_OP_OR) {
|
||||||
mp_obj_int_t *res = mp_obj_int_new_mpz();
|
mp_obj_int_t *res = mp_obj_int_new_mpz();
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
@ -54,6 +54,22 @@ typedef enum {
|
|||||||
} mp_unary_op_t;
|
} mp_unary_op_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
// Relational operations, should return a bool
|
||||||
|
MP_BINARY_OP_LESS,
|
||||||
|
MP_BINARY_OP_MORE,
|
||||||
|
MP_BINARY_OP_EQUAL,
|
||||||
|
MP_BINARY_OP_LESS_EQUAL,
|
||||||
|
MP_BINARY_OP_MORE_EQUAL,
|
||||||
|
|
||||||
|
MP_BINARY_OP_NOT_EQUAL,
|
||||||
|
MP_BINARY_OP_IN,
|
||||||
|
MP_BINARY_OP_IS,
|
||||||
|
MP_BINARY_OP_EXCEPTION_MATCH,
|
||||||
|
// these are not supported by the runtime and must be synthesised by the emitter
|
||||||
|
MP_BINARY_OP_NOT_IN,
|
||||||
|
MP_BINARY_OP_IS_NOT,
|
||||||
|
|
||||||
|
// Arithmetic operations
|
||||||
MP_BINARY_OP_OR,
|
MP_BINARY_OP_OR,
|
||||||
MP_BINARY_OP_XOR,
|
MP_BINARY_OP_XOR,
|
||||||
MP_BINARY_OP_AND,
|
MP_BINARY_OP_AND,
|
||||||
@ -83,21 +99,6 @@ typedef enum {
|
|||||||
MP_BINARY_OP_INPLACE_TRUE_DIVIDE,
|
MP_BINARY_OP_INPLACE_TRUE_DIVIDE,
|
||||||
MP_BINARY_OP_INPLACE_MODULO,
|
MP_BINARY_OP_INPLACE_MODULO,
|
||||||
MP_BINARY_OP_INPLACE_POWER,
|
MP_BINARY_OP_INPLACE_POWER,
|
||||||
|
|
||||||
// these should return a bool
|
|
||||||
MP_BINARY_OP_LESS,
|
|
||||||
MP_BINARY_OP_MORE,
|
|
||||||
MP_BINARY_OP_EQUAL,
|
|
||||||
MP_BINARY_OP_LESS_EQUAL,
|
|
||||||
MP_BINARY_OP_MORE_EQUAL,
|
|
||||||
|
|
||||||
MP_BINARY_OP_NOT_EQUAL,
|
|
||||||
MP_BINARY_OP_IN,
|
|
||||||
MP_BINARY_OP_IS,
|
|
||||||
MP_BINARY_OP_EXCEPTION_MATCH,
|
|
||||||
// these are not supported by the runtime and must be synthesised by the emitter
|
|
||||||
MP_BINARY_OP_NOT_IN,
|
|
||||||
MP_BINARY_OP_IS_NOT,
|
|
||||||
} mp_binary_op_t;
|
} mp_binary_op_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -43,9 +43,9 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|||||||
bc=\\d\+ line=126
|
bc=\\d\+ line=126
|
||||||
00 LOAD_CONST_NONE
|
00 LOAD_CONST_NONE
|
||||||
01 LOAD_CONST_FALSE
|
01 LOAD_CONST_FALSE
|
||||||
02 BINARY_OP 5 __add__
|
02 BINARY_OP 16 __add__
|
||||||
03 LOAD_CONST_TRUE
|
03 LOAD_CONST_TRUE
|
||||||
04 BINARY_OP 5 __add__
|
04 BINARY_OP 16 __add__
|
||||||
05 STORE_FAST 0
|
05 STORE_FAST 0
|
||||||
06 LOAD_CONST_SMALL_INT 0
|
06 LOAD_CONST_SMALL_INT 0
|
||||||
07 STORE_FAST 0
|
07 STORE_FAST 0
|
||||||
@ -84,7 +84,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|||||||
\\d\+ STORE_FAST 7
|
\\d\+ STORE_FAST 7
|
||||||
\\d\+ LOAD_FAST 0
|
\\d\+ LOAD_FAST 0
|
||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
\\d\+ BINARY_OP 5 __add__
|
\\d\+ BINARY_OP 16 __add__
|
||||||
\\d\+ STORE_FAST 8
|
\\d\+ STORE_FAST 8
|
||||||
\\d\+ LOAD_FAST 0
|
\\d\+ LOAD_FAST 0
|
||||||
\\d\+ UNARY_OP 4
|
\\d\+ UNARY_OP 4
|
||||||
@ -96,21 +96,21 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
\\d\+ DUP_TOP
|
\\d\+ DUP_TOP
|
||||||
\\d\+ ROT_THREE
|
\\d\+ ROT_THREE
|
||||||
\\d\+ BINARY_OP 27 __eq__
|
\\d\+ BINARY_OP 2 __eq__
|
||||||
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
||||||
\\d\+ LOAD_FAST 1
|
\\d\+ LOAD_FAST 1
|
||||||
\\d\+ BINARY_OP 27 __eq__
|
\\d\+ BINARY_OP 2 __eq__
|
||||||
\\d\+ JUMP \\d\+
|
\\d\+ JUMP \\d\+
|
||||||
\\d\+ ROT_TWO
|
\\d\+ ROT_TWO
|
||||||
\\d\+ POP_TOP
|
\\d\+ POP_TOP
|
||||||
\\d\+ STORE_FAST 10
|
\\d\+ STORE_FAST 10
|
||||||
\\d\+ LOAD_FAST 0
|
\\d\+ LOAD_FAST 0
|
||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
\\d\+ BINARY_OP 27 __eq__
|
\\d\+ BINARY_OP 2 __eq__
|
||||||
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
\\d\+ LOAD_FAST 1
|
\\d\+ LOAD_FAST 1
|
||||||
\\d\+ BINARY_OP 27 __eq__
|
\\d\+ BINARY_OP 2 __eq__
|
||||||
\\d\+ UNARY_OP 6
|
\\d\+ UNARY_OP 6
|
||||||
\\d\+ STORE_FAST 10
|
\\d\+ STORE_FAST 10
|
||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
@ -132,7 +132,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|||||||
\\d\+ DUP_TOP_TWO
|
\\d\+ DUP_TOP_TWO
|
||||||
\\d\+ LOAD_SUBSCR
|
\\d\+ LOAD_SUBSCR
|
||||||
\\d\+ LOAD_FAST 12
|
\\d\+ LOAD_FAST 12
|
||||||
\\d\+ BINARY_OP 18 __iadd__
|
\\d\+ BINARY_OP 29 __iadd__
|
||||||
\\d\+ ROT_THREE
|
\\d\+ ROT_THREE
|
||||||
\\d\+ STORE_SUBSCR
|
\\d\+ STORE_SUBSCR
|
||||||
\\d\+ LOAD_DEREF 14
|
\\d\+ LOAD_DEREF 14
|
||||||
@ -369,7 +369,7 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|||||||
42 STORE_FAST_N 19
|
42 STORE_FAST_N 19
|
||||||
44 LOAD_FAST 9
|
44 LOAD_FAST 9
|
||||||
45 LOAD_FAST_N 19
|
45 LOAD_FAST_N 19
|
||||||
47 BINARY_OP 5 __add__
|
47 BINARY_OP 16 __add__
|
||||||
48 POP_TOP
|
48 POP_TOP
|
||||||
49 LOAD_CONST_NONE
|
49 LOAD_CONST_NONE
|
||||||
50 RETURN_VALUE
|
50 RETURN_VALUE
|
||||||
@ -521,7 +521,7 @@ arg names: *
|
|||||||
bc=\\d\+ line=113
|
bc=\\d\+ line=113
|
||||||
00 LOAD_DEREF 0
|
00 LOAD_DEREF 0
|
||||||
02 LOAD_CONST_SMALL_INT 1
|
02 LOAD_CONST_SMALL_INT 1
|
||||||
03 BINARY_OP 5 __add__
|
03 BINARY_OP 16 __add__
|
||||||
04 STORE_FAST 1
|
04 STORE_FAST 1
|
||||||
05 LOAD_CONST_SMALL_INT 1
|
05 LOAD_CONST_SMALL_INT 1
|
||||||
06 STORE_DEREF 0
|
06 STORE_DEREF 0
|
||||||
@ -540,7 +540,7 @@ arg names: * b
|
|||||||
bc=\\d\+ line=139
|
bc=\\d\+ line=139
|
||||||
00 LOAD_FAST 1
|
00 LOAD_FAST 1
|
||||||
01 LOAD_DEREF 0
|
01 LOAD_DEREF 0
|
||||||
03 BINARY_OP 5 __add__
|
03 BINARY_OP 16 __add__
|
||||||
04 RETURN_VALUE
|
04 RETURN_VALUE
|
||||||
mem: total=\\d\+, current=\\d\+, peak=\\d\+
|
mem: total=\\d\+, current=\\d\+, peak=\\d\+
|
||||||
stack: \\d\+ out of \\d\+
|
stack: \\d\+ out of \\d\+
|
||||||
|
Loading…
Reference in New Issue
Block a user