Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 1 | // x86 specific stuff |
| 2 | |
| 3 | #include "py/mpconfig.h" |
Damien George | 360d972 | 2019-10-07 11:56:24 +1100 | [diff] [blame] | 4 | #include "py/nativeglue.h" |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 5 | |
| 6 | #if MICROPY_EMIT_X86 |
| 7 | |
| 8 | // This is defined so that the assembler exports generic assembler API macros |
| 9 | #define GENERIC_ASM_API (1) |
| 10 | #include "py/asmx86.h" |
| 11 | |
Damien George | 4ae7111 | 2018-09-04 14:31:28 +1000 | [diff] [blame] | 12 | // Word indices of REG_LOCAL_x in nlr_buf_t |
| 13 | #define NLR_BUF_IDX_LOCAL_1 (5) // ebx |
Damien George | a3de776 | 2018-08-16 13:56:36 +1000 | [diff] [blame] | 14 | |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 15 | // x86 needs a table to know how many args a given function has |
Angus Gratton | decf8e6 | 2024-02-27 15:32:29 +1100 | [diff] [blame] | 16 | static byte mp_f_n_args[MP_F_NUMBER_OF] = { |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 17 | [MP_F_CONVERT_OBJ_TO_NATIVE] = 2, |
| 18 | [MP_F_CONVERT_NATIVE_TO_OBJ] = 2, |
Damien George | 4f3d942 | 2018-09-13 22:03:48 +1000 | [diff] [blame] | 19 | [MP_F_NATIVE_SWAP_GLOBALS] = 1, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 20 | [MP_F_LOAD_NAME] = 1, |
| 21 | [MP_F_LOAD_GLOBAL] = 1, |
| 22 | [MP_F_LOAD_BUILD_CLASS] = 0, |
| 23 | [MP_F_LOAD_ATTR] = 2, |
| 24 | [MP_F_LOAD_METHOD] = 3, |
| 25 | [MP_F_LOAD_SUPER_METHOD] = 2, |
| 26 | [MP_F_STORE_NAME] = 2, |
| 27 | [MP_F_STORE_GLOBAL] = 2, |
| 28 | [MP_F_STORE_ATTR] = 3, |
| 29 | [MP_F_OBJ_SUBSCR] = 3, |
| 30 | [MP_F_OBJ_IS_TRUE] = 1, |
| 31 | [MP_F_UNARY_OP] = 2, |
| 32 | [MP_F_BINARY_OP] = 3, |
| 33 | [MP_F_BUILD_TUPLE] = 2, |
| 34 | [MP_F_BUILD_LIST] = 2, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 35 | [MP_F_BUILD_MAP] = 1, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 36 | [MP_F_BUILD_SET] = 2, |
| 37 | [MP_F_STORE_SET] = 2, |
Damien George | 7e374d2 | 2019-11-07 19:43:23 +1100 | [diff] [blame] | 38 | [MP_F_LIST_APPEND] = 2, |
| 39 | [MP_F_STORE_MAP] = 3, |
Damien George | e2ff00e | 2024-02-09 17:41:48 +1100 | [diff] [blame] | 40 | [MP_F_MAKE_FUNCTION_FROM_PROTO_FUN] = 3, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 41 | [MP_F_NATIVE_CALL_FUNCTION_N_KW] = 3, |
| 42 | [MP_F_CALL_METHOD_N_KW] = 3, |
| 43 | [MP_F_CALL_METHOD_N_KW_VAR] = 3, |
| 44 | [MP_F_NATIVE_GETITER] = 2, |
| 45 | [MP_F_NATIVE_ITERNEXT] = 1, |
| 46 | [MP_F_NLR_PUSH] = 1, |
| 47 | [MP_F_NLR_POP] = 0, |
| 48 | [MP_F_NATIVE_RAISE] = 1, |
| 49 | [MP_F_IMPORT_NAME] = 3, |
| 50 | [MP_F_IMPORT_FROM] = 2, |
| 51 | [MP_F_IMPORT_ALL] = 1, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 52 | [MP_F_NEW_SLICE] = 3, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 53 | [MP_F_UNPACK_SEQUENCE] = 3, |
| 54 | [MP_F_UNPACK_EX] = 3, |
| 55 | [MP_F_DELETE_NAME] = 1, |
| 56 | [MP_F_DELETE_GLOBAL] = 1, |
Damien George | f2040bf | 2021-10-22 22:22:47 +1100 | [diff] [blame] | 57 | [MP_F_NEW_CLOSURE] = 3, |
Damien George | 43f1848 | 2018-09-14 17:40:59 +1000 | [diff] [blame] | 58 | [MP_F_ARG_CHECK_NUM_SIG] = 3, |
Damien George | 4f9842a | 2018-08-17 15:03:51 +1000 | [diff] [blame] | 59 | [MP_F_SETUP_CODE_STATE] = 4, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 60 | [MP_F_SMALL_INT_FLOOR_DIVIDE] = 2, |
| 61 | [MP_F_SMALL_INT_MODULO] = 2, |
Damien George | cc2bd63 | 2018-10-01 13:07:04 +1000 | [diff] [blame] | 62 | [MP_F_NATIVE_YIELD_FROM] = 3, |
Damien George | 7e374d2 | 2019-11-07 19:43:23 +1100 | [diff] [blame] | 63 | [MP_F_SETJMP] = 1, |
Damien George | ef12a4b | 2018-04-10 15:06:47 +1000 | [diff] [blame] | 64 | }; |
| 65 | |
| 66 | #define N_X86 (1) |
| 67 | #define EXPORT_FUN(name) emit_native_x86_##name |
| 68 | #include "py/emitnative.c" |
| 69 | |
| 70 | #endif |