1#ifndef MULTIARCH_CODEGEN_H
2#define MULTIARCH_CODEGEN_H
50 TargetPlatform platform;
51 CallingConvention calling_conv;
54 const char *arch_name;
55 const char *platform_name;
66 const char **param_regs;
67 const char **return_regs;
72 const char *syscall_reg;
73 const char *syscall_instruction;
76 const char *comment_prefix;
77 const char *global_directive;
78 const char *section_text;
79 const char *section_data;
92 int current_function_locals;
105 char current_function[64];
111TargetConfig *target_config_create(TargetArch arch, TargetPlatform platform);
113TargetArch detect_host_architecture(
void);
114TargetPlatform detect_host_platform(
void);
117MultiArchCodegen *multiarch_codegen_create(
const char *output_file, TargetArch arch, TargetPlatform platform);
127void multiarch_emit_directive(
MultiArchCodegen *codegen,
const char *directive,
const char *args);
130void multiarch_function_prologue(
MultiArchCodegen *codegen,
const char *func_name,
int param_count);
132void multiarch_function_call(
MultiArchCodegen *codegen,
const char *func_name,
int arg_count);
136void multiarch_load_immediate(
MultiArchCodegen *codegen,
const char *dest_reg,
long value);
137void multiarch_load_address(
MultiArchCodegen *codegen,
const char *dest_reg,
const char *symbol);
138void multiarch_load_memory(
MultiArchCodegen *codegen,
const char *dest_reg,
const char *src_addr,
int size);
139void multiarch_store_memory(
MultiArchCodegen *codegen,
const char *src_reg,
const char *dest_addr,
int size);
142void multiarch_add(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
143void multiarch_sub(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
144void multiarch_mul(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
145void multiarch_div(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
146void multiarch_mod(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
147void multiarch_neg(
MultiArchCodegen *codegen,
const char *dest,
const char *src);
150void multiarch_and(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
151void multiarch_or(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
152void multiarch_xor(
MultiArchCodegen *codegen,
const char *dest,
const char *src1,
const char *src2);
153void multiarch_not(
MultiArchCodegen *codegen,
const char *dest,
const char *src);
156void multiarch_compare(
MultiArchCodegen *codegen,
const char *reg1,
const char *reg2);
157void multiarch_test(
MultiArchCodegen *codegen,
const char *reg1,
const char *reg2);
162void multiarch_jump_if_not_zero(
MultiArchCodegen *codegen,
const char *label);
164void multiarch_jump_if_not_equal(
MultiArchCodegen *codegen,
const char *label);
166void multiarch_jump_if_greater(
MultiArchCodegen *codegen,
const char *label);
167void multiarch_jump_if_less_equal(
MultiArchCodegen *codegen,
const char *label);
168void multiarch_jump_if_greater_equal(
MultiArchCodegen *codegen,
const char *label);
171const char *multiarch_get_param_reg(
MultiArchCodegen *codegen,
int param_index);
184void multiarch_declare_local_var(
MultiArchCodegen *codegen,
const char *name,
int size);
185int multiarch_get_local_var_offset(
MultiArchCodegen *codegen,
const char *name);
186void multiarch_load_local_var(
MultiArchCodegen *codegen,
const char *dest_reg,
const char *var_name);
187void multiarch_store_local_var(
MultiArchCodegen *codegen,
const char *src_reg,
const char *var_name);
190void multiarch_syscall(
MultiArchCodegen *codegen,
int syscall_num,
int arg_count);