os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit f5c92970174dd6999b74217f7d39bc2a5eda0d69
parent 9fb3118a29f4f6842a05c3a7ebd855fa60bece67
Author: erai <erai@omiltem.net>
Date:   Wed, 20 Nov 2024 21:38:39 -0500

reserve as

Diffstat:
Mcc0.c | 1343+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mcc1.om | 1296++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mcc3.peg | 6++++--
Mdecl.om | 4++--
Mvimfiles/syntax/omiltem.vim | 6+++++-
5 files changed, 1353 insertions(+), 1302 deletions(-)

diff --git a/cc0.c b/cc0.c @@ -51,7 +51,7 @@ struct my_compiler { unsigned char* my_filename; unsigned long my_lineno; unsigned long my_colno; - struct my_assembler* my_as; + struct my_assembler* my_s; struct my_decl* my_decls; unsigned long my_do_cout; struct my_file* my_cout; @@ -407,6 +407,7 @@ enum { my_P_add_op = 37, my_P_and_op = 45, my_P_arg_decl = 9, + my_P_as = 85, my_P_assign_stmt = 22, my_P_band_op = 27, my_P_bnot_op = 55, @@ -444,7 +445,7 @@ enum { my_P_grammar = 0, my_P_gt_op = 33, my_P_hex = 64, - my_P_ident = 85, + my_P_ident = 87, my_P_if = 72, my_P_if_stmt = 14, my_P_index_expr = 57, @@ -462,6 +463,7 @@ enum { my_P_mul_op = 42, my_P_ne_op = 35, my_P_neg_op = 53, + my_P_nil = 86, my_P_not_op = 54, my_P_or_op = 39, my_P_pos_op = 52, @@ -476,7 +478,7 @@ enum { my_P_shift_expr = 49, my_P_sizeof = 71, my_P_sizeof_expr = 63, - my_P_sp = 86, + my_P_sp = 88, my_P_stmt = 11, my_P_str = 66, my_P_struct = 79, @@ -722,6 +724,7 @@ unsigned long( my_peg_P_add_expr)(struct my_peg* my_c); unsigned long( my_peg_P_add_op)(struct my_peg* my_c); unsigned long( my_peg_P_and_op)(struct my_peg* my_c); unsigned long( my_peg_P_arg_decl)(struct my_peg* my_c); +unsigned long( my_peg_P_as)(struct my_peg* my_c); unsigned long( my_peg_P_assign_stmt)(struct my_peg* my_c); unsigned long( my_peg_P_band_op)(struct my_peg* my_c); unsigned long( my_peg_P_bnot_op)(struct my_peg* my_c); @@ -1183,6 +1186,12 @@ unsigned char*( my_P_tag_to_str)(unsigned long my_tag){ if ((unsigned long)(((long)(my_tag))==((long)(my_P_func)))) { return (unsigned char *)"func"; } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_as)))) { + return (unsigned char *)"as"; + } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_nil)))) { + return (unsigned char *)"nil"; + } if ((unsigned long)(((long)(my_tag))==((long)(my_P_ident)))) { return (unsigned char *)"ident"; } @@ -1606,7 +1615,7 @@ struct my_compiler*( my_comp_setup)(struct my_alloc* my_a){ ((my_c)->my_filename)=((unsigned char*)0UL); ((my_c)->my_lineno)=(0UL); ((my_c)->my_colno)=(0UL); - ((my_c)->my_as)=((my_setup_assembler)((my_a))); + ((my_c)->my_s)=((my_setup_assembler)((my_a))); ((my_c)->my_decls)=((struct my_decl*)0UL); ((my_c)->my_do_cout)=(0UL); ((my_c)->my_cout)=((struct my_file*)0UL); @@ -1701,11 +1710,11 @@ void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n ((my_c)->my_colno)=((my_n)->my_colno); (my_kind)=((my_n)->my_kind); if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { - (my_emit_str)(((my_c)->my_as),((my_n)->my_s)); + (my_emit_str)(((my_c)->my_s),((my_n)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { - (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + (my_emit_num)(((my_c)->my_s),((my_n)->my_n)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { - (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + (my_emit_num)(((my_c)->my_s),((my_n)->my_n)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { if ((my_n)->my_b) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); @@ -1722,19 +1731,19 @@ void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n } (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { - (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); - (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); - (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + (my_emit_lea)(((my_c)->my_s),((my_v)->my_var_offset)); + (my_emit_load)(((my_c)->my_s),(((my_n)->my_a)->my_t)); + (my_emit_call)(((my_c)->my_s),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); } else if ((unsigned long)(!((my_strcmp)((((my_n)->my_a)->my_s),((unsigned char *)"_include"))))) { (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); (my_compile_include)((my_c),(my_n)); } else { (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); - (my_emit_lcall)(((my_c)->my_as),((my_v)->my_func_label),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + (my_emit_lcall)(((my_c)->my_s),((my_v)->my_func_label),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); } } else { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + (my_emit_call)(((my_c)->my_s),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); } if ((my_n)->my_b) { (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),(((my_n)->my_b)->my_t)); @@ -1745,178 +1754,178 @@ void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { (my_v)=((my_find)((my_c),((((((my_n)->my_a)->my_t)->my_val)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); - (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); + (my_emit_load)(((my_c)->my_s),(((my_n)->my_a)->my_t)); } else { (my_v)=((my_find)((my_c),(((((my_n)->my_a)->my_t)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); } - (my_emit_num)(((my_c)->my_as),((my_v)->my_member_offset)); - (my_emit_add)(((my_c)->my_as)); + (my_emit_num)(((my_c)->my_s),((my_v)->my_member_offset)); + (my_emit_add)(((my_c)->my_s)); if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + (my_emit_load)(((my_c)->my_s),((my_n)->my_t)); } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { - (my_emit_num)(((my_c)->my_as),((my_v)->my_enum_value)); + (my_emit_num)(((my_c)->my_s),((my_v)->my_enum_value)); return; } (my_v)=((my_find)((my_c),((my_d)->my_name),((my_n)->my_s),(0UL))); if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { - (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); + (my_emit_lea)(((my_c)->my_s),((my_v)->my_var_offset)); if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + (my_emit_load)(((my_c)->my_s),((my_n)->my_t)); } return; } (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); if ((unsigned long)((my_v)&&((my_v)->my_func_defined))) { - (my_emit_ptr)(((my_c)->my_as),((my_v)->my_func_label)); + (my_emit_ptr)(((my_c)->my_s),((my_v)->my_func_label)); return; } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - (my_emit_store)(((my_c)->my_as),((my_n)->my_t)); + (my_emit_store)(((my_c)->my_s),((my_n)->my_t)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_out)=((my_mklabel)(((my_c)->my_s))); + (my_emit_jmp)(((my_c)->my_s),(my_out)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_s),(my_out)); if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_num)(((my_c)->my_s),(1UL)); } else { - (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); + (my_emit_num)(((my_c)->my_s),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + (my_emit_load)(((my_c)->my_s),((my_n)->my_t)); } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); if ((unsigned long)(((long)(((my_n)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_num)(((my_c)->my_s),(1UL)); } else { - (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),((my_n)->my_t)))); + (my_emit_num)(((my_c)->my_s),((my_type_sizeof)((my_c),((my_n)->my_t)))); } - (my_emit_mul)(((my_c)->my_as)); - (my_emit_add)(((my_c)->my_as)); + (my_emit_mul)(((my_c)->my_s)); + (my_emit_add)(((my_c)->my_s)); if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + (my_emit_load)(((my_c)->my_s),((my_n)->my_t)); } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_lt)(((my_c)->my_as)); + (my_emit_lt)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_gt)(((my_c)->my_as)); + (my_emit_gt)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_le)(((my_c)->my_as)); + (my_emit_le)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_ge)(((my_c)->my_as)); + (my_emit_ge)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_eq)(((my_c)->my_as)); + (my_emit_eq)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_ne)(((my_c)->my_as)); + (my_emit_ne)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((my_mklabel)(((my_c)->my_s))); + (my_out)=((my_mklabel)(((my_c)->my_s))); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_emit_jz)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(0UL)); + (my_emit_jmp)(((my_c)->my_s),(my_out)); + (my_fixup_label)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(1UL)); + (my_fixup_label)(((my_c)->my_s),(my_out)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((my_mklabel)(((my_c)->my_s))); + (my_out)=((my_mklabel)(((my_c)->my_s))); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_emit_jz)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(1UL)); + (my_emit_jmp)(((my_c)->my_s),(my_out)); + (my_fixup_label)(((my_c)->my_s),(my_no)); + (my_no)=((my_mklabel)(((my_c)->my_s))); (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_emit_jz)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(1UL)); + (my_emit_jmp)(((my_c)->my_s),(my_out)); + (my_fixup_label)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(0UL)); + (my_fixup_label)(((my_c)->my_s),(my_out)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((my_mklabel)(((my_c)->my_s))); + (my_out)=((my_mklabel)(((my_c)->my_s))); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_jz)(((my_c)->my_s),(my_no)); (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_emit_jz)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(1UL)); + (my_emit_jmp)(((my_c)->my_s),(my_out)); + (my_fixup_label)(((my_c)->my_s),(my_no)); + (my_emit_num)(((my_c)->my_s),(0UL)); + (my_fixup_label)(((my_c)->my_s),(my_out)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_neg)(((my_c)->my_as)); + (my_emit_neg)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_not)(((my_c)->my_as)); + (my_emit_not)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_add)(((my_c)->my_as)); + (my_emit_add)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_sub)(((my_c)->my_as)); + (my_emit_sub)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_mul)(((my_c)->my_as)); + (my_emit_mul)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_div)(((my_c)->my_as)); + (my_emit_div)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_mod)(((my_c)->my_as)); + (my_emit_mod)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_lsh)(((my_c)->my_as)); + (my_emit_lsh)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_rsh)(((my_c)->my_as)); + (my_emit_rsh)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_and)(((my_c)->my_as)); + (my_emit_and)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_or)(((my_c)->my_as)); + (my_emit_or)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_xor)(((my_c)->my_as)); + (my_emit_xor)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); } else { @@ -1935,15 +1944,15 @@ void( my_compile_func)(struct my_compiler* my_c,struct my_decl* my_d){ } else { (my_pragma)=(0UL); } - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),((my_d)->my_func_preamble),(my_pragma)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),((my_d)->my_func_preamble),(my_pragma)); (my_compile_stmt)((my_c),(my_d),(((my_d)->my_func_def)->my_b),((struct my_label*)0UL),((struct my_label*)0UL)); - (my_emit_num)(((my_c)->my_as),(0UL)); + (my_emit_num)(((my_c)->my_s),(0UL)); if (my_pragma) { - (my_emit_ud)(((my_c)->my_as)); + (my_emit_ud)(((my_c)->my_s)); } - (my_emit_ret)(((my_c)->my_as)); + (my_emit_ret)(((my_c)->my_s)); } void( my_compile_include)(struct my_compiler* my_c,struct my_node* my_n){ unsigned char* my_filename = 0; @@ -1960,11 +1969,11 @@ void( my_compile_include)(struct my_compiler* my_c,struct my_node* my_n){ } (my_blob)=((my_readall)((my_fd),(&(my_len)),((my_c)->my_a))); (my_close)((my_fd)); - (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RDI)); - (my_as_opri64)(((my_c)->my_as),(my_OP_MOVABS),(my_R_RAX),(my_len)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_emit_blob)(((my_c)->my_as),(my_blob),(my_len)); + (my_as_opr)(((my_c)->my_s),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_POPR),(my_R_RDI)); + (my_as_opri64)(((my_c)->my_s),(my_OP_MOVABS),(my_R_RAX),(my_len)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_emit_blob)(((my_c)->my_s),(my_blob),(my_len)); (my_free)(((my_c)->my_a),(my_blob)); } void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,struct my_label* my_top,struct my_label* my_out){ @@ -1980,25 +1989,25 @@ void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n ((my_c)->my_colno)=((my_n)->my_colno); (my_kind)=((my_n)->my_kind); if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { - (my_ifout)=((my_mklabel)(((my_c)->my_as))); + (my_ifout)=((my_mklabel)(((my_c)->my_s))); (my_no)=((struct my_label*)0UL); while (1) { if (my_no) { - (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_fixup_label)(((my_c)->my_s),(my_no)); } if ((unsigned long)(!(my_n))) { break; } - (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((my_mklabel)(((my_c)->my_s))); if (((my_n)->my_a)->my_a) { (my_compile_expr)((my_c),(my_d),(((my_n)->my_a)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_jz)(((my_c)->my_s),(my_no)); } (my_compile_stmt)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_top),(my_out)); - (my_emit_jmp)(((my_c)->my_as),(my_ifout)); + (my_emit_jmp)(((my_c)->my_s),(my_ifout)); (my_n)=((my_n)->my_b); } - (my_fixup_label)(((my_c)->my_as),(my_ifout)); + (my_fixup_label)(((my_c)->my_s),(my_ifout)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { while (1) { if ((unsigned long)(!(my_n))) { @@ -2008,22 +2017,22 @@ void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n (my_n)=((my_n)->my_b); } } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { - (my_top)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_fixup_label)(((my_c)->my_as),(my_top)); + (my_top)=((my_mklabel)(((my_c)->my_s))); + (my_out)=((my_mklabel)(((my_c)->my_s))); + (my_fixup_label)(((my_c)->my_s),(my_top)); (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); - (my_emit_jmp)(((my_c)->my_as),(my_top)); - (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_emit_jmp)(((my_c)->my_s),(my_top)); + (my_fixup_label)(((my_c)->my_s),(my_out)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { if ((unsigned long)(!(my_out))) { (my_cdie)((my_c),((unsigned char *)"break outside loop")); } - (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_emit_jmp)(((my_c)->my_s),(my_out)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { if ((unsigned long)(!(my_top))) { (my_cdie)((my_c),((unsigned char *)"continue outside loop")); } - (my_emit_jmp)(((my_c)->my_as),(my_top)); + (my_emit_jmp)(((my_c)->my_s),(my_top)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { if ((my_n)->my_a) { if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))==((long)(my_TY_VOID)))) { @@ -2034,21 +2043,21 @@ void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))!=((long)(my_TY_VOID)))) { (my_cdie)((my_c),((unsigned char *)"returning void in a non void function")); } - (my_emit_num)(((my_c)->my_as),(0UL)); + (my_emit_num)(((my_c)->my_s),(0UL)); } - (my_emit_ret)(((my_c)->my_as)); + (my_emit_ret)(((my_c)->my_s)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); - (my_fixup_label)(((my_c)->my_as),((my_v)->my_goto_label)); + (my_fixup_label)(((my_c)->my_s),((my_v)->my_goto_label)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_goto_defined))))) { (my_cdie)((my_c),((unsigned char *)"label not defined")); } - (my_emit_jmp)(((my_c)->my_as),((my_v)->my_goto_label)); + (my_emit_jmp)(((my_c)->my_s),((my_v)->my_goto_label)); } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { (my_compile_expr)((my_c),(my_d),(my_n),(1UL)); - (my_emit_pop)(((my_c)->my_as),(1UL)); + (my_emit_pop)(((my_c)->my_s),(1UL)); } } struct my_node*( my_concat_program)(struct my_node* my_a,struct my_node* my_b){ @@ -2976,519 +2985,519 @@ void( my_emit_builtin)(struct my_compiler* my_c){ struct my_decl* my_d = 0; (my_d)=((my_find)((my_c),((unsigned char *)"syscall"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_emit_syscall)(((my_c)->my_as)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_emit_syscall)(((my_c)->my_s)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_restorer"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_restorer)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_restorer)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_include"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_UD2)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"ud2"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_UD2)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"cpuid"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_CPUID)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_CPUID)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RCX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"inb"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_op)(((my_c)->my_as),(my_OP_IN)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_s),(my_OP_IN)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"outb"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_op)(((my_c)->my_as),(my_OP_OUT)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_op)(((my_c)->my_s),(my_OP_OUT)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"inw"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_emit)(((my_c)->my_as),(my_OP_OS)); - (my_as_op)(((my_c)->my_as),(my_OP_IND)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_emit)(((my_c)->my_s),(my_OP_OS)); + (my_as_op)(((my_c)->my_s),(my_OP_IND)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"outw"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_emit)(((my_c)->my_as),(my_OP_OS)); - (my_as_op)(((my_c)->my_as),(my_OP_OUTD)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_emit)(((my_c)->my_s),(my_OP_OS)); + (my_as_op)(((my_c)->my_s),(my_OP_OUTD)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"ind"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_op)(((my_c)->my_as),(my_OP_IND)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_s),(my_OP_IND)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"outd"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_op)(((my_c)->my_as),(my_OP_OUTD)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_op)(((my_c)->my_s),(my_OP_OUTD)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdmsr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_op)(((my_c)->my_as),(my_OP_RDMSR)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RCX),(32UL)); - (my_as_modr)(((my_c)->my_as),(my_OP_SHLM),(my_R_RDX)); - (my_as_modrr)(((my_c)->my_as),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_s),(my_OP_RDMSR)); + (my_as_modri)(((my_c)->my_s),(my_OP_MOVI),(my_R_RCX),(32UL)); + (my_as_modr)(((my_c)->my_s),(my_OP_SHLM),(my_R_RDX)); + (my_as_modrr)(((my_c)->my_s),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrmsr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RDX),(my_R_RAX)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RCX),(32UL)); - (my_as_modr)(((my_c)->my_as),(my_OP_SHRM),(my_R_RDX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_op)(((my_c)->my_as),(my_OP_WRMSR)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_MOVE),(my_R_RDX),(my_R_RAX)); + (my_as_modri)(((my_c)->my_s),(my_OP_MOVI),(my_R_RCX),(32UL)); + (my_as_modr)(((my_c)->my_s),(my_OP_SHRM),(my_R_RDX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_op)(((my_c)->my_s),(my_OP_WRMSR)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdcr0"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrcr0"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdcr2"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR2),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDCRR),(my_R_CR2),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrcr2"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR2),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRCRR),(my_R_CR2),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdcr3"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR3),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDCRR),(my_R_CR3),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrcr3"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR3),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRCRR),(my_R_CR3),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdcr4"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDCRR),(my_R_CR4),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDCRR),(my_R_CR4),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrcr4"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"lgdt"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RAX),(1UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); - (my_as_modm)(((my_c)->my_as),(my_OP_LGDTM),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),(16UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_SUBI),(my_R_RSP),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_SUBI),(my_R_RAX),(1UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); + (my_as_modm)(((my_c)->my_s),(my_OP_LGDTM),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_ADDI),(my_R_RSP),(16UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"lidt"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RAX),(1UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); - (my_as_modm)(((my_c)->my_as),(my_OP_LIDTM),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),(16UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_SUBI),(my_R_RSP),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_SUBI),(my_R_RAX),(1UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(2UL)); + (my_as_modm)(((my_c)->my_s),(my_OP_LIDTM),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_ADDI),(my_R_RSP),(16UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"lldt"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modr)(((my_c)->my_as),(my_OP_LLDTM),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modr)(((my_c)->my_s),(my_OP_LLDTM),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"ltr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modr)(((my_c)->my_as),(my_OP_LTRM),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modr)(((my_c)->my_s),(my_OP_LTRM),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"lseg"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); - (my_as_modrr)(((my_c)->my_as),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_op)(((my_c)->my_as),(my_OP_CALL)); - (my_as_emit)(((my_c)->my_as),(5UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_JMP)); - (my_as_emit)(((my_c)->my_as),(2UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); + (my_as_modrr)(((my_c)->my_s),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); + (my_as_op)(((my_c)->my_s),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)(((my_c)->my_s),(my_OP_CALL)); + (my_as_emit)(((my_c)->my_s),(5UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_JMP)); + (my_as_emit)(((my_c)->my_s),(2UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_IRETQ)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"hlt"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_HLT)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_HLT)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"cli"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_CLI)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_CLI)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"sti"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_STI)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_STI)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"rdflags"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_PUSHF)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wrflags"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_op)(((my_c)->my_as),(my_OP_POPF)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)(((my_c)->my_s),(my_OP_POPF)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"wbinvld"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modm)(((my_c)->my_as),(my_OP_WBINVD),(my_R_RAX),(0UL),(0UL),(0UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modm)(((my_c)->my_s),(my_OP_WBINVD),(my_R_RAX),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"invlpg"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modm)(((my_c)->my_as),(my_OP_INVLPGM),(my_R_RAX),(0UL),(0UL),(0UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modm)(((my_c)->my_s),(my_OP_INVLPGM),(my_R_RAX),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_ssr0"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); (my_emit_ssr)((my_c)); } (my_d)=((my_find)((my_c),((unsigned char *)"_isr0"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); (my_emit_isr)((my_c)); } (my_d)=((my_find)((my_c),((unsigned char *)"_rgs"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_emit)(((my_c)->my_s),(my_OP_GS)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_r32"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); - (((my_c)->my_as)->my_bits32)=(1UL); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); - (((my_c)->my_as)->my_bits32)=(0UL); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (((my_c)->my_s)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSI),(0UL),(0UL),(0UL)); + (((my_c)->my_s)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_w32"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (((my_c)->my_as)->my_bits32)=(1UL); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (((my_c)->my_as)->my_bits32)=(0UL); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (((my_c)->my_s)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_s)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_r16"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (((my_c)->my_as)->my_bits32)=(1UL); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (((my_c)->my_as)->my_bits32)=(0UL); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (((my_c)->my_s)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_s)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_w16"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (((my_c)->my_as)->my_bits32)=(1UL); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (((my_c)->my_as)->my_bits32)=(0UL); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (((my_c)->my_s)->my_bits32)=(1UL); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE16),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (((my_c)->my_s)->my_bits32)=(0UL); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"_rdrand"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(0UL),(0UL)); - (my_as_modr)(((my_c)->my_as),(my_OP_RDRAND),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_emit_ret)(((my_c)->my_as)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_s),(0UL),(0UL)); + (my_as_modr)(((my_c)->my_s),(my_OP_RDRAND),(my_R_RAX)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_emit_ret)(((my_c)->my_s)); } (my_d)=((my_find)((my_c),((unsigned char *)"taskswitch"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_add_symbol)(((my_c)->my_as),((my_d)->my_name),((my_d)->my_func_label)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_op)(((my_c)->my_as),(my_OP_PUSHF)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LEA),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDSR),(my_R_CS),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_RDSR),(my_R_SS),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); + (my_fixup_label)(((my_c)->my_s),((my_d)->my_func_label)); + (my_add_symbol)(((my_c)->my_s),((my_d)->my_name),((my_d)->my_func_label)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); + (my_as_op)(((my_c)->my_s),(my_OP_PUSHF)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LEA),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDSR),(my_R_CS),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_RDSR),(my_R_SS),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_op)(((my_c)->my_s),(my_OP_IRETQ)); } } void( my_emit_call)(struct my_assembler* my_c,unsigned long my_n){ @@ -3535,101 +3544,101 @@ void( my_emit_isr)(struct my_compiler* my_c){ struct my_decl* my_d = 0; struct my_label* my_out = 0; unsigned long my_i = 0; - (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_s))); (my_i)=(0UL); while (1) { if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { break; } - (my_reserve)(((my_c)->my_as),(16UL)); + (my_reserve)(((my_c)->my_s),(16UL)); if ((unsigned long)(((unsigned long)(((long)(my_i))==((long)(8UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(10UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(11UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(12UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(13UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(14UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(17UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(21UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(29UL))))||((unsigned long)(((long)(my_i))==((long)(30UL)))))))))))))))))))))) { - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - } else { - (my_as_emit)(((my_c)->my_as),(106UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - } - (my_as_emit)(((my_c)->my_as),(104UL)); - (my_as_emit)(((my_c)->my_as),(my_i)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(233UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_addfixup)(((my_c)->my_as),(my_out)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_s),(144UL)); + (my_as_emit)(((my_c)->my_s),(144UL)); + } else { + (my_as_emit)(((my_c)->my_s),(106UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + } + (my_as_emit)(((my_c)->my_s),(104UL)); + (my_as_emit)(((my_c)->my_s),(my_i)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(233UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_as_emit)(((my_c)->my_s),(0UL)); + (my_addfixup)(((my_c)->my_s),(my_out)); + (my_as_emit)(((my_c)->my_s),(144UL)); + (my_as_emit)(((my_c)->my_s),(144UL)); + (my_as_emit)(((my_c)->my_s),(144UL)); + (my_as_emit)(((my_c)->my_s),(144UL)); (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_fixup_label)(((my_c)->my_as),(my_out)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(176UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(0UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(160UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(8UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(168UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_fixup_label)(((my_c)->my_s),(my_out)); + (my_as_modri)(((my_c)->my_s),(my_OP_SUBI),(my_R_RSP),(176UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(0UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(8UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(168UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); (my_d)=((my_find)((my_c),((unsigned char *)"_isr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { - (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); - } - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(176UL))+((unsigned long)((unsigned long)(((long)(3UL))*((long)(8UL)))))))); - (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); + (my_as_jmp)(((my_c)->my_s),(my_OP_CALL),((my_d)->my_func_label)); + } + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(176UL))+((unsigned long)((unsigned long)(((long)(3UL))*((long)(8UL)))))))); + (my_as_op)(((my_c)->my_s),(my_OP_IRETQ)); } void( my_emit_jmp)(struct my_assembler* my_c,struct my_label* my_l){ (my_as_jmp)((my_c),(my_OP_JMP),(my_l)); @@ -4065,81 +4074,81 @@ void( my_emit_ssr)(struct my_compiler* my_c){ if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { (my_cdie)((my_c),((unsigned char *)"no _save")); } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_STORE),(my_R_RSP),((my_v)->my_member_offset)); + (my_as_emit)(((my_c)->my_s),(my_OP_GS)); + (my_as_modra)(((my_c)->my_s),(my_OP_STORE),(my_R_RSP),((my_v)->my_member_offset)); (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"curtask"),(0UL))); if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { (my_cdie)((my_c),((unsigned char *)"no global.curtask")); } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),((my_v)->my_member_offset)); + (my_as_emit)(((my_c)->my_s),(my_OP_GS)); + (my_as_modra)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSP),((my_v)->my_member_offset)); (my_v)=((my_find)((my_c),((unsigned char *)"task"),((unsigned char *)"stack"),(0UL))); if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { (my_cdie)((my_c),((unsigned char *)"no task.stack")); } - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),((my_v)->my_member_offset)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(4096UL))-((unsigned long)(176UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(160UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(168UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(43UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(144UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(35UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),((my_v)->my_member_offset)); + (my_as_modri)(((my_c)->my_s),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(4096UL))-((unsigned long)(176UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(168UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_MOVI),(my_R_RAX),(43UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(144UL)); + (my_as_modri)(((my_c)->my_s),(my_OP_MOVI),(my_R_RAX),(35UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(152UL)); (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { (my_cdie)((my_c),((unsigned char *)"no _save")); } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),((my_v)->my_member_offset)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(32UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); - (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_as_emit)(((my_c)->my_s),(my_OP_GS)); + (my_as_modra)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),((my_v)->my_member_offset)); + (my_as_modrm)(((my_c)->my_s),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_modrr)(((my_c)->my_s),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); + (my_as_modrr)(((my_c)->my_s),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrr)(((my_c)->my_s),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); (my_d)=((my_find)((my_c),((unsigned char *)"_ssr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { - (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); - } - (my_as_op)(((my_c)->my_as),(my_OP_CLI)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((long)(3UL))*((long)(8UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),(32UL)); - (my_as_rex)(((my_c)->my_as),(my_OP_SYSRET),(0UL),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_SYSRET)); + (my_as_jmp)(((my_c)->my_s),(my_OP_CALL),((my_d)->my_func_label)); + } + (my_as_op)(((my_c)->my_s),(my_OP_CLI)); + (my_as_modri)(((my_c)->my_s),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((long)(3UL))*((long)(8UL))))); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_rex)(((my_c)->my_s),(my_OP_SYSRET),(0UL),(0UL),(0UL)); + (my_as_op)(((my_c)->my_s),(my_OP_SYSRET)); } void( my_emit_store)(struct my_assembler* my_c,struct my_type* my_t){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); @@ -4390,7 +4399,7 @@ struct my_decl*( my_find)(struct my_compiler* my_c,unsigned char* my_name,unsign ((my_d)->my_used_next)=((struct my_decl*)0UL); ((my_d)->my_func_defined)=(0UL); ((my_d)->my_func_type)=((struct my_type*)0UL); - ((my_d)->my_func_label)=((my_mklabel)(((my_c)->my_as))); + ((my_d)->my_func_label)=((my_mklabel)(((my_c)->my_s))); ((my_d)->my_func_def)=((struct my_node*)0UL); ((my_d)->my_func_used)=(0UL); ((my_d)->my_struct_defined)=(0UL); @@ -4409,7 +4418,7 @@ struct my_decl*( my_find)(struct my_compiler* my_c,unsigned char* my_name,unsign ((my_d)->my_var_offset)=(0UL); ((my_d)->my_var_def)=((struct my_node*)0UL); ((my_d)->my_goto_defined)=(0UL); - ((my_d)->my_goto_label)=((my_mklabel)(((my_c)->my_as))); + ((my_d)->my_goto_label)=((my_mklabel)(((my_c)->my_s))); (*(my_link))=(my_d); return my_d; } @@ -4907,8 +4916,8 @@ void( my_main)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_ return; } (my_emit_builtin)((my_c)); - (my_open_output)(((my_c)->my_as),(my_filename)); - (my_writeout)(((my_c)->my_as),((my_c)->my_start),((my_c)->my_kstart)); + (my_open_output)(((my_c)->my_s),(my_filename)); + (my_writeout)(((my_c)->my_s),((my_c)->my_start),((my_c)->my_kstart)); } void( my_mark_expr_used)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n){ struct my_decl* my_v = 0; @@ -5929,6 +5938,28 @@ unsigned long( my_peg_P_arg_decl)(struct my_peg* my_c){ } return my_ok; } +unsigned long( my_peg_P_as)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_P_as)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"as"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + } + if (my_ok) { + (my_leave)((my_c),(my_P_as)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} unsigned long( my_peg_P_assign_stmt)(struct my_peg* my_c){ unsigned long my_ok = 0; (my_enter)((my_c),(my_P_assign_stmt)); @@ -6162,7 +6193,17 @@ unsigned long( my_peg_P_call_expr)(struct my_peg* my_c){ unsigned long( my_peg_P_cast_expr)(struct my_peg* my_c){ unsigned long my_ok = 0; (my_enter)((my_c),(my_P_cast_expr)); + (my_choice)((my_c)); (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"as"))); + } + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); + } if (my_ok) { (my_ok)=((my_peg_P_sp)((my_c))); } @@ -7630,6 +7671,10 @@ unsigned long( my_peg_P_reserved)(struct my_peg* my_c){ (my_choice)((my_c)); (my_ok)=((my_peg_P_func)((my_c))); } + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_P_as)((my_c))); + } if (my_ok) { (my_commit)((my_c)); } else { @@ -9773,12 +9818,12 @@ void( my_typecheck_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { (my_typecheck_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { - if ((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_STRUCT)))) { + if ((unsigned long)(((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_STRUCT))))&&((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_UNION)))))) { (my_cdie)((my_c),((unsigned char *)"dot not a struct")); } (my_v)=((my_find)((my_c),((((((my_n)->my_a)->my_t)->my_val)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); } else { - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_STRUCT)))) { + if ((unsigned long)(((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_STRUCT))))&&((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_UNION)))))) { (my_cdie)((my_c),((unsigned char *)"dot not a struct")); } (my_v)=((my_find)((my_c),(((((my_n)->my_a)->my_t)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); diff --git a/cc1.om b/cc1.om @@ -11,7 +11,7 @@ struct compiler { colno: int; // Assembler - as: *assembler; + s: *assembler; // Namespace decls: *decl; @@ -61,7 +61,7 @@ comp_setup(a: *alloc): *compiler { c.lineno = 0; c.colno = 0; - c.as = setup_assembler(a); + c.s = setup_assembler(a); c.decls = 0:*decl; @@ -619,17 +619,17 @@ compile_func(c: *compiler, d: *decl) { } // Compile the function body - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, d.func_preamble, pragma); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, d.func_preamble, pragma); compile_stmt(c, d, d.func_def.b, 0:*label, 0:*label); - emit_num(c.as, 0); + emit_num(c.s, 0); if (pragma) { - emit_ud(c.as); + emit_ud(c.s); } - emit_ret(c.as); + emit_ret(c.s); } typecheck_expr(c: *compiler, d: *decl, n: *node, rhs: int) { @@ -1311,11 +1311,11 @@ compile_include(c: *compiler, n: *node) { close(fd); - as_opr(c.as, OP_POPR, R_RAX); - as_opr(c.as, OP_POPR, R_RDI); - as_opri64(c.as, OP_MOVABS, R_RAX, len); - as_modrm(c.as, OP_STORE, R_RAX, R_RDI, 0, 0, 0); - emit_blob(c.as, blob, len); + as_opr(c.s, OP_POPR, R_RAX); + as_opr(c.s, OP_POPR, R_RDI); + as_opri64(c.s, OP_MOVABS, R_RAX, len); + as_modrm(c.s, OP_STORE, R_RAX, R_RDI, 0, 0, 0); + emit_blob(c.s, blob, len); free(c.a, blob); } @@ -1333,11 +1333,11 @@ compile_expr(c: *compiler, d: *decl, n: *node, rhs: int) { kind = n.kind; if (kind == N_STR) { - emit_str(c.as, n.s); + emit_str(c.s, n.s); } else if (kind == N_NUM) { - emit_num(c.as, n.n); + emit_num(c.s, n.n); } else if (kind == N_CHAR) { - emit_num(c.as, n.n); + emit_num(c.s, n.n); } else if (kind == N_EXPRLIST) { if (n.b) { compile_expr(c, d, n.b, 1); @@ -1357,19 +1357,19 @@ compile_expr(c: *compiler, d: *decl, n: *node, rhs: int) { v = find(c, d.name, n.a.s, 0); if (v && v.var_defined) { - emit_lea(c.as, v.var_offset); - emit_load(c.as, n.a.t); - emit_call(c.as, count_args(c, n.a.t.arg)); + emit_lea(c.s, v.var_offset); + emit_load(c.s, n.a.t); + emit_call(c.s, count_args(c, n.a.t.arg)); } else if !strcmp(n.a.s, "_include") { v = find(c, n.a.s, 0:*byte, 0); compile_include(c, n); } else { v = find(c, n.a.s, 0:*byte, 0); - emit_lcall(c.as, v.func_label, count_args(c, n.a.t.arg)); + emit_lcall(c.s, v.func_label, count_args(c, n.a.t.arg)); } } else { compile_expr(c, d, n.a, 1); - emit_call(c.as, count_args(c, n.a.t.arg)); + emit_call(c.s, count_args(c, n.a.t.arg)); } if (n.b) { @@ -1382,56 +1382,56 @@ compile_expr(c: *compiler, d: *decl, n: *node, rhs: int) { if (n.a.t.kind == TY_PTR) { v = find(c, n.a.t.val.st.name, n.b.s, 0); - emit_load(c.as, n.a.t); + emit_load(c.s, n.a.t); } else { v = find(c, n.a.t.st.name, n.b.s, 0); } - emit_num(c.as, v.member_offset); - emit_add(c.as); + emit_num(c.s, v.member_offset); + emit_add(c.s); if (rhs) { - emit_load(c.as, n.t); + emit_load(c.s, n.t); } } else if (kind == N_IDENT) { v = find(c, n.s, 0:*byte, 0); if (v && v.enum_defined) { - emit_num(c.as, v.enum_value); + emit_num(c.s, v.enum_value); return; } v = find(c, d.name, n.s, 0); if (v && v.var_defined) { - emit_lea(c.as, v.var_offset); + emit_lea(c.s, v.var_offset); if (rhs) { - emit_load(c.as, n.t); + emit_load(c.s, n.t); } return; } v = find(c, n.s, 0:*byte, 0); if (v && v.func_defined) { - emit_ptr(c.as, v.func_label); + emit_ptr(c.s, v.func_label); return; } } else if (kind == N_ASSIGN) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 0); - emit_store(c.as, n.t); + emit_store(c.s, n.t); } else if (kind == N_SIZEOF) { - out = mklabel(c.as); + out = mklabel(c.s); - emit_jmp(c.as, out); + emit_jmp(c.s, out); compile_expr(c, d, n.a, 0); - fixup_label(c.as, out); + fixup_label(c.s, out); if (n.a.t.kind == TY_BYTE) { - emit_num(c.as, 1); + emit_num(c.s, 1); } else { - emit_num(c.as, type_sizeof(c, n.a.t)); + emit_num(c.s, type_sizeof(c, n.a.t)); } } else if (kind == N_REF) { compile_expr(c, d, n.a, 0); @@ -1439,146 +1439,146 @@ compile_expr(c: *compiler, d: *decl, n: *node, rhs: int) { compile_expr(c, d, n.a, 1); if (rhs) { - emit_load(c.as, n.t); + emit_load(c.s, n.t); } } else if (kind == N_INDEX) { compile_expr(c, d, n.a, 1); compile_expr(c, d, n.b, 1); if (n.t.kind == TY_BYTE) { - emit_num(c.as, 1); + emit_num(c.s, 1); } else { - emit_num(c.as, type_sizeof(c, n.t)); + emit_num(c.s, type_sizeof(c, n.t)); } - emit_mul(c.as); - emit_add(c.as); + emit_mul(c.s); + emit_add(c.s); if (rhs) { - emit_load(c.as, n.t); + emit_load(c.s, n.t); } } else if (kind == N_LT) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_lt(c.as); + emit_lt(c.s); } else if (kind == N_GT) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_gt(c.as); + emit_gt(c.s); } else if (kind == N_LE) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_le(c.as); + emit_le(c.s); } else if (kind == N_GE) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_ge(c.as); + emit_ge(c.s); } else if (kind == N_EQ) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_eq(c.as); + emit_eq(c.s); } else if (kind == N_NE) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_ne(c.as); + emit_ne(c.s); } else if (kind == N_BNOT) { - no = mklabel(c.as); - out = mklabel(c.as); + no = mklabel(c.s); + out = mklabel(c.s); compile_expr(c, d, n.a, 1); - emit_jz(c.as, no); - emit_num(c.as, 0); - emit_jmp(c.as, out); - fixup_label(c.as, no); - emit_num(c.as, 1); - fixup_label(c.as, out); + emit_jz(c.s, no); + emit_num(c.s, 0); + emit_jmp(c.s, out); + fixup_label(c.s, no); + emit_num(c.s, 1); + fixup_label(c.s, out); } else if (kind == N_BOR) { - no = mklabel(c.as); - out = mklabel(c.as); + no = mklabel(c.s); + out = mklabel(c.s); compile_expr(c, d, n.a, 1); - emit_jz(c.as, no); - emit_num(c.as, 1); - emit_jmp(c.as, out); + emit_jz(c.s, no); + emit_num(c.s, 1); + emit_jmp(c.s, out); - fixup_label(c.as, no); - no = mklabel(c.as); + fixup_label(c.s, no); + no = mklabel(c.s); compile_expr(c, d, n.b, 1); - emit_jz(c.as, no); - emit_num(c.as, 1); - emit_jmp(c.as, out); + emit_jz(c.s, no); + emit_num(c.s, 1); + emit_jmp(c.s, out); - fixup_label(c.as, no); - emit_num(c.as, 0); + fixup_label(c.s, no); + emit_num(c.s, 0); - fixup_label(c.as, out); + fixup_label(c.s, out); } else if (kind == N_BAND) { - no = mklabel(c.as); - out = mklabel(c.as); + no = mklabel(c.s); + out = mklabel(c.s); compile_expr(c, d, n.a, 1); - emit_jz(c.as, no); + emit_jz(c.s, no); compile_expr(c, d, n.b, 1); - emit_jz(c.as, no); + emit_jz(c.s, no); - emit_num(c.as, 1); - emit_jmp(c.as, out); + emit_num(c.s, 1); + emit_jmp(c.s, out); - fixup_label(c.as, no); - emit_num(c.as, 0); + fixup_label(c.s, no); + emit_num(c.s, 0); - fixup_label(c.as, out); + fixup_label(c.s, out); } else if (kind == N_POS) { compile_expr(c, d, n.a, 1); } else if (kind == N_NEG) { compile_expr(c, d, n.a, 1); - emit_neg(c.as); + emit_neg(c.s); } else if (kind == N_NOT) { compile_expr(c, d, n.a, 1); - emit_not(c.as); + emit_not(c.s); } else if (kind == N_ADD) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_add(c.as); + emit_add(c.s); } else if (kind == N_SUB) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_sub(c.as); + emit_sub(c.s); } else if (kind == N_MUL) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_mul(c.as); + emit_mul(c.s); } else if (kind == N_DIV) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_div(c.as); + emit_div(c.s); } else if (kind == N_MOD) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_mod(c.as); + emit_mod(c.s); } else if (kind == N_LSH) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_lsh(c.as); + emit_lsh(c.s); } else if (kind == N_RSH) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_rsh(c.as); + emit_rsh(c.s); } else if (kind == N_AND) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_and(c.as); + emit_and(c.s); } else if (kind == N_OR) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_or(c.as); + emit_or(c.s); } else if (kind == N_XOR) { compile_expr(c, d, n.b, 1); compile_expr(c, d, n.a, 1); - emit_xor(c.as); + emit_xor(c.s); } else if (kind == N_CAST) { compile_expr(c, d, n.a, 1); } else { @@ -1662,30 +1662,30 @@ compile_stmt(c: *compiler, d: *decl, n: *node, top: *label, out: *label) { kind = n.kind; if (kind == N_CONDLIST) { - ifout = mklabel(c.as); + ifout = mklabel(c.s); no = 0: *label; loop { if (no) { - fixup_label(c.as, no); + fixup_label(c.s, no); } if (!n) { break; } - no = mklabel(c.as); + no = mklabel(c.s); if (n.a.a) { compile_expr(c, d, n.a.a, 1); - emit_jz(c.as, no); + emit_jz(c.s, no); } compile_stmt(c, d, n.a.b, top, out); - emit_jmp(c.as, ifout); + emit_jmp(c.s, ifout); n = n.b; } - fixup_label(c.as, ifout); + fixup_label(c.s, ifout); } else if (kind == N_STMTLIST) { loop { if (!n) { @@ -1695,22 +1695,22 @@ compile_stmt(c: *compiler, d: *decl, n: *node, top: *label, out: *label) { n = n.b; } } else if (kind == N_LOOP) { - top = mklabel(c.as); - out = mklabel(c.as); - fixup_label(c.as, top); + top = mklabel(c.s); + out = mklabel(c.s); + fixup_label(c.s, top); compile_stmt(c, d, n.a, top, out); - emit_jmp(c.as, top); - fixup_label(c.as, out); + emit_jmp(c.s, top); + fixup_label(c.s, out); } else if (kind == N_BREAK) { if (!out) { cdie(c, "break outside loop"); } - emit_jmp(c.as, out); + emit_jmp(c.s, out); } else if (kind == N_CONTINUE) { if (!top) { cdie(c, "continue outside loop"); } - emit_jmp(c.as, top); + emit_jmp(c.s, top); } else if (kind == N_RETURN) { if (n.a) { if (d.func_type.val.kind == TY_VOID) { @@ -1721,21 +1721,21 @@ compile_stmt(c: *compiler, d: *decl, n: *node, top: *label, out: *label) { if (d.func_type.val.kind != TY_VOID) { cdie(c, "returning void in a non void function"); } - emit_num(c.as, 0); + emit_num(c.s, 0); } - emit_ret(c.as); + emit_ret(c.s); } else if (kind == N_LABEL) { v = find(c, d.name, n.a.s, 0); - fixup_label(c.as, v.goto_label); + fixup_label(c.s, v.goto_label); } else if (kind == N_GOTO) { v = find(c, d.name, n.a.s, 0); if (!v || !v.goto_defined) { cdie(c, "label not defined"); } - emit_jmp(c.as, v.goto_label); + emit_jmp(c.s, v.goto_label); } else if (kind != N_VARDECL) { compile_expr(c, d, n, 1); - emit_pop(c.as, 1); + emit_pop(c.s, 1); } } @@ -1748,99 +1748,99 @@ emit_ssr(c: *compiler) { cdie(c, "no _save"); } - as_emit(c.as, OP_GS); - as_modra(c.as, OP_STORE, R_RSP, v.member_offset); + as_emit(c.s, OP_GS); + as_modra(c.s, OP_STORE, R_RSP, v.member_offset); v = find(c, "global", "curtask", 0); if (!v || !v.member_defined) { cdie(c, "no global.curtask"); } - as_emit(c.as, OP_GS); - as_modra(c.as, OP_LOAD, R_RSP, v.member_offset); + as_emit(c.s, OP_GS); + as_modra(c.s, OP_LOAD, R_RSP, v.member_offset); v = find(c, "task", "stack", 0); if (!v || !v.member_defined) { cdie(c, "no task.stack"); } - as_modrm(c.as, OP_LOAD, R_RSP, R_RSP, 0, 0, v.member_offset); - as_modri(c.as, OP_ADDI, R_RSP, 4096 - 176); - - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 0); - as_modrm(c.as, OP_STORE, R_RDX, R_RSP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RBX, R_RSP, 0, 0, 24); - as_modrm(c.as, OP_STORE, R_RBP, R_RSP, 0, 0, 40); - as_modrm(c.as, OP_STORE, R_RSI, R_RSP, 0, 0, 48); - as_modrm(c.as, OP_STORE, R_RDI, R_RSP, 0, 0, 56); - as_modrm(c.as, OP_STORE, R_R8, R_RSP, 0, 0, 64); - as_modrm(c.as, OP_STORE, R_R9, R_RSP, 0, 0, 72); - as_modrm(c.as, OP_STORE, R_R10, R_RSP, 0, 0, 80); - as_modrm(c.as, OP_STORE, R_R12, R_RSP, 0, 0, 96); - as_modrm(c.as, OP_STORE, R_R13, R_RSP, 0, 0, 104); - as_modrm(c.as, OP_STORE, R_R14, R_RSP, 0, 0, 112); - as_modrm(c.as, OP_STORE, R_R15, R_RSP, 0, 0, 120); - as_modrm(c.as, OP_STORE, R_RCX, R_RSP, 0, 0, 128); - as_modrm(c.as, OP_STORE, R_R11, R_RSP, 0, 0, 136); - - as_modrr(c.as, OP_XORRM, R_RAX, R_RAX); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 8); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 88); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 160); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 168); - - as_modri(c.as, OP_MOVI, R_RAX, 43); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 144); - as_modri(c.as, OP_MOVI, R_RAX, 35); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 152); + as_modrm(c.s, OP_LOAD, R_RSP, R_RSP, 0, 0, v.member_offset); + as_modri(c.s, OP_ADDI, R_RSP, 4096 - 176); + + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 0); + as_modrm(c.s, OP_STORE, R_RDX, R_RSP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RBX, R_RSP, 0, 0, 24); + as_modrm(c.s, OP_STORE, R_RBP, R_RSP, 0, 0, 40); + as_modrm(c.s, OP_STORE, R_RSI, R_RSP, 0, 0, 48); + as_modrm(c.s, OP_STORE, R_RDI, R_RSP, 0, 0, 56); + as_modrm(c.s, OP_STORE, R_R8, R_RSP, 0, 0, 64); + as_modrm(c.s, OP_STORE, R_R9, R_RSP, 0, 0, 72); + as_modrm(c.s, OP_STORE, R_R10, R_RSP, 0, 0, 80); + as_modrm(c.s, OP_STORE, R_R12, R_RSP, 0, 0, 96); + as_modrm(c.s, OP_STORE, R_R13, R_RSP, 0, 0, 104); + as_modrm(c.s, OP_STORE, R_R14, R_RSP, 0, 0, 112); + as_modrm(c.s, OP_STORE, R_R15, R_RSP, 0, 0, 120); + as_modrm(c.s, OP_STORE, R_RCX, R_RSP, 0, 0, 128); + as_modrm(c.s, OP_STORE, R_R11, R_RSP, 0, 0, 136); + + as_modrr(c.s, OP_XORRM, R_RAX, R_RAX); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 8); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 88); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 160); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 168); + + as_modri(c.s, OP_MOVI, R_RAX, 43); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 144); + as_modri(c.s, OP_MOVI, R_RAX, 35); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 152); v = find(c, "global", "_save", 0); if (!v || !v.member_defined) { cdie(c, "no _save"); } - as_emit(c.as, OP_GS); - as_modra(c.as, OP_LOAD, R_RAX, v.member_offset); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 32); - as_modrr(c.as, OP_MOVE, R_RAX, R_RSP); + as_emit(c.s, OP_GS); + as_modra(c.s, OP_LOAD, R_RAX, v.member_offset); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 32); + as_modrr(c.s, OP_MOVE, R_RAX, R_RSP); - as_modrr(c.as, OP_XORRM, R_RBP, R_RBP); - as_opr(c.as, OP_PUSHR, R_RBP); - as_opr(c.as, OP_PUSHR, R_RBP); - as_modrr(c.as, OP_MOVE, R_RBP, R_RSP); + as_modrr(c.s, OP_XORRM, R_RBP, R_RBP); + as_opr(c.s, OP_PUSHR, R_RBP); + as_opr(c.s, OP_PUSHR, R_RBP); + as_modrr(c.s, OP_MOVE, R_RBP, R_RSP); - as_opr(c.as, OP_PUSHR, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); d = find(c, "_ssr", 0:*byte, 1); if (d.func_defined && d.func_label.fixed) { - as_jmp(c.as, OP_CALL, d.func_label); + as_jmp(c.s, OP_CALL, d.func_label); } - as_op(c.as, OP_CLI); + as_op(c.s, OP_CLI); - as_modri(c.as, OP_ADDI, R_RSP, 3 * 8); + as_modri(c.s, OP_ADDI, R_RSP, 3 * 8); - as_modrm(c.as, OP_LOAD, R_RAX, R_RSP, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RSP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RBX, R_RSP, 0, 0, 24); - as_modrm(c.as, OP_LOAD, R_RBP, R_RSP, 0, 0, 40); - as_modrm(c.as, OP_LOAD, R_RSI, R_RSP, 0, 0, 48); - as_modrm(c.as, OP_LOAD, R_RDI, R_RSP, 0, 0, 56); - as_modrm(c.as, OP_LOAD, R_R8, R_RSP, 0, 0, 64); - as_modrm(c.as, OP_LOAD, R_R9, R_RSP, 0, 0, 72); - as_modrm(c.as, OP_LOAD, R_R10, R_RSP, 0, 0, 80); - as_modrm(c.as, OP_LOAD, R_R12, R_RSP, 0, 0, 96); - as_modrm(c.as, OP_LOAD, R_R13, R_RSP, 0, 0, 104); - as_modrm(c.as, OP_LOAD, R_R14, R_RSP, 0, 0, 112); - as_modrm(c.as, OP_LOAD, R_R15, R_RSP, 0, 0, 120); + as_modrm(c.s, OP_LOAD, R_RAX, R_RSP, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RSP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RBX, R_RSP, 0, 0, 24); + as_modrm(c.s, OP_LOAD, R_RBP, R_RSP, 0, 0, 40); + as_modrm(c.s, OP_LOAD, R_RSI, R_RSP, 0, 0, 48); + as_modrm(c.s, OP_LOAD, R_RDI, R_RSP, 0, 0, 56); + as_modrm(c.s, OP_LOAD, R_R8, R_RSP, 0, 0, 64); + as_modrm(c.s, OP_LOAD, R_R9, R_RSP, 0, 0, 72); + as_modrm(c.s, OP_LOAD, R_R10, R_RSP, 0, 0, 80); + as_modrm(c.s, OP_LOAD, R_R12, R_RSP, 0, 0, 96); + as_modrm(c.s, OP_LOAD, R_R13, R_RSP, 0, 0, 104); + as_modrm(c.s, OP_LOAD, R_R14, R_RSP, 0, 0, 112); + as_modrm(c.s, OP_LOAD, R_R15, R_RSP, 0, 0, 120); - as_modrm(c.as, OP_LOAD, R_RCX, R_RSP, 0, 0, 128); - as_modrm(c.as, OP_LOAD, R_R11, R_RSP, 0, 0, 136); + as_modrm(c.s, OP_LOAD, R_RCX, R_RSP, 0, 0, 128); + as_modrm(c.s, OP_LOAD, R_R11, R_RSP, 0, 0, 136); - as_modrm(c.as, OP_LOAD, R_RSP, R_RSP, 0, 0, 32); + as_modrm(c.s, OP_LOAD, R_RSP, R_RSP, 0, 0, 32); - as_rex(c.as, OP_SYSRET, 0, 0, 0); - as_op(c.as, OP_SYSRET); + as_rex(c.s, OP_SYSRET, 0, 0, 0); + as_op(c.s, OP_SYSRET); } emit_isr(c: *compiler) { @@ -1848,128 +1848,128 @@ emit_isr(c: *compiler) { var out: *label; var i: int; - out = mklabel(c.as); + out = mklabel(c.s); i = 0; loop { if i == 256 { break; } - reserve(c.as, 16); + reserve(c.s, 16); if i == 8 || i == 10 || i == 11 || i == 12 || i == 13 || i == 14 || i == 17 || i == 21 || i == 29 || i == 30 { - as_emit(c.as, 0x90); - as_emit(c.as, 0x90); + as_emit(c.s, 0x90); + as_emit(c.s, 0x90); } else { - as_emit(c.as, 0x6a); - as_emit(c.as, 0x00); - } - as_emit(c.as, 0x68); - as_emit(c.as, i); - as_emit(c.as, 0x00); - as_emit(c.as, 0x00); - as_emit(c.as, 0x00); - as_emit(c.as, 0xe9); - as_emit(c.as, 0x00); - as_emit(c.as, 0x00); - as_emit(c.as, 0x00); - as_emit(c.as, 0x00); - addfixup(c.as, out); - as_emit(c.as, 0x90); - as_emit(c.as, 0x90); - as_emit(c.as, 0x90); - as_emit(c.as, 0x90); + as_emit(c.s, 0x6a); + as_emit(c.s, 0x00); + } + as_emit(c.s, 0x68); + as_emit(c.s, i); + as_emit(c.s, 0x00); + as_emit(c.s, 0x00); + as_emit(c.s, 0x00); + as_emit(c.s, 0xe9); + as_emit(c.s, 0x00); + as_emit(c.s, 0x00); + as_emit(c.s, 0x00); + as_emit(c.s, 0x00); + addfixup(c.s, out); + as_emit(c.s, 0x90); + as_emit(c.s, 0x90); + as_emit(c.s, 0x90); + as_emit(c.s, 0x90); i = i + 1; } - fixup_label(c.as, out); + fixup_label(c.s, out); // save regs - as_modri(c.as, OP_SUBI, R_RSP, 176); - as_modrm(c.as, OP_STORE, R_RBP, R_RSP, 0, 0, 40); - as_modrr(c.as, OP_MOVE, R_RBP, R_RSP); - as_opr(c.as, OP_PUSHR, R_RBP); - - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 0); - as_modrm(c.as, OP_STORE, R_RCX, R_RBP, 0, 0, 8); - as_modrm(c.as, OP_STORE, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RBX, R_RBP, 0, 0, 24); - as_modrm(c.as, OP_STORE, R_RSI, R_RBP, 0, 0, 48); - as_modrm(c.as, OP_STORE, R_RDI, R_RBP, 0, 0, 56); - as_modrm(c.as, OP_STORE, R_R8, R_RBP, 0, 0, 64); - as_modrm(c.as, OP_STORE, R_R9, R_RBP, 0, 0, 72); - as_modrm(c.as, OP_STORE, R_R10, R_RBP, 0, 0, 80); - as_modrm(c.as, OP_STORE, R_R11, R_RBP, 0, 0, 88); - as_modrm(c.as, OP_STORE, R_R12, R_RBP, 0, 0, 96); - as_modrm(c.as, OP_STORE, R_R13, R_RBP, 0, 0, 104); - as_modrm(c.as, OP_STORE, R_R14, R_RBP, 0, 0, 112); - as_modrm(c.as, OP_STORE, R_R15, R_RBP, 0, 0, 120); + as_modri(c.s, OP_SUBI, R_RSP, 176); + as_modrm(c.s, OP_STORE, R_RBP, R_RSP, 0, 0, 40); + as_modrr(c.s, OP_MOVE, R_RBP, R_RSP); + as_opr(c.s, OP_PUSHR, R_RBP); + + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 0); + as_modrm(c.s, OP_STORE, R_RCX, R_RBP, 0, 0, 8); + as_modrm(c.s, OP_STORE, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RBX, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_STORE, R_RSI, R_RBP, 0, 0, 48); + as_modrm(c.s, OP_STORE, R_RDI, R_RBP, 0, 0, 56); + as_modrm(c.s, OP_STORE, R_R8, R_RBP, 0, 0, 64); + as_modrm(c.s, OP_STORE, R_R9, R_RBP, 0, 0, 72); + as_modrm(c.s, OP_STORE, R_R10, R_RBP, 0, 0, 80); + as_modrm(c.s, OP_STORE, R_R11, R_RBP, 0, 0, 88); + as_modrm(c.s, OP_STORE, R_R12, R_RBP, 0, 0, 96); + as_modrm(c.s, OP_STORE, R_R13, R_RBP, 0, 0, 104); + as_modrm(c.s, OP_STORE, R_R14, R_RBP, 0, 0, 112); + as_modrm(c.s, OP_STORE, R_R15, R_RBP, 0, 0, 120); // trap - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 0); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 160); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 0); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 160); // err - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 8); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 168); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 8); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 168); // rip - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 16); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 128); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 16); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 128); // cs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 24); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 144); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 24); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 144); // flags - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 32); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 136); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 32); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 136); // rsp - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 40); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 32); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 40); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 32); // ss - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 48); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 152); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 176 + 48); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 152); d = find(c, "_isr", 0:*byte, 1); if (d.func_defined && d.func_label.fixed) { - as_jmp(c.as, OP_CALL, d.func_label); + as_jmp(c.s, OP_CALL, d.func_label); } // rip - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 128); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 128); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 16); // cs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 144); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 24); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 144); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 24); // flags - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 136); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 32); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 136); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 32); // rsp - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 32); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 40); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 32); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 40); // ss - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 152); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 48); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 152); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 176 + 48); // restore regs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 8); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RBX, R_RBP, 0, 0, 24); - as_modrm(c.as, OP_LOAD, R_RSI, R_RBP, 0, 0, 48); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 56); - as_modrm(c.as, OP_LOAD, R_R8, R_RBP, 0, 0, 64); - as_modrm(c.as, OP_LOAD, R_R9, R_RBP, 0, 0, 72); - as_modrm(c.as, OP_LOAD, R_R10, R_RBP, 0, 0, 80); - as_modrm(c.as, OP_LOAD, R_R11, R_RBP, 0, 0, 88); - as_modrm(c.as, OP_LOAD, R_R12, R_RBP, 0, 0, 96); - as_modrm(c.as, OP_LOAD, R_R13, R_RBP, 0, 0, 104); - as_modrm(c.as, OP_LOAD, R_R14, R_RBP, 0, 0, 112); - as_modrm(c.as, OP_LOAD, R_R15, R_RBP, 0, 0, 120); - - as_modrm(c.as, OP_LOAD, R_RBP, R_RBP, 0, 0, 40); - - as_modri(c.as, OP_ADDI, R_RSP, 176 + 3 * 8); - - as_op(c.as, OP_IRETQ); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 8); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RBX, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_LOAD, R_RSI, R_RBP, 0, 0, 48); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 56); + as_modrm(c.s, OP_LOAD, R_R8, R_RBP, 0, 0, 64); + as_modrm(c.s, OP_LOAD, R_R9, R_RBP, 0, 0, 72); + as_modrm(c.s, OP_LOAD, R_R10, R_RBP, 0, 0, 80); + as_modrm(c.s, OP_LOAD, R_R11, R_RBP, 0, 0, 88); + as_modrm(c.s, OP_LOAD, R_R12, R_RBP, 0, 0, 96); + as_modrm(c.s, OP_LOAD, R_R13, R_RBP, 0, 0, 104); + as_modrm(c.s, OP_LOAD, R_R14, R_RBP, 0, 0, 112); + as_modrm(c.s, OP_LOAD, R_R15, R_RBP, 0, 0, 120); + + as_modrm(c.s, OP_LOAD, R_RBP, R_RBP, 0, 0, 40); + + as_modri(c.s, OP_ADDI, R_RSP, 176 + 3 * 8); + + as_op(c.s, OP_IRETQ); } emit_builtin(c: *compiler) { @@ -1977,596 +1977,596 @@ emit_builtin(c: *compiler) { d = find(c, "syscall", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - emit_syscall(c.as); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + emit_syscall(c.s); + emit_ret(c.s); } d = find(c, "_restorer", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_restorer(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_restorer(c.s); } d = find(c, "_include", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_UD2); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_UD2); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "ud2", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_UD2); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_UD2); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "cpuid", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 24); - as_modrm(c.as, OP_LOAD, R_RCX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 32); - as_modrm(c.as, OP_LOAD, R_RDX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 40); - as_modrm(c.as, OP_LOAD, R_RBX, R_RDI, 0, 0, 0); - as_op(c.as, OP_CPUID); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RAX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 24); - as_modrm(c.as, OP_STORE, R_RCX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 32); - as_modrm(c.as, OP_STORE, R_RDX, R_RDI, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 40); - as_modrm(c.as, OP_STORE, R_RBX, R_RDI, 0, 0, 0); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_LOAD, R_RCX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 32); + as_modrm(c.s, OP_LOAD, R_RDX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 40); + as_modrm(c.s, OP_LOAD, R_RBX, R_RDI, 0, 0, 0); + as_op(c.s, OP_CPUID); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RAX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_STORE, R_RCX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 32); + as_modrm(c.s, OP_STORE, R_RDX, R_RDI, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 40); + as_modrm(c.s, OP_STORE, R_RBX, R_RDI, 0, 0, 0); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "inb", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_op(c.as, OP_IN); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_op(c.s, OP_IN); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "outb", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_op(c.as, OP_OUT); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_op(c.s, OP_OUT); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "inw", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_emit(c.as, OP_OS); - as_op(c.as, OP_IND); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_emit(c.s, OP_OS); + as_op(c.s, OP_IND); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "outw", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_emit(c.as, OP_OS); - as_op(c.as, OP_OUTD); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_emit(c.s, OP_OS); + as_op(c.s, OP_OUTD); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "ind", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_op(c.as, OP_IND); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_op(c.s, OP_IND); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "outd", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_op(c.as, OP_OUTD); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_op(c.s, OP_OUTD); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdmsr", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_op(c.as, OP_RDMSR); - as_modri(c.as, OP_MOVI, R_RCX, 32); - as_modr(c.as, OP_SHLM, R_RDX); - as_modrr(c.as, OP_ORRM, R_RAX, R_RDX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_op(c.s, OP_RDMSR); + as_modri(c.s, OP_MOVI, R_RCX, 32); + as_modr(c.s, OP_SHLM, R_RDX); + as_modrr(c.s, OP_ORRM, R_RAX, R_RDX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "wrmsr", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_modrr(c.as, OP_MOVE, R_RDX, R_RAX); - as_modri(c.as, OP_MOVI, R_RCX, 32); - as_modr(c.as, OP_SHRM, R_RDX); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_op(c.as, OP_WRMSR); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_modrr(c.s, OP_MOVE, R_RDX, R_RAX); + as_modri(c.s, OP_MOVI, R_RCX, 32); + as_modr(c.s, OP_SHRM, R_RDX); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_op(c.s, OP_WRMSR); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdcr0", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrr(c.as, OP_RDCRR, R_CR0, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrr(c.s, OP_RDCRR, R_CR0, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "wrcr0", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_modrr(c.as, OP_WRCRR, R_CR0, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_modrr(c.s, OP_WRCRR, R_CR0, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdcr2", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrr(c.as, OP_RDCRR, R_CR2, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrr(c.s, OP_RDCRR, R_CR2, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "wrcr2", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_modrr(c.as, OP_WRCRR, R_CR2, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_modrr(c.s, OP_WRCRR, R_CR2, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdcr3", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrr(c.as, OP_RDCRR, R_CR3, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrr(c.s, OP_RDCRR, R_CR3, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "wrcr3", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_modrr(c.as, OP_WRCRR, R_CR3, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_modrr(c.s, OP_WRCRR, R_CR3, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdcr4", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrr(c.as, OP_RDCRR, R_CR4, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrr(c.s, OP_RDCRR, R_CR4, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "wrcr4", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); - as_modrr(c.as, OP_WRCRR, R_CR4, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 16); + as_modrr(c.s, OP_WRCRR, R_CR4, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "lgdt", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modri(c.as, OP_SUBI, R_RSP, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_modri(c.as, OP_SUBI, R_RAX, 1); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 2); - as_modm(c.as, OP_LGDTM, R_RSP, 0, 0, 0); - as_modri(c.as, OP_ADDI, R_RSP, 16); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modri(c.s, OP_SUBI, R_RSP, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_modri(c.s, OP_SUBI, R_RAX, 1); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 2); + as_modm(c.s, OP_LGDTM, R_RSP, 0, 0, 0); + as_modri(c.s, OP_ADDI, R_RSP, 16); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "lidt", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modri(c.as, OP_SUBI, R_RSP, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_modri(c.as, OP_SUBI, R_RAX, 1); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RAX, R_RSP, 0, 0, 2); - as_modm(c.as, OP_LIDTM, R_RSP, 0, 0, 0); - as_modri(c.as, OP_ADDI, R_RSP, 16); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modri(c.s, OP_SUBI, R_RSP, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_modri(c.s, OP_SUBI, R_RAX, 1); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RAX, R_RSP, 0, 0, 2); + as_modm(c.s, OP_LIDTM, R_RSP, 0, 0, 0); + as_modri(c.s, OP_ADDI, R_RSP, 16); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "lldt", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modr(c.as, OP_LLDTM, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modr(c.s, OP_LLDTM, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "ltr", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modr(c.as, OP_LTRM, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modr(c.s, OP_LTRM, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "lseg", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); // es ds fs gs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - as_modrr(c.as, OP_WRSR, R_ES, R_RAX); - as_modrr(c.as, OP_WRSR, R_DS, R_RAX); - as_modrr(c.as, OP_WRSR, R_FS, R_RAX); - as_modrr(c.as, OP_WRSR, R_GS, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + as_modrr(c.s, OP_WRSR, R_ES, R_RAX); + as_modrr(c.s, OP_WRSR, R_DS, R_RAX); + as_modrr(c.s, OP_WRSR, R_FS, R_RAX); + as_modrr(c.s, OP_WRSR, R_GS, R_RAX); // ss - as_opr(c.as, OP_PUSHR, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); // rsp - as_opr(c.as, OP_PUSHR, R_RBP); + as_opr(c.s, OP_PUSHR, R_RBP); // flags - as_op(c.as, OP_PUSHF); + as_op(c.s, OP_PUSHF); // cs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_opr(c.s, OP_PUSHR, R_RAX); // rip - as_op(c.as, OP_CALL); - as_emit(c.as, 5); - as_emit(c.as, 0); - as_emit(c.as, 0); - as_emit(c.as, 0); - as_op(c.as, OP_JMP); - as_emit(c.as, 2); - as_emit(c.as, 0); - as_emit(c.as, 0); - as_emit(c.as, 0); - as_op(c.as, OP_IRETQ); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + as_op(c.s, OP_CALL); + as_emit(c.s, 5); + as_emit(c.s, 0); + as_emit(c.s, 0); + as_emit(c.s, 0); + as_op(c.s, OP_JMP); + as_emit(c.s, 2); + as_emit(c.s, 0); + as_emit(c.s, 0); + as_emit(c.s, 0); + as_op(c.s, OP_IRETQ); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "hlt", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_HLT); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_HLT); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "cli", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_CLI); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_CLI); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "sti", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_STI); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_STI); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "rdflags", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_PUSHF); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_PUSHF); + emit_ret(c.s); } d = find(c, "wrflags", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_op(c.as, OP_PUSHF); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_opr(c.as, OP_PUSHR, R_RAX); - as_op(c.as, OP_POPF); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_op(c.s, OP_PUSHF); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_opr(c.s, OP_PUSHR, R_RAX); + as_op(c.s, OP_POPF); + emit_ret(c.s); } d = find(c, "wbinvld", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modm(c.as, OP_WBINVD, R_RAX, 0, 0, 0); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modm(c.s, OP_WBINVD, R_RAX, 0, 0, 0); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "invlpg", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); - as_modm(c.as, OP_INVLPGM, R_RAX, 0, 0, 0); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 16); + as_modm(c.s, OP_INVLPGM, R_RAX, 0, 0, 0); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_ssr0", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); emit_ssr(c); } d = find(c, "_isr0", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); emit_isr(c); } d = find(c, "_rgs", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); - as_emit(c.as, OP_GS); - as_modrm(c.as, OP_LOAD, R_RAX, R_RSI, 0, 0, 0); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); + as_emit(c.s, OP_GS); + as_modrm(c.s, OP_LOAD, R_RAX, R_RSI, 0, 0, 0); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_r32", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); - c.as.bits32 = 1; - as_modrm(c.as, OP_LOAD, R_RAX, R_RSI, 0, 0, 0); - c.as.bits32 = 0; - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); + c.s.bits32 = 1; + as_modrm(c.s, OP_LOAD, R_RAX, R_RSI, 0, 0, 0); + c.s.bits32 = 0; + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_w32", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - c.as.bits32 = 1; - as_modrm(c.as, OP_STORE, R_RAX, R_RDI, 0, 0, 0); - c.as.bits32 = 0; - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + c.s.bits32 = 1; + as_modrm(c.s, OP_STORE, R_RAX, R_RDI, 0, 0, 0); + c.s.bits32 = 0; + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_r16", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); - as_modrr(c.as, OP_XORRM, R_RAX, R_RAX); - c.as.bits32 = 1; - as_modrm(c.as, OP_LOAD16, R_RAX, R_RDI, 0, 0, 0); - c.as.bits32 = 0; - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RSI, R_RBP, 0, 0, 16); + as_modrr(c.s, OP_XORRM, R_RAX, R_RAX); + c.s.bits32 = 1; + as_modrm(c.s, OP_LOAD16, R_RAX, R_RDI, 0, 0, 0); + c.s.bits32 = 0; + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_w16", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); - c.as.bits32 = 1; - as_modrm(c.as, OP_STORE16, R_RAX, R_RDI, 0, 0, 0); - c.as.bits32 = 0; - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 24); + c.s.bits32 = 1; + as_modrm(c.s, OP_STORE16, R_RAX, R_RDI, 0, 0, 0); + c.s.bits32 = 0; + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "_rdrand", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); - emit_preamble(c.as, 0, 0); - as_modr(c.as, OP_RDRAND, R_RAX); - as_opr(c.as, OP_PUSHR, R_RAX); - emit_ret(c.as); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); + emit_preamble(c.s, 0, 0); + as_modr(c.s, OP_RDRAND, R_RAX); + as_opr(c.s, OP_PUSHR, R_RAX); + emit_ret(c.s); } d = find(c, "taskswitch", 0:*byte, 1); if (d.func_defined && !d.func_label.fixed) { - fixup_label(c.as, d.func_label); - add_symbol(c.as, d.name, d.func_label); + fixup_label(c.s, d.func_label); + add_symbol(c.s, d.name, d.func_label); - as_opr(c.as, OP_PUSHR, R_RBP); - as_op(c.as, OP_PUSHF); + as_opr(c.s, OP_PUSHR, R_RBP); + as_op(c.s, OP_PUSHF); - as_modrm(c.as, OP_LOAD, R_RBP, R_RSP, 0, 0, 24); + as_modrm(c.s, OP_LOAD, R_RBP, R_RSP, 0, 0, 24); // save - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 0); - as_modrm(c.as, OP_STORE, R_RCX, R_RBP, 0, 0, 8); - as_modrm(c.as, OP_STORE, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RBX, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 0); + as_modrm(c.s, OP_STORE, R_RCX, R_RBP, 0, 0, 8); + as_modrm(c.s, OP_STORE, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RBX, R_RBP, 0, 0, 24); // rsp - as_modrm(c.as, OP_LEA, R_RAX, R_RSP, 0, 0, 24); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 32); + as_modrm(c.s, OP_LEA, R_RAX, R_RSP, 0, 0, 24); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 32); // rbp - as_modrm(c.as, OP_LOAD, R_RAX, R_RSP, 0, 0, 8); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 40); - - as_modrm(c.as, OP_STORE, R_RSI, R_RBP, 0, 0, 48); - as_modrm(c.as, OP_STORE, R_RDI, R_RBP, 0, 0, 56); - as_modrm(c.as, OP_STORE, R_R8, R_RBP, 0, 0, 64); - as_modrm(c.as, OP_STORE, R_R9, R_RBP, 0, 0, 72); - as_modrm(c.as, OP_STORE, R_R10, R_RBP, 0, 0, 80); - as_modrm(c.as, OP_STORE, R_R11, R_RBP, 0, 0, 88); - as_modrm(c.as, OP_STORE, R_R12, R_RBP, 0, 0, 96); - as_modrm(c.as, OP_STORE, R_R13, R_RBP, 0, 0, 104); - as_modrm(c.as, OP_STORE, R_R14, R_RBP, 0, 0, 112); - as_modrm(c.as, OP_STORE, R_R15, R_RBP, 0, 0, 120); + as_modrm(c.s, OP_LOAD, R_RAX, R_RSP, 0, 0, 8); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 40); + + as_modrm(c.s, OP_STORE, R_RSI, R_RBP, 0, 0, 48); + as_modrm(c.s, OP_STORE, R_RDI, R_RBP, 0, 0, 56); + as_modrm(c.s, OP_STORE, R_R8, R_RBP, 0, 0, 64); + as_modrm(c.s, OP_STORE, R_R9, R_RBP, 0, 0, 72); + as_modrm(c.s, OP_STORE, R_R10, R_RBP, 0, 0, 80); + as_modrm(c.s, OP_STORE, R_R11, R_RBP, 0, 0, 88); + as_modrm(c.s, OP_STORE, R_R12, R_RBP, 0, 0, 96); + as_modrm(c.s, OP_STORE, R_R13, R_RBP, 0, 0, 104); + as_modrm(c.s, OP_STORE, R_R14, R_RBP, 0, 0, 112); + as_modrm(c.s, OP_STORE, R_R15, R_RBP, 0, 0, 120); // rip - as_modrm(c.as, OP_LOAD, R_RAX, R_RSP, 0, 0, 16); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 128); + as_modrm(c.s, OP_LOAD, R_RAX, R_RSP, 0, 0, 16); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 128); // flags - as_modrm(c.as, OP_LOAD, R_RAX, R_RSP, 0, 0, 0); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 136); + as_modrm(c.s, OP_LOAD, R_RAX, R_RSP, 0, 0, 0); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 136); // cs - as_modrr(c.as, OP_RDSR, R_CS, R_RAX); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 144); + as_modrr(c.s, OP_RDSR, R_CS, R_RAX); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 144); // ss - as_modrr(c.as, OP_RDSR, R_SS, R_RAX); - as_modrm(c.as, OP_STORE, R_RAX, R_RBP, 0, 0, 152); + as_modrr(c.s, OP_RDSR, R_SS, R_RAX); + as_modrm(c.s, OP_STORE, R_RAX, R_RBP, 0, 0, 152); - as_modrm(c.as, OP_LOAD, R_RBP, R_RSP, 0, 0, 32); + as_modrm(c.s, OP_LOAD, R_RBP, R_RSP, 0, 0, 32); // restore - as_modrm(c.as, OP_LOAD, R_RCX, R_RBP, 0, 0, 8); - as_modrm(c.as, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); - as_modrm(c.as, OP_LOAD, R_RBX, R_RBP, 0, 0, 24); - as_modrm(c.as, OP_LOAD, R_RSI, R_RBP, 0, 0, 48); - as_modrm(c.as, OP_LOAD, R_RDI, R_RBP, 0, 0, 56); - as_modrm(c.as, OP_LOAD, R_R8, R_RBP, 0, 0, 64); - as_modrm(c.as, OP_LOAD, R_R9, R_RBP, 0, 0, 72); - as_modrm(c.as, OP_LOAD, R_R10, R_RBP, 0, 0, 80); - as_modrm(c.as, OP_LOAD, R_R11, R_RBP, 0, 0, 88); - as_modrm(c.as, OP_LOAD, R_R12, R_RBP, 0, 0, 96); - as_modrm(c.as, OP_LOAD, R_R13, R_RBP, 0, 0, 104); - as_modrm(c.as, OP_LOAD, R_R14, R_RBP, 0, 0, 112); - as_modrm(c.as, OP_LOAD, R_R15, R_RBP, 0, 0, 120); + as_modrm(c.s, OP_LOAD, R_RCX, R_RBP, 0, 0, 8); + as_modrm(c.s, OP_LOAD, R_RDX, R_RBP, 0, 0, 16); + as_modrm(c.s, OP_LOAD, R_RBX, R_RBP, 0, 0, 24); + as_modrm(c.s, OP_LOAD, R_RSI, R_RBP, 0, 0, 48); + as_modrm(c.s, OP_LOAD, R_RDI, R_RBP, 0, 0, 56); + as_modrm(c.s, OP_LOAD, R_R8, R_RBP, 0, 0, 64); + as_modrm(c.s, OP_LOAD, R_R9, R_RBP, 0, 0, 72); + as_modrm(c.s, OP_LOAD, R_R10, R_RBP, 0, 0, 80); + as_modrm(c.s, OP_LOAD, R_R11, R_RBP, 0, 0, 88); + as_modrm(c.s, OP_LOAD, R_R12, R_RBP, 0, 0, 96); + as_modrm(c.s, OP_LOAD, R_R13, R_RBP, 0, 0, 104); + as_modrm(c.s, OP_LOAD, R_R14, R_RBP, 0, 0, 112); + as_modrm(c.s, OP_LOAD, R_R15, R_RBP, 0, 0, 120); // ss - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 152); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 152); + as_opr(c.s, OP_PUSHR, R_RAX); // rsp - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 32); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 32); + as_opr(c.s, OP_PUSHR, R_RAX); // flags - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 136); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 136); + as_opr(c.s, OP_PUSHR, R_RAX); // cs - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 144); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 144); + as_opr(c.s, OP_PUSHR, R_RAX); // rip - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 128); - as_opr(c.as, OP_PUSHR, R_RAX); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 128); + as_opr(c.s, OP_PUSHR, R_RAX); // finish up restore - as_modrm(c.as, OP_LOAD, R_RAX, R_RBP, 0, 0, 0); - as_modrm(c.as, OP_LOAD, R_RBP, R_RBP, 0, 0, 40); + as_modrm(c.s, OP_LOAD, R_RAX, R_RBP, 0, 0, 0); + as_modrm(c.s, OP_LOAD, R_RBP, R_RBP, 0, 0, 40); // iretq - as_op(c.as, OP_IRETQ); + as_op(c.s, OP_IRETQ); } } @@ -2693,7 +2693,7 @@ main(argc: int, argv: **byte, envp: **byte) { emit_builtin(c); - open_output(c.as, filename); + open_output(c.s, filename); - writeout(c.as, c.start, c.kstart); + writeout(c.s, c.start, c.kstart); } diff --git a/cc3.peg b/cc3.peg @@ -89,7 +89,7 @@ unary_expr <- ((ref_op / deref_op / pos_op / neg_op / not_op / bnot_op) sp)* pos index_expr <- '[' sp expr ']' sp call_expr <- '(' sp ( expr (',' sp expr)* )? (',' sp)? ')' sp member_expr <- '.' sp ident sp -cast_expr <- ':' sp type +cast_expr <- (':' / 'as') sp type post_expr <- primary (index_expr / call_expr / member_expr / cast_expr)* primary <- ident sp / hex sp / dec sp / str sp / char sp @@ -103,7 +103,7 @@ str <- ["] ([\\] . / !["] .)* ["] char <- ['] ([\\] . / !['] .)+ ['] reserved <- return / break / sizeof / if / else / loop / continue / goto - / var / enum / struct / union / byte / int / void / func + / var / enum / struct / union / byte / int / void / func / as return <- 'return' ![a-zA-Z0-9_] break <- 'break' ![a-zA-Z0-9_] @@ -121,6 +121,8 @@ byte <- 'byte' ![a-zA-Z0-9_] int <- 'int' ![a-zA-Z0-9_] void <- 'void' ![a-zA-Z0-9_] func <- 'func' ![a-zA-Z0-9_] +as <- 'as' ![a-zA-Z0-9_] +nil <- 'nil' ![a-zA-Z0-9_] ident <- !reserved [a-zA-Z_][a-zA-Z0-9_]* diff --git a/decl.om b/decl.om @@ -95,7 +95,7 @@ find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl { d.func_defined = 0; d.func_type = 0:*type; - d.func_label = mklabel(c.as); + d.func_label = mklabel(c.s); d.func_def = 0:*node; d.func_used = 0; @@ -119,7 +119,7 @@ find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl { d.var_def = 0:*node; d.goto_defined = 0; - d.goto_label = mklabel(c.as); + d.goto_label = mklabel(c.s); *link = d; diff --git a/vimfiles/syntax/omiltem.vim b/vimfiles/syntax/omiltem.vim @@ -21,6 +21,8 @@ syn keyword oByte byte syn keyword oInt int syn keyword oVoid void syn keyword oFunc func +syn keyword oAs as +syn keyword oNil nil syn keyword oTodo contained TODO FIXME XXX BUG syn cluster oCommentGroup contains=oTodo @@ -58,6 +60,9 @@ hi def link oContinue Statement hi def link oGoto Statement hi def link oVar Keyword +hi def link oAs Keyword +hi def link oNil Keyword +hi def link oFunc Keyword hi def link oEnum Structure hi def link oStruct Structure @@ -66,6 +71,5 @@ hi def link oUnion Structure hi def link oByte Type hi def link oInt Type hi def link oVoid Type -hi def link oFunc Type let b:current_syntax = "omiltem"