7 void function_header(char *name, int vars) {
9 printf("\t.globl %s\n\t.type %s, @function\n%s:\n", name, name, name);
11 printf("\tpushq %%rbp\n\tmovq %%rsp, %%rbp\n\tsubq $%i, %%rsp\n", 8*vars);
15 char *get_next_reg(char *name, int skip_reg) {
16 char *reg_names[]={"rax", "r10", "r11", "r9", "r8", "rcx", "rdx", "rsi", "rdi"};
18 if(name==(char *)NULL) {
23 if(!strcmp(name,reg_names[a])) {
32 return reg_names[index];
35 char *get_param_reg(long number) {
36 char *reg_names[]={"rdi", "rsi", "rdx", "rcx", "r8", "r9"};
37 return reg_names[number-1];
47 void move(char *src, char *dst) {
49 printf("\tmovq %%%s, %%%s\n",src,dst);