|
57 | 57 | #endif |
58 | 58 |
|
59 | 59 | // wrapper around everything in this file |
60 | | -#if (MICROPY_EMIT_X64 && N_X64) \ |
61 | | - || (MICROPY_EMIT_X86 && N_X86) \ |
62 | | - || (MICROPY_EMIT_THUMB && N_THUMB) \ |
63 | | - || (MICROPY_EMIT_ARM && N_ARM) \ |
64 | | - || (MICROPY_EMIT_XTENSA && N_XTENSA) \ |
65 | | - |
66 | | -// this is defined so that the assembler exports generic assembler API macros |
67 | | -#define GENERIC_ASM_API (1) |
| 60 | +#if N_X64 || N_X86 || N_THUMB || N_ARM || N_XTENSA |
68 | 61 |
|
69 | 62 | // define additional generic helper macros |
70 | 63 | #define ASM_MOV_LOCAL_IMM_VIA(as, local_num, imm, reg_temp) \ |
|
73 | 66 | ASM_MOV_LOCAL_REG((as), (local_num), (reg_temp)); \ |
74 | 67 | } while (false) |
75 | 68 |
|
76 | | -#if N_X64 |
77 | | - |
78 | | -// x64 specific stuff |
79 | | -#include "py/asmx64.h" |
80 | | -#define EXPORT_FUN(name) emit_native_x64_##name |
81 | | - |
82 | | -#elif N_X86 |
83 | | - |
84 | | -// x86 specific stuff |
85 | | - |
86 | | -STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = { |
87 | | - [MP_F_CONVERT_OBJ_TO_NATIVE] = 2, |
88 | | - [MP_F_CONVERT_NATIVE_TO_OBJ] = 2, |
89 | | - [MP_F_LOAD_NAME] = 1, |
90 | | - [MP_F_LOAD_GLOBAL] = 1, |
91 | | - [MP_F_LOAD_BUILD_CLASS] = 0, |
92 | | - [MP_F_LOAD_ATTR] = 2, |
93 | | - [MP_F_LOAD_METHOD] = 3, |
94 | | - [MP_F_LOAD_SUPER_METHOD] = 2, |
95 | | - [MP_F_STORE_NAME] = 2, |
96 | | - [MP_F_STORE_GLOBAL] = 2, |
97 | | - [MP_F_STORE_ATTR] = 3, |
98 | | - [MP_F_OBJ_SUBSCR] = 3, |
99 | | - [MP_F_OBJ_IS_TRUE] = 1, |
100 | | - [MP_F_UNARY_OP] = 2, |
101 | | - [MP_F_BINARY_OP] = 3, |
102 | | - [MP_F_BUILD_TUPLE] = 2, |
103 | | - [MP_F_BUILD_LIST] = 2, |
104 | | - [MP_F_LIST_APPEND] = 2, |
105 | | - [MP_F_BUILD_MAP] = 1, |
106 | | - [MP_F_STORE_MAP] = 3, |
107 | | -#if MICROPY_PY_BUILTINS_SET |
108 | | - [MP_F_BUILD_SET] = 2, |
109 | | - [MP_F_STORE_SET] = 2, |
110 | | -#endif |
111 | | - [MP_F_MAKE_FUNCTION_FROM_RAW_CODE] = 3, |
112 | | - [MP_F_NATIVE_CALL_FUNCTION_N_KW] = 3, |
113 | | - [MP_F_CALL_METHOD_N_KW] = 3, |
114 | | - [MP_F_CALL_METHOD_N_KW_VAR] = 3, |
115 | | - [MP_F_NATIVE_GETITER] = 2, |
116 | | - [MP_F_NATIVE_ITERNEXT] = 1, |
117 | | - [MP_F_NLR_PUSH] = 1, |
118 | | - [MP_F_NLR_POP] = 0, |
119 | | - [MP_F_NATIVE_RAISE] = 1, |
120 | | - [MP_F_IMPORT_NAME] = 3, |
121 | | - [MP_F_IMPORT_FROM] = 2, |
122 | | - [MP_F_IMPORT_ALL] = 1, |
123 | | -#if MICROPY_PY_BUILTINS_SLICE |
124 | | - [MP_F_NEW_SLICE] = 3, |
125 | | -#endif |
126 | | - [MP_F_UNPACK_SEQUENCE] = 3, |
127 | | - [MP_F_UNPACK_EX] = 3, |
128 | | - [MP_F_DELETE_NAME] = 1, |
129 | | - [MP_F_DELETE_GLOBAL] = 1, |
130 | | - [MP_F_NEW_CELL] = 1, |
131 | | - [MP_F_MAKE_CLOSURE_FROM_RAW_CODE] = 3, |
132 | | - [MP_F_SETUP_CODE_STATE] = 5, |
133 | | - [MP_F_SMALL_INT_FLOOR_DIVIDE] = 2, |
134 | | - [MP_F_SMALL_INT_MODULO] = 2, |
135 | | -}; |
136 | | - |
137 | | -#include "py/asmx86.h" |
138 | | -#define EXPORT_FUN(name) emit_native_x86_##name |
139 | | - |
140 | | -#elif N_THUMB |
141 | | - |
142 | | -// thumb specific stuff |
143 | | -#include "py/asmthumb.h" |
144 | | -#define EXPORT_FUN(name) emit_native_thumb_##name |
145 | | - |
146 | | -#elif N_ARM |
147 | | - |
148 | | -// ARM specific stuff |
149 | | -#include "py/asmarm.h" |
150 | | -#define EXPORT_FUN(name) emit_native_arm_##name |
151 | | - |
152 | | -#elif N_XTENSA |
153 | | - |
154 | | -// Xtensa specific stuff |
155 | | -#include "py/asmxtensa.h" |
156 | | -#define EXPORT_FUN(name) emit_native_xtensa_##name |
157 | | - |
158 | | -#else |
159 | | - |
160 | | -#error unknown native emitter |
161 | | - |
162 | | -#endif |
163 | | - |
164 | 69 | #define EMIT_NATIVE_VIPER_TYPE_ERROR(emit, ...) do { \ |
165 | 70 | *emit->error_slot = mp_obj_new_exception_msg_varg(&mp_type_ViperTypeError, __VA_ARGS__); \ |
166 | 71 | } while (0) |
|
0 commit comments