1 // x86 specific stuff 2 3 #include "py/mpconfig.h" 4 #include "py/nativeglue.h" 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 12 // Word indices of REG_LOCAL_x in nlr_buf_t 13 #define NLR_BUF_IDX_LOCAL_1 (5) // ebx 14 #define NLR_BUF_IDX_LOCAL_2 (7) // esi 15 #define NLR_BUF_IDX_LOCAL_3 (6) // edi 16 17 // x86 needs a table to know how many args a given function has 18 STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = { 19 [MP_F_CONVERT_OBJ_TO_NATIVE] = 2, 20 [MP_F_CONVERT_NATIVE_TO_OBJ] = 2, 21 [MP_F_NATIVE_SWAP_GLOBALS] = 1, 22 [MP_F_LOAD_NAME] = 1, 23 [MP_F_LOAD_GLOBAL] = 1, 24 [MP_F_LOAD_BUILD_CLASS] = 0, 25 [MP_F_LOAD_ATTR] = 2, 26 [MP_F_LOAD_METHOD] = 3, 27 [MP_F_LOAD_SUPER_METHOD] = 2, 28 [MP_F_STORE_NAME] = 2, 29 [MP_F_STORE_GLOBAL] = 2, 30 [MP_F_STORE_ATTR] = 3, 31 [MP_F_OBJ_SUBSCR] = 3, 32 [MP_F_OBJ_IS_TRUE] = 1, 33 [MP_F_UNARY_OP] = 2, 34 [MP_F_BINARY_OP] = 3, 35 [MP_F_BUILD_TUPLE] = 2, 36 [MP_F_BUILD_LIST] = 2, 37 [MP_F_BUILD_MAP] = 1, 38 [MP_F_BUILD_SET] = 2, 39 [MP_F_STORE_SET] = 2, 40 [MP_F_LIST_APPEND] = 2, 41 [MP_F_STORE_MAP] = 3, 42 [MP_F_MAKE_FUNCTION_FROM_RAW_CODE] = 3, 43 [MP_F_NATIVE_CALL_FUNCTION_N_KW] = 3, 44 [MP_F_CALL_METHOD_N_KW] = 3, 45 [MP_F_CALL_METHOD_N_KW_VAR] = 3, 46 [MP_F_NATIVE_GETITER] = 2, 47 [MP_F_NATIVE_ITERNEXT] = 1, 48 [MP_F_NLR_PUSH] = 1, 49 [MP_F_NLR_POP] = 0, 50 [MP_F_NATIVE_RAISE] = 1, 51 [MP_F_IMPORT_NAME] = 3, 52 [MP_F_IMPORT_FROM] = 2, 53 [MP_F_IMPORT_ALL] = 1, 54 [MP_F_NEW_SLICE] = 3, 55 [MP_F_UNPACK_SEQUENCE] = 3, 56 [MP_F_UNPACK_EX] = 3, 57 [MP_F_DELETE_NAME] = 1, 58 [MP_F_DELETE_GLOBAL] = 1, 59 [MP_F_MAKE_CLOSURE_FROM_RAW_CODE] = 3, 60 [MP_F_ARG_CHECK_NUM_SIG] = 3, 61 [MP_F_SETUP_CODE_STATE] = 4, 62 [MP_F_SMALL_INT_FLOOR_DIVIDE] = 2, 63 [MP_F_SMALL_INT_MODULO] = 2, 64 [MP_F_NATIVE_YIELD_FROM] = 3, 65 [MP_F_SETJMP] = 1, 66 }; 67 68 #define N_X86 (1) 69 #define EXPORT_FUN(name) emit_native_x86_##name 70 #include "py/emitnative.c" 71 72 #endif 73