📄 out68k_a.c
字号:
for (reg = D0; reg <= FP7; reg++) { if (mask & (REGMASK) 1) { if (pending) { oprintf ("/"); } putreg (reg); pending = TRUE; } mask >>= 1; }}/* * generate a register mask for save. */static void put_smask P1 (REGMASK, mask){ put_mask (mask);}/* * generate a register mask for restore. */static void put_rmask P1 (REGMASK, mask){ put_mask (mask);}/* * generate a register name from a tempref number. */static void putreg P1 (REG, r){ switch (r) { case D0: case D1: case D2: case D3: case D4: case D5: case D6: case D7: oprintf ("d%d", (int) r); break; case A0: case A1: case A2: case A3: case A4: case A5: case A6: case A7: oprintf ("a%d", (int) r - (int) A0); break; case FP0: case FP1: case FP2: case FP3: case FP4: case FP5: case FP6: case FP7: oprintf ("fp%d", (int) r - (int) FP0); break; default: CANNOT_REACH_HERE (); }}PRIVATE void put_reference P1 (SYM *, sp){ if (!is_symbol_output (sp)) { switch (storageof (sp)) { case sc_global: nl (); oprintf ("\t.extern %s%s", outlate (nameof (sp)), newline); break; case sc_external: break; default: break; } symbol_output (sp); }}/* * generate a named label. */PRIVATE void put_name P1 (SYM *, sp){ put_reference (sp); oprintf ("%s:%s", outlate (nameof (sp)), newline);}/* * output a compiler generated label. */PRIVATE void put_label P1 (LABEL, lab){ oprintf ("%s%u:%s", prefix, (unsigned int) lab, newline);}static void put_header P2 (enum e_gt, gtype, SIZE, al){ static const char *directive[] = { ".data1\t", /* bytegen */ ".data2\t", /* wordgen */ ".data4\t", /* longgen */ ".data4\t", /* longlonggen */ ".ascii\t\"", /* stringgen */ }; if (gentype != gtype || outcol >= MAX_WIDTH) { put_align (al); gentype = gtype; outcol = 15; oprintf ("\t%s", directive[gtype]); } else if (gentype != stringgen) { oprintf (","); }}PRIVATE void put_byte P1 (UVAL, val){ if (val >= (UVAL) 32 && val <= (UVAL) 126 && val != (UVAL) '\\' && val != (UVAL) '"') { put_header (stringgen, alignment_of_type (tp_char)); oprintf ("%c", (int) val); outcol++; } else { put_header (bytegen, alignment_of_type (tp_char)); oprintf ("0x%lx", (unsigned long) (val & OxffUL)); outcol += 4; }}PRIVATE void put_word P1 (UVAL, val){ put_header (wordgen, alignment_of_type (tp_short)); oprintf ("0x%lx", (unsigned long) (val & OxffffUL)); outcol += 6;}PRIVATE void put_dword P1 (UVAL, val){ put_header (longgen, alignment_of_type (tp_long)); oprintf ("0x%lx", (unsigned long) val); outcol += 10;}#ifndef FLOAT_BOOTSTRAP#ifdef FLOAT_IEEE/* * Generate IEEE single and double numbers */PRIVATE void put_float P1 (const RVAL *, vp){ unsigned long ul; ieee_single (vp, &ul); put_dword ((UVAL) ul);}PRIVATE void put_double P1 (const RVAL *, vp){ unsigned long ul[2]; ieee_double (vp, ul, TRUE); put_dword ((UVAL) ul[0]); put_dword ((UVAL) ul[1]);}PRIVATE void put_longdouble P1 (const RVAL *, vp){ unsigned long ul[3]; ieee_longdouble (vp, ul, TRUE); put_dword ((UVAL) ul[0]); put_dword ((UVAL) ul[1]); put_dword ((UVAL) ul[2]);}#endif /* FLOAT_IEEE */#ifdef FLOAT_MFFP/* * Generate MOTOROLA FFP numbers */PRIVATE void put_float P1 (const RVAL *, vp){ put_dword (genffp (val));}PRIVATE void put_double P1 (const RVAL *, vp){ put_dword (genffp (vp));}PRIVATE void put_longdouble P1 (const RVAL *, val){ put_dword (genffp (val));}#endif /* FLOAT_MFFP */#endif /* FLOAT_BOOTSTRAP */#ifndef RELOC_BUGPRIVATE void put_char P1 (const EXPR *, ep){ put_header (bytegen, alignment_of_type (tp_char)); putconst (ep, IL1); outcol += 10;}PRIVATE void put_short P1 (const EXPR *, ep){ put_header (wordgen, alignment_of_type (tp_short)); putconst (ep, IL2); outcol += 10;}#endif /* RELOC_BUG */PRIVATE void put_long P1 (const EXPR *, ep){ put_header (longgen, alignment_of_type (tp_long)); putconst (ep, IL4); outcol += 10;}PRIVATE void put_longlong P1 (const EXPR *, ep){ put_header (longlonggen, alignment_of_type (tp_longlong)); putconst (ep, IL8); oprintf (", "); putconst (ep, IL4); outcol += 10;}PRIVATE void put_pointer P1 (const EXPR *, ep){ put_header (longgen, alignment_of_type (tp_pointer)); putconst (ep, IL0); outcol += 10;}PRIVATE void put_storage P1 (SYM *, sp){ SIZE al = alignment_of_type (typeof (sp)); put_bseg (al); if (is_static (sp)) { put_label (sp->value.l); } else { put_name (sp); } oprintf ("\t.space\t%ld%s", typeof (sp)->size, newline);}/* * dump the string literal pool. * if we are producing single copies of strings (which should therefore * be read only we put them in the text segment - else in the data segment. */PRIVATE void put_literals P0 (void){ const CHAR *cp; size_t len; if (lang_option == LANG_KANDR) { put_dseg (alignment_of_type (tp_char)); } else { put_kseg (alignment_of_type (tp_char)); } for (; strtab != NIL_STRING; strtab = strtab->next) { nl (); put_label (strtab->label); cp = strtab->str; for (len = strtab->len; len--;) put_byte ((UVAL) *cp++); put_byte ((UVAL) Ox0UL); } nl ();}/* align the following data */static void put_align P1 (SIZE, al){ nl (); if (al > align_type) { if (al > 1L) { oprintf ("\t.align\t%ld%s", al, newline); } } align_type = al;}/* * output any function epilogue code */PRIVATE void put_epilogue P2 (SYM *, sp, LABEL, label){ sp = sp; /* keep the compiler quiet */ label = label; /* keep the compiler quiet */}static void nl P0 (void){ if (outcol > 0) { if (gentype == stringgen) { oprintf ("\""); } oprintf ("%s", newline); gentype = nogen; outcol = 0; }}static void seg P3 (enum e_sg, segtype, const char *, segname, SIZE, al){ nl (); if (curseg != segtype) { oprintf ("\t.sect\t%s%s", segname, newline); curseg = segtype; align_type = 0L; } put_align (al);}PRIVATE void put_cseg P1 (SIZE, al){ seg (codeseg, ".text", al);}PRIVATE void put_dseg P1 (SIZE, al){ seg (dataseg, ".data", al);}static void put_bseg P1 (SIZE, al){ seg (bssseg, ".bss", al);}PRIVATE void put_kseg P1 (SIZE, al){ if (IandD_option) { put_dseg (al); } else { put_cseg (al); }}PRIVATE void put_rseg P1 (SIZE, al){ put_cseg (al);}PRIVATE void put_finish P0 (void){}PRIVATE void put_start P0 (void){ oprintf ("%s Generated by %s %s %s (%s) from \"%s\"%s", comment, PROGNAME, VERSION, LAST_CHANGE_DATE, __DATE__, in_file, newline);#ifdef VERBOSE { time_t time_of_day; VOIDCAST time (&time_of_day); oprintf ("%s Compilation date/time: %s%s", comment, ctime (&time_of_day), newline); }#endif /* VERBOSE */ /* introduce the sections */ seg (codeseg, ".text", (SIZE) 0); seg (romseg, ".rom", (SIZE) 0); seg (dataseg, ".data", (SIZE) 0); seg (bssseg, ".bss", (SIZE) 0);}#ifdef MULTIPLE_ASSEMBLERSstruct funcs ack68k_funcs = { put_code, put_name, put_label, put_byte, put_word, put_dword,#ifndef RELOC_BUG put_char, put_short,#endif /* RELOC_BUG */ put_long, put_longlong, put_pointer, put_storage, put_literals, put_finish, put_start, put_reference, put_epilogue, put_cseg, put_dseg, put_kseg, put_rseg, #ifndef FLOAT_BOOTSTRAP#ifdef FLOAT_SUPPORT put_float, put_double, put_longdouble,#endif /* FLOAT_SUPPORT */#endif /* FLOAT_BOOTSTRAP */ NULL};#endif /* MULTIPLE_ASSEMBLERS */#endif /* TARGET_ACK */#endif /* MC680X0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -