py: Clean up unary and binary enum list to keep groups together.
2 non-bytecode binary ops (NOT_IN and IN_NOT) are moved out of the bytecode group, so this change will change the bytecode format.
This commit is contained in:
parent
f869d6b2e3
commit
0864a6957f
4
py/bc0.h
4
py/bc0.h
|
@ -113,7 +113,7 @@
|
||||||
#define MP_BC_LOAD_CONST_SMALL_INT_MULTI (0x70) // + N(64)
|
#define MP_BC_LOAD_CONST_SMALL_INT_MULTI (0x70) // + N(64)
|
||||||
#define MP_BC_LOAD_FAST_MULTI (0xb0) // + N(16)
|
#define MP_BC_LOAD_FAST_MULTI (0xb0) // + N(16)
|
||||||
#define MP_BC_STORE_FAST_MULTI (0xc0) // + N(16)
|
#define MP_BC_STORE_FAST_MULTI (0xc0) // + N(16)
|
||||||
#define MP_BC_UNARY_OP_MULTI (0xd0) // + op(<MP_UNARY_OP_NON_BYTECODE)
|
#define MP_BC_UNARY_OP_MULTI (0xd0) // + op(<MP_UNARY_OP_NUM_BYTECODE)
|
||||||
#define MP_BC_BINARY_OP_MULTI (0xd7) // + op(36)
|
#define MP_BC_BINARY_OP_MULTI (0xd7) // + op(<MP_BINARY_OP_NUM_BYTECODE)
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PY_BC0_H
|
#endif // MICROPY_INCLUDED_PY_BC0_H
|
||||||
|
|
|
@ -51,41 +51,38 @@ typedef enum {
|
||||||
MP_UNARY_OP_NOT,
|
MP_UNARY_OP_NOT,
|
||||||
|
|
||||||
// Following ops cannot appear in the bytecode
|
// Following ops cannot appear in the bytecode
|
||||||
MP_UNARY_OP_NON_BYTECODE,
|
MP_UNARY_OP_NUM_BYTECODE,
|
||||||
|
|
||||||
MP_UNARY_OP_BOOL = MP_UNARY_OP_NON_BYTECODE, // __bool__
|
MP_UNARY_OP_BOOL = MP_UNARY_OP_NUM_BYTECODE, // __bool__
|
||||||
MP_UNARY_OP_LEN, // __len__
|
MP_UNARY_OP_LEN, // __len__
|
||||||
MP_UNARY_OP_HASH, // __hash__; must return a small int
|
MP_UNARY_OP_HASH, // __hash__; must return a small int
|
||||||
MP_UNARY_OP_ABS, // __abs__
|
MP_UNARY_OP_ABS, // __abs__
|
||||||
MP_UNARY_OP_SIZEOF, // for sys.getsizeof()
|
MP_UNARY_OP_SIZEOF, // for sys.getsizeof()
|
||||||
|
|
||||||
|
MP_UNARY_OP_NUM_RUNTIME,
|
||||||
} mp_unary_op_t;
|
} mp_unary_op_t;
|
||||||
|
|
||||||
// Note: the first 35 of these are used in bytecode and changing
|
// Note: the first 9+12+12 of these are used in bytecode and changing
|
||||||
// them requires changing the bytecode version.
|
// them requires changing the bytecode version.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
// Relational operations, should return a bool
|
// 9 relational operations, should return a bool
|
||||||
MP_BINARY_OP_LESS,
|
MP_BINARY_OP_LESS,
|
||||||
MP_BINARY_OP_MORE,
|
MP_BINARY_OP_MORE,
|
||||||
MP_BINARY_OP_EQUAL,
|
MP_BINARY_OP_EQUAL,
|
||||||
MP_BINARY_OP_LESS_EQUAL,
|
MP_BINARY_OP_LESS_EQUAL,
|
||||||
MP_BINARY_OP_MORE_EQUAL,
|
MP_BINARY_OP_MORE_EQUAL,
|
||||||
MP_BINARY_OP_NOT_EQUAL,
|
MP_BINARY_OP_NOT_EQUAL,
|
||||||
|
|
||||||
MP_BINARY_OP_IN,
|
MP_BINARY_OP_IN,
|
||||||
MP_BINARY_OP_IS,
|
MP_BINARY_OP_IS,
|
||||||
MP_BINARY_OP_EXCEPTION_MATCH,
|
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
|
// 12 inplace arithmetic operations
|
||||||
MP_BINARY_OP_INPLACE_OR,
|
MP_BINARY_OP_INPLACE_OR,
|
||||||
MP_BINARY_OP_INPLACE_XOR,
|
MP_BINARY_OP_INPLACE_XOR,
|
||||||
MP_BINARY_OP_INPLACE_AND,
|
MP_BINARY_OP_INPLACE_AND,
|
||||||
MP_BINARY_OP_INPLACE_LSHIFT,
|
MP_BINARY_OP_INPLACE_LSHIFT,
|
||||||
MP_BINARY_OP_INPLACE_RSHIFT,
|
MP_BINARY_OP_INPLACE_RSHIFT,
|
||||||
MP_BINARY_OP_INPLACE_ADD,
|
MP_BINARY_OP_INPLACE_ADD,
|
||||||
|
|
||||||
MP_BINARY_OP_INPLACE_SUBTRACT,
|
MP_BINARY_OP_INPLACE_SUBTRACT,
|
||||||
MP_BINARY_OP_INPLACE_MULTIPLY,
|
MP_BINARY_OP_INPLACE_MULTIPLY,
|
||||||
MP_BINARY_OP_INPLACE_FLOOR_DIVIDE,
|
MP_BINARY_OP_INPLACE_FLOOR_DIVIDE,
|
||||||
|
@ -93,13 +90,13 @@ typedef enum {
|
||||||
MP_BINARY_OP_INPLACE_MODULO,
|
MP_BINARY_OP_INPLACE_MODULO,
|
||||||
MP_BINARY_OP_INPLACE_POWER,
|
MP_BINARY_OP_INPLACE_POWER,
|
||||||
|
|
||||||
|
// 12 normal 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,
|
||||||
MP_BINARY_OP_LSHIFT,
|
MP_BINARY_OP_LSHIFT,
|
||||||
MP_BINARY_OP_RSHIFT,
|
MP_BINARY_OP_RSHIFT,
|
||||||
MP_BINARY_OP_ADD,
|
MP_BINARY_OP_ADD,
|
||||||
|
|
||||||
MP_BINARY_OP_SUBTRACT,
|
MP_BINARY_OP_SUBTRACT,
|
||||||
MP_BINARY_OP_MULTIPLY,
|
MP_BINARY_OP_MULTIPLY,
|
||||||
MP_BINARY_OP_FLOOR_DIVIDE,
|
MP_BINARY_OP_FLOOR_DIVIDE,
|
||||||
|
@ -109,16 +106,16 @@ typedef enum {
|
||||||
|
|
||||||
// Operations below this line don't appear in bytecode, they
|
// Operations below this line don't appear in bytecode, they
|
||||||
// just identify special methods.
|
// just identify special methods.
|
||||||
|
MP_BINARY_OP_NUM_BYTECODE,
|
||||||
|
|
||||||
// MP_BINARY_OP_REVERSE_* must follow immediately after MP_BINARY_OP_*
|
// MP_BINARY_OP_REVERSE_* must follow immediately after MP_BINARY_OP_*
|
||||||
#if MICROPY_PY_REVERSE_SPECIAL_METHODS
|
#if MICROPY_PY_REVERSE_SPECIAL_METHODS
|
||||||
MP_BINARY_OP_REVERSE_OR,
|
MP_BINARY_OP_REVERSE_OR = MP_BINARY_OP_NUM_BYTECODE,
|
||||||
MP_BINARY_OP_REVERSE_XOR,
|
MP_BINARY_OP_REVERSE_XOR,
|
||||||
MP_BINARY_OP_REVERSE_AND,
|
MP_BINARY_OP_REVERSE_AND,
|
||||||
MP_BINARY_OP_REVERSE_LSHIFT,
|
MP_BINARY_OP_REVERSE_LSHIFT,
|
||||||
MP_BINARY_OP_REVERSE_RSHIFT,
|
MP_BINARY_OP_REVERSE_RSHIFT,
|
||||||
MP_BINARY_OP_REVERSE_ADD,
|
MP_BINARY_OP_REVERSE_ADD,
|
||||||
|
|
||||||
MP_BINARY_OP_REVERSE_SUBTRACT,
|
MP_BINARY_OP_REVERSE_SUBTRACT,
|
||||||
MP_BINARY_OP_REVERSE_MULTIPLY,
|
MP_BINARY_OP_REVERSE_MULTIPLY,
|
||||||
MP_BINARY_OP_REVERSE_FLOOR_DIVIDE,
|
MP_BINARY_OP_REVERSE_FLOOR_DIVIDE,
|
||||||
|
@ -127,9 +124,18 @@ typedef enum {
|
||||||
MP_BINARY_OP_REVERSE_POWER,
|
MP_BINARY_OP_REVERSE_POWER,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MP_BINARY_OP_DIVMOD, // not emitted by the compiler but supported by the runtime
|
// This is not emitted by the compiler but is supported by the runtime
|
||||||
|
MP_BINARY_OP_DIVMOD
|
||||||
|
#if !MICROPY_PY_REVERSE_SPECIAL_METHODS
|
||||||
|
= MP_BINARY_OP_NUM_BYTECODE
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
|
||||||
MP_BINARY_OP_LAST,
|
MP_BINARY_OP_NUM_RUNTIME,
|
||||||
|
|
||||||
|
// These 2 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 {
|
||||||
|
|
|
@ -539,9 +539,9 @@ const byte *mp_bytecode_print_str(const byte *ip) {
|
||||||
printf("LOAD_FAST " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_LOAD_FAST_MULTI);
|
printf("LOAD_FAST " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_LOAD_FAST_MULTI);
|
||||||
} else if (ip[-1] < MP_BC_STORE_FAST_MULTI + 16) {
|
} else if (ip[-1] < MP_BC_STORE_FAST_MULTI + 16) {
|
||||||
printf("STORE_FAST " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_STORE_FAST_MULTI);
|
printf("STORE_FAST " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_STORE_FAST_MULTI);
|
||||||
} else if (ip[-1] < MP_BC_UNARY_OP_MULTI + MP_UNARY_OP_NON_BYTECODE) {
|
} else if (ip[-1] < MP_BC_UNARY_OP_MULTI + MP_UNARY_OP_NUM_BYTECODE) {
|
||||||
printf("UNARY_OP " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_UNARY_OP_MULTI);
|
printf("UNARY_OP " UINT_FMT, (mp_uint_t)ip[-1] - MP_BC_UNARY_OP_MULTI);
|
||||||
} else if (ip[-1] < MP_BC_BINARY_OP_MULTI + 36) {
|
} else if (ip[-1] < MP_BC_BINARY_OP_MULTI + MP_BINARY_OP_NUM_BYTECODE) {
|
||||||
mp_uint_t op = ip[-1] - MP_BC_BINARY_OP_MULTI;
|
mp_uint_t op = ip[-1] - MP_BC_BINARY_OP_MULTI;
|
||||||
printf("BINARY_OP " UINT_FMT " %s", op, qstr_str(mp_binary_op_method_name[op]));
|
printf("BINARY_OP " UINT_FMT " %s", op, qstr_str(mp_binary_op_method_name[op]));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -109,8 +109,8 @@ static const void *const entry_table[256] = {
|
||||||
[MP_BC_LOAD_CONST_SMALL_INT_MULTI ... MP_BC_LOAD_CONST_SMALL_INT_MULTI + 63] = &&entry_MP_BC_LOAD_CONST_SMALL_INT_MULTI,
|
[MP_BC_LOAD_CONST_SMALL_INT_MULTI ... MP_BC_LOAD_CONST_SMALL_INT_MULTI + 63] = &&entry_MP_BC_LOAD_CONST_SMALL_INT_MULTI,
|
||||||
[MP_BC_LOAD_FAST_MULTI ... MP_BC_LOAD_FAST_MULTI + 15] = &&entry_MP_BC_LOAD_FAST_MULTI,
|
[MP_BC_LOAD_FAST_MULTI ... MP_BC_LOAD_FAST_MULTI + 15] = &&entry_MP_BC_LOAD_FAST_MULTI,
|
||||||
[MP_BC_STORE_FAST_MULTI ... MP_BC_STORE_FAST_MULTI + 15] = &&entry_MP_BC_STORE_FAST_MULTI,
|
[MP_BC_STORE_FAST_MULTI ... MP_BC_STORE_FAST_MULTI + 15] = &&entry_MP_BC_STORE_FAST_MULTI,
|
||||||
[MP_BC_UNARY_OP_MULTI ... MP_BC_UNARY_OP_MULTI + MP_UNARY_OP_NON_BYTECODE - 1] = &&entry_MP_BC_UNARY_OP_MULTI,
|
[MP_BC_UNARY_OP_MULTI ... MP_BC_UNARY_OP_MULTI + MP_UNARY_OP_NUM_BYTECODE - 1] = &&entry_MP_BC_UNARY_OP_MULTI,
|
||||||
[MP_BC_BINARY_OP_MULTI ... MP_BC_BINARY_OP_MULTI + 35] = &&entry_MP_BC_BINARY_OP_MULTI,
|
[MP_BC_BINARY_OP_MULTI ... MP_BC_BINARY_OP_MULTI + MP_BINARY_OP_NUM_BYTECODE - 1] = &&entry_MP_BC_BINARY_OP_MULTI,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if __clang__
|
#if __clang__
|
||||||
|
|
|
@ -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 28 __add__
|
02 BINARY_OP 26 __add__
|
||||||
03 LOAD_CONST_TRUE
|
03 LOAD_CONST_TRUE
|
||||||
04 BINARY_OP 28 __add__
|
04 BINARY_OP 26 __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 28 __add__
|
\\d\+ BINARY_OP 26 __add__
|
||||||
\\d\+ STORE_FAST 8
|
\\d\+ STORE_FAST 8
|
||||||
\\d\+ LOAD_FAST 0
|
\\d\+ LOAD_FAST 0
|
||||||
\\d\+ UNARY_OP 1
|
\\d\+ UNARY_OP 1
|
||||||
|
@ -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 16 __iadd__
|
\\d\+ BINARY_OP 14 __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 28 __add__
|
47 BINARY_OP 26 __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 28 __add__
|
03 BINARY_OP 26 __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 28 __add__
|
03 BINARY_OP 26 __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