Skip to main content

luaur_code_gen/functions/
assemble_helpers_code_gen_a_64.rs

1use crate::functions::emit_clear_native_flag_code_gen_a_64::emit_clear_native_flag_assembly_builder_a_64;
2use crate::functions::emit_continue_call::emitContinueCall;
3use crate::functions::emit_exit_code_gen_a_64::emit_exit_assembly_builder_a_64_bool;
4use crate::functions::emit_interrupt_code_gen_a_64::emit_interrupt;
5use crate::functions::emit_return_code_gen_a_64::emit_return_assembly_builder_a_64_module_helpers;
6use crate::functions::emit_update_pc_for_exit_code_gen_a_64::emit_update_pc_for_exit_assembly_builder_a_64;
7use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
8use crate::records::module_helpers::ModuleHelpers;
9
10pub fn assemble_helpers(build: &mut AssemblyBuilderA64, helpers: &mut ModuleHelpers) {
11    if build.log_text {
12        build.log_append(format_args!("; updatePcAndContinueInVm\n"));
13    }
14    build.set_label_label(&mut helpers.updatePcAndContinueInVm);
15    emit_update_pc_for_exit_assembly_builder_a_64(build);
16
17    if build.log_text {
18        build.log_append(format_args!("; exitContinueVmClearNativeFlag\n"));
19    }
20    build.set_label_label(&mut helpers.exitContinueVmClearNativeFlag);
21    emit_clear_native_flag_assembly_builder_a_64(build);
22
23    if build.log_text {
24        build.log_append(format_args!("; exitContinueVm\n"));
25    }
26    build.set_label_label(&mut helpers.exitContinueVm);
27    emit_exit_assembly_builder_a_64_bool(build, true);
28
29    if build.log_text {
30        build.log_append(format_args!("; exitNoContinueVm\n"));
31    }
32    build.set_label_label(&mut helpers.exitNoContinueVm);
33    emit_exit_assembly_builder_a_64_bool(build, false);
34
35    if build.log_text {
36        build.log_append(format_args!("; interrupt\n"));
37    }
38    build.set_label_label(&mut helpers.interrupt);
39    emit_interrupt(build);
40
41    if build.log_text {
42        build.log_append(format_args!("; return\n"));
43    }
44    build.set_label_label(&mut helpers.return_);
45    emit_return_assembly_builder_a_64_module_helpers(build, helpers);
46
47    if build.log_text {
48        build.log_append(format_args!("; continueCall\n"));
49    }
50    build.set_label_label(&mut helpers.continueCall);
51    emitContinueCall(build, helpers);
52}