Skip to content
Snippets Groups Projects
Commit 0864a695 authored by Damien George's avatar Damien George
Browse files

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.
parent f869d6b2
No related branches found
No related tags found
No related merge requests found
...@@ -113,7 +113,7 @@ ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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_NUM_RUNTIME,
MP_BINARY_OP_LAST, // 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) { ...@@ -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] = { ...@@ -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\+): ...@@ -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\+): ...@@ -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\+): ...@@ -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\+): ...@@ -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: * ...@@ -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 ...@@ -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\+
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment