commit 201b91d44e0983c43f6b460e0b6da9f8d0f458b4
parent bb2521efa29d3f3746ac04f148516f4f145d3402
Author: erai <erai@omiltem.net>
Date: Fri, 31 Jan 2025 02:58:12 +0000
copy bootstrap
Diffstat:
M | cc0.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));