os

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

commit 201b91d44e0983c43f6b460e0b6da9f8d0f458b4
parent bb2521efa29d3f3746ac04f148516f4f145d3402
Author: erai <erai@omiltem.net>
Date:   Fri, 31 Jan 2025 02:58:12 +0000

copy bootstrap

Diffstat:
Mcc0.c | 699+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 665 insertions(+), 34 deletions(-)

diff --git a/cc0.c b/cc0.c @@ -668,6 +668,7 @@ void( my_as_emit)(struct my_assembler* my_a,unsigned long my_b); void( my_as_jmp)(struct my_assembler* my_a,unsigned long my_op,struct my_label* my_l); void( my_as_modm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d); void( my_as_modr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b); +void( my_as_modra)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_d); void( my_as_modri)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x); void( my_as_modrm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d); void( my_as_modrr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b); @@ -713,10 +714,10 @@ void( my_emit)(struct my_assembler* my_c,unsigned long my_x); void( my_emit_align)(struct my_assembler* my_c,unsigned long my_n,unsigned long my_b); void( my_emit_builtin)(struct my_compiler* my_c); void( my_emit_hook)(struct my_assembler* my_c); +void( my_emit_isr)(struct my_compiler* my_c); void( my_emit_kstart)(struct my_assembler* my_c); -void( my_emit_num)(struct my_assembler* my_c,unsigned long my_x); -void( my_emit_preamble)(struct my_assembler* my_c,unsigned long my_n,unsigned long my_pragma); unsigned long( my_emit_sections)(struct my_assembler* my_c); +void( my_emit_ssr)(struct my_compiler* my_c); unsigned long( my_emit_strtab_str)(struct my_assembler* my_c,unsigned char* my_s); void( my_enter)(struct my_peg* my_c,unsigned long my_tag); void( my_exit)(unsigned long my_n); @@ -1449,6 +1450,16 @@ void( my_as_modm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my void( my_as_modr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b){ (my_as_modrr)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b)); } +void( my_as_modra)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_d){ + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)(my_R_RSP))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_R_RSP))<<((unsigned long)(3UL)))))+((unsigned long)(my_R_RBP))))); + (my_as_emit)((my_a),(my_d)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(24UL))))); +} void( my_as_modri)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x){ if ((unsigned long)(((unsigned long)(((long)(my_x))<((long)((unsigned long)(-(unsigned long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL)))))))))||((unsigned long)(((long)(my_x))>=((long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL))))))))) { (my_die)(((unsigned char *)"immediate too large")); @@ -2718,11 +2729,475 @@ void( my_emit_builtin)(struct my_compiler* my_c){ (my_as_op)(((my_c)->my_s),(my_OP_SYSCALL)); (my_as_op)(((my_c)->my_s),(my_OP_RET)); } + (my_d)=((my_find)((my_c),((unsigned char *)"_restorer"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_modri)(((my_c)->my_s),(my_OP_MOVI),(my_R_RAX),(15UL)); + (my_as_op)(((my_c)->my_s),(my_OP_SYSCALL)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_include"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + } (my_d)=((my_find)((my_c),((unsigned char *)"ud2"),((void *)0),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { (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_op)(((my_c)->my_s),(my_OP_UD2)); } + (my_d)=((my_find)((my_c),((unsigned char *)"cpuid"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"inb"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"outb"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"inw"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"outw"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"ind"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"outd"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"rdmsr"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wrmsr"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"rdcr0"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wrcr0"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"rdcr2"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wrcr2"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"rdcr3"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wrcr3"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"rdcr4"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wrcr4"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"lgdt"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"lidt"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"lldt"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"ltr"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"lseg"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"hlt"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_op)(((my_c)->my_s),(my_OP_HLT)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"cli"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_op)(((my_c)->my_s),(my_OP_CLI)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"sti"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_op)(((my_c)->my_s),(my_OP_STI)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RAX)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"rdflags"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_as_op)(((my_c)->my_s),(my_OP_PUSHF)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"wrflags"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"wbinvld"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"invlpg"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_ssr0"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_emit_ssr)((my_c)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_isr0"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (my_emit_isr)((my_c)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"_rgs"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_r32"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_w32"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_r16"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_w16"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_d)=((my_find)((my_c),((unsigned char *)"_rdrand"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_modr)(((my_c)->my_s),(my_OP_RDRAND),(my_R_RAX)); + } + (my_d)=((my_find)((my_c),((unsigned char *)"taskswitch"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&((unsigned long)(!(((my_d)->my_func_label)->my_fixed))))) { + (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_op)(((my_c)->my_s),(my_OP_UD2)); + (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_hook)(struct my_assembler* my_c){ if ((unsigned long)(!((my_c)->my_lines_out))) { @@ -2743,6 +3218,106 @@ void( my_emit_hook)(struct my_assembler* my_c){ ((my_c)->my_prevlineno)=((my_c)->my_lineno); ((my_c)->my_prevfilename)=((my_c)->my_filename); } +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_s))); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + break; + } + (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_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_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"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { + (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_kstart)(struct my_assembler* my_c){ struct my_label* my_hang = 0; struct my_label* my_do_iret = 0; @@ -2846,39 +3421,9 @@ void( my_emit_kstart)(struct my_assembler* my_c){ (my_as_op)((my_c),(my_OP_RET)); (my_fixup_label)((my_c),(my_done)); (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBX)); (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RDI),(my_R_RBX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); } -void( my_emit_num)(struct my_assembler* my_c,unsigned long my_x){ - (my_as_opri64)((my_c),(my_OP_MOVABS),(my_R_RDX),(my_x)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); -} -void( my_emit_preamble)(struct my_assembler* my_c,unsigned long my_n,unsigned long my_pragma){ - unsigned long my_i = 0; - if ((unsigned long)(((long)(my_pragma))==((long)(1UL)))) { - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(8UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDX),(my_R_RSI),(my_R_RDI),(8UL),(8UL)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RSI)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDI)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); - } else if ((unsigned long)(((long)(my_pragma))>((long)(1UL)))) { - (my_emit_kstart)((my_c)); - } - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { - break; - } - (my_emit_num)((my_c),(0UL)); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(8UL)))); - } -} unsigned long( my_emit_sections)(struct my_assembler* my_c){ unsigned long my_at = 0; struct my_section* my_s = 0; @@ -3055,6 +3600,89 @@ unsigned long( my_emit_sections)(struct my_assembler* my_c){ } return my_at; } +void( my_emit_ssr)(struct my_compiler* my_c){ + struct my_decl* my_d = 0; + struct my_decl* my_v = 0; + (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_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_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_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_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"),((void *)0),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { + (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)); +} unsigned long( my_emit_strtab_str)(struct my_assembler* my_c,unsigned char* my_s){ unsigned long my_i = 0; (my_i)=(0UL); @@ -4943,9 +5571,12 @@ void( my_output_ir)(struct my_compiler* my_c,struct my_decl* my_d){ (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)); if ((unsigned long)(((long)((my_strcmp)(((my_d)->my_name),((unsigned char *)"_start"))))==((long)(0UL)))) { - (my_emit_preamble)(((my_c)->my_s),(0UL),(1UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LEA),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_s),(my_OP_LEA),(my_R_RDX),(my_R_RSI),(my_R_RDI),(8UL),(8UL)); + (my_as_opr)(((my_c)->my_s),(my_OP_PUSHR),(my_R_RBP)); } else if ((unsigned long)(((long)((my_strcmp)(((my_d)->my_name),((unsigned char *)"_kstart"))))==((long)(0UL)))) { - (my_emit_preamble)(((my_c)->my_s),(0UL),(2UL)); + (my_emit_kstart)(((my_c)->my_s)); } (my_as_opr)(((my_ic)->my_s),(my_OP_PUSHR),(my_R_RBP)); (my_as_modrr)(((my_ic)->my_s),(my_OP_MOVE),(my_R_RBP),(my_R_RSP));