• Home
  • Raw
  • Download

Lines Matching refs:atom

74 struct atom;
76 DECLARE_PTR_LIST(str_list, struct atom);
77 DECLARE_PTR_LIST(atom_list, struct atom);
162 struct atom { struct
468 static struct atom *new_atom(enum atom_type type) in new_atom()
470 struct atom *atom; in new_atom() local
472 atom = calloc(1, sizeof(*atom)); /* TODO: chunked alloc */ in new_atom()
473 if (!atom) in new_atom()
476 atom->type = type; in new_atom()
478 return atom; in new_atom()
484 struct atom *atom; in push_cstring() local
486 atom = new_atom(ATOM_CSTR); in push_cstring()
487 atom->string = str; in push_cstring()
488 atom->label = label; in push_cstring()
490 add_ptr_list(&f->str_list, atom); /* note: _not_ atom_list */ in push_cstring()
493 static inline void push_atom(struct function *f, struct atom *atom) in push_atom() argument
495 add_ptr_list(&f->atom_list, atom); in push_atom()
500 struct atom *atom = new_atom(ATOM_TEXT); in push_text_atom() local
502 atom->text = strdup(text); in push_text_atom()
503 atom->text_len = strlen(text); in push_text_atom()
505 push_atom(f, atom); in push_text_atom()
629 struct atom *atom = new_atom(ATOM_INSN); in insn() local
633 strcpy(atom->insn, insn); in insn()
635 strncpy(atom->comment, comment_in, in insn()
636 sizeof(atom->comment) - 1); in insn()
638 atom->op1 = op1; in insn()
639 atom->op2 = op2; in insn()
641 push_atom(f, atom); in insn()
708 static void emit_insn_atom(struct function *f, struct atom *atom) in emit_insn_atom() argument
712 struct storage *op1 = atom->op1; in emit_insn_atom()
713 struct storage *op2 = atom->op2; in emit_insn_atom()
715 if (atom->comment[0]) in emit_insn_atom()
716 sprintf(comment, "\t\t# %s", atom->comment); in emit_insn_atom()
720 if (atom->op2) { in emit_insn_atom()
724 atom->insn, tmp, stor_op_name(op2), comment); in emit_insn_atom()
725 } else if (atom->op1) in emit_insn_atom()
727 atom->insn, stor_op_name(op1), in emit_insn_atom()
731 atom->insn, in emit_insn_atom()
740 struct atom *atom; in emit_atom_list() local
742 FOR_EACH_PTR(f->atom_list, atom) { in emit_atom_list()
743 switch (atom->type) { in emit_atom_list()
745 if (write(STDOUT_FILENO, atom->text, atom->text_len) < 0) in emit_atom_list()
750 emit_insn_atom(f, atom); in emit_atom_list()
756 } END_FOR_EACH_PTR(atom); in emit_atom_list()
761 struct atom *atom; in emit_string_list() local
765 FOR_EACH_PTR(f->str_list, atom) { in emit_string_list()
767 printf(".L%d:\n", atom->label); in emit_string_list()
768 printf("\t.string\t%s\n", show_string(atom->string)); in emit_string_list()
770 free(atom); in emit_string_list()
771 } END_FOR_EACH_PTR(atom); in emit_string_list()
777 struct atom *atom; in func_cleanup() local
779 FOR_EACH_PTR(f->atom_list, atom) { in func_cleanup()
780 if ((atom->type == ATOM_TEXT) && (atom->text)) in func_cleanup()
781 free(atom->text); in func_cleanup()
782 if (atom->op1 && (atom->op1->flags & STOR_WANTS_FREE)) in func_cleanup()
783 free(atom->op1); in func_cleanup()
784 if (atom->op2 && (atom->op2->flags & STOR_WANTS_FREE)) in func_cleanup()
785 free(atom->op2); in func_cleanup()
786 free(atom); in func_cleanup()
787 } END_FOR_EACH_PTR(atom); in func_cleanup()