blob: 1d2aefa7920bc5beb070f47a512dcad022013651 [file] [log] [blame]
Damien Georgeef12a4b2018-04-10 15:06:47 +10001// x86 specific stuff
2
3#include "py/mpconfig.h"
Damien George360d9722019-10-07 11:56:24 +11004#include "py/nativeglue.h"
Damien Georgeef12a4b2018-04-10 15:06:47 +10005
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 George4ae71112018-09-04 14:31:28 +100012// Word indices of REG_LOCAL_x in nlr_buf_t
13#define NLR_BUF_IDX_LOCAL_1 (5) // ebx
Damien Georgea3de7762018-08-16 13:56:36 +100014
Damien Georgeef12a4b2018-04-10 15:06:47 +100015// x86 needs a table to know how many args a given function has
Angus Grattondecf8e62024-02-27 15:32:29 +110016static byte mp_f_n_args[MP_F_NUMBER_OF] = {
Damien Georgeef12a4b2018-04-10 15:06:47 +100017 [MP_F_CONVERT_OBJ_TO_NATIVE] = 2,
18 [MP_F_CONVERT_NATIVE_TO_OBJ] = 2,
Damien George4f3d9422018-09-13 22:03:48 +100019 [MP_F_NATIVE_SWAP_GLOBALS] = 1,
Damien Georgeef12a4b2018-04-10 15:06:47 +100020 [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 Georgeef12a4b2018-04-10 15:06:47 +100035 [MP_F_BUILD_MAP] = 1,
Damien Georgeef12a4b2018-04-10 15:06:47 +100036 [MP_F_BUILD_SET] = 2,
37 [MP_F_STORE_SET] = 2,
Damien George7e374d22019-11-07 19:43:23 +110038 [MP_F_LIST_APPEND] = 2,
39 [MP_F_STORE_MAP] = 3,
Damien Georgee2ff00e2024-02-09 17:41:48 +110040 [MP_F_MAKE_FUNCTION_FROM_PROTO_FUN] = 3,
Damien Georgeef12a4b2018-04-10 15:06:47 +100041 [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 Georgeef12a4b2018-04-10 15:06:47 +100052 [MP_F_NEW_SLICE] = 3,
Damien Georgeef12a4b2018-04-10 15:06:47 +100053 [MP_F_UNPACK_SEQUENCE] = 3,
54 [MP_F_UNPACK_EX] = 3,
55 [MP_F_DELETE_NAME] = 1,
56 [MP_F_DELETE_GLOBAL] = 1,
Damien Georgef2040bf2021-10-22 22:22:47 +110057 [MP_F_NEW_CLOSURE] = 3,
Damien George43f18482018-09-14 17:40:59 +100058 [MP_F_ARG_CHECK_NUM_SIG] = 3,
Damien George4f9842a2018-08-17 15:03:51 +100059 [MP_F_SETUP_CODE_STATE] = 4,
Damien Georgeef12a4b2018-04-10 15:06:47 +100060 [MP_F_SMALL_INT_FLOOR_DIVIDE] = 2,
61 [MP_F_SMALL_INT_MODULO] = 2,
Damien Georgecc2bd632018-10-01 13:07:04 +100062 [MP_F_NATIVE_YIELD_FROM] = 3,
Damien George7e374d22019-11-07 19:43:23 +110063 [MP_F_SETJMP] = 1,
Damien Georgeef12a4b2018-04-10 15:06:47 +100064};
65
66#define N_X86 (1)
67#define EXPORT_FUN(name) emit_native_x86_##name
68#include "py/emitnative.c"
69
70#endif