Skip to main content

luaur_code_gen/functions/
assemble_helpers_code_gen_x_64.rs

1use crate::functions::emit_clear_native_flag_emit_common_x_64::emit_clear_native_flag;
2use crate::functions::emit_exit_emit_common_x_64::emit_exit;
3use crate::functions::emit_interrupt_emit_common_x_64::emit_interrupt;
4use crate::functions::emit_return_emit_common_x_64::emit_return;
5use crate::functions::emit_update_pc_for_exit_emit_common_x_64::emit_update_pc_for_exit;
6use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
7use crate::records::module_helpers::ModuleHelpers;
8
9pub fn assemble_helpers(build: &mut AssemblyBuilderX64, helpers: &mut ModuleHelpers) {
10    if build.log_text {
11        build.log_append(format_args!("; updatePcAndContinueInVm\n"));
12    }
13    build.set_label_label(&mut helpers.updatePcAndContinueInVm);
14    emit_update_pc_for_exit(build);
15
16    if build.log_text {
17        build.log_append(format_args!("; exitContinueVmClearNativeFlag\n"));
18    }
19    build.set_label_label(&mut helpers.exitContinueVmClearNativeFlag);
20    emit_clear_native_flag(build);
21
22    if build.log_text {
23        build.log_append(format_args!("; exitContinueVm\n"));
24    }
25    build.set_label_label(&mut helpers.exitContinueVm);
26    emit_exit(build, true);
27
28    if build.log_text {
29        build.log_append(format_args!("; exitNoContinueVm\n"));
30    }
31    build.set_label_label(&mut helpers.exitNoContinueVm);
32    emit_exit(build, false);
33
34    if build.log_text {
35        build.log_append(format_args!("; interrupt\n"));
36    }
37    build.set_label_label(&mut helpers.interrupt);
38    emit_interrupt(build);
39
40    if build.log_text {
41        build.log_append(format_args!("; return\n"));
42    }
43    build.set_label_label(&mut helpers.return_);
44    emit_return(build, helpers);
45}