From: Andreas Schwab Date: Sun, 8 Feb 2004 23:30:49 +0000 (+0000) Subject: m68k.h (REGISTER_NAMES): Prefix each name with REGISTER_PREFIX. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=01bbf777d3d20f33ca989ff1665ded9f59ceca5d;p=gcc.git m68k.h (REGISTER_NAMES): Prefix each name with REGISTER_PREFIX. * config/m68k/m68k.h (REGISTER_NAMES): Prefix each name with REGISTER_PREFIX. * (M68K_FP_REG_NAME): New macro to specify an alternate name for the frame pointer register, overridable by OS targets. * (M68K_REGNAME): Macro to obtain register name for asm output, eventually replacing %a6 with M68K_FP_REG_NAME. * config/m68k/coff.h (REGISTER_NAMES): Don't redefine. * config/m68k/linux.h (REGISTER_NAMES): Likewise. * config/m68k/m68kelf.h (REGISTER_NAMES): Likewise. * config/m68k/netbsd-elf.h (REGISTER_NAMES): Likewise. * config/m68k/m68k.c: Use M68K_REGNAME(x) in place of reg_names[x]. Co-Authored-By: Bernardo Innocenti From-SVN: r77510 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b0bf217f31..081055e9b2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2004-02-08 Andreas Schwab + Bernardo Innocenti + + * config/m68k/m68k.h (REGISTER_NAMES): Prefix each name with + REGISTER_PREFIX. + * (M68K_FP_REG_NAME): New macro to specify an alternate name for the + frame pointer register, overridable by OS targets. + * (M68K_REGNAME): Macro to obtain register name for asm output, + eventually replacing %a6 with M68K_FP_REG_NAME. + * config/m68k/coff.h (REGISTER_NAMES): Don't redefine. + * config/m68k/linux.h (REGISTER_NAMES): Likewise. + * config/m68k/m68kelf.h (REGISTER_NAMES): Likewise. + * config/m68k/netbsd-elf.h (REGISTER_NAMES): Likewise. + * config/m68k/m68k.c: Use M68K_REGNAME(x) in place of reg_names[x]. + 2004-02-08 Kazu Hirata * target-def.h (TARGET_STRUCT_VALUE_RTX): Define as diff --git a/gcc/config/m68k/coff.h b/gcc/config/m68k/coff.h index d665e344e38..c2502c1497d 100644 --- a/gcc/config/m68k/coff.h +++ b/gcc/config/m68k/coff.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. m68k series COFF object files and debugging, version. - Copyright (C) 1994, 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1994, 1996, 1997, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -68,14 +68,6 @@ Boston, MA 02111-1307, USA. */ return "jmp %%pc@(2,%0:w)"; \ } while (0) -/* Here are the new register names. */ - -#undef REGISTER_NAMES -#define REGISTER_NAMES \ -{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ - "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \ - "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", "argptr" } - #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true /* If defined, a C expression whose value is a string containing the diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h index 03e637088fc..88d75f6d692 100644 --- a/gcc/config/m68k/linux.h +++ b/gcc/config/m68k/linux.h @@ -1,6 +1,6 @@ /* Definitions for Motorola 68k running Linux-based GNU systems with ELF format. - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -59,17 +59,6 @@ Boston, MA 02111-1307, USA. */ #define ASM_COMMENT_START "|" -/* How to refer to registers in assembler output. - This sequence is indexed by compiler's hard-register-number. - Motorola format uses different register names than defined in m68k.h. */ - -#undef REGISTER_NAMES - -#define REGISTER_NAMES \ -{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ - "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \ - "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", "argptr" } - #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index 28308b3e5a9..9f545f81cd9 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -499,25 +499,25 @@ m68k_output_function_prologue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED fprintf (stream, MOTOROLA ? "\tpea (%s)\n\tmove.l %s,%s\n" : "\tpea %s@\n\tmovel %s,%s\n", - reg_names[FRAME_POINTER_REGNUM], - reg_names[STACK_POINTER_REGNUM], - reg_names[FRAME_POINTER_REGNUM]); + M68K_REGNAME(FRAME_POINTER_REGNUM), + M68K_REGNAME(STACK_POINTER_REGNUM), + M68K_REGNAME(FRAME_POINTER_REGNUM)); else if (fsize_with_regs < 0x8000) asm_fprintf (stream, "\tlink" ASM_DOTW " %s,%I%wd\n", - reg_names[FRAME_POINTER_REGNUM], -fsize_with_regs); + M68K_REGNAME(FRAME_POINTER_REGNUM), -fsize_with_regs); else if (TARGET_68020) asm_fprintf (stream, "\tlink" ASM_DOTL " %s,%I%wd\n", - reg_names[FRAME_POINTER_REGNUM], -fsize_with_regs); + M68K_REGNAME(FRAME_POINTER_REGNUM), -fsize_with_regs); else /* Adding negative number is faster on the 68040. */ asm_fprintf (stream, "\tlink" ASM_DOTW " %s,%I0\n" "\tadd" ASM_DOT "l %I%wd,%Rsp\n", - reg_names[FRAME_POINTER_REGNUM], -fsize_with_regs); + M68K_REGNAME(FRAME_POINTER_REGNUM), -fsize_with_regs); if (dwarf2out_do_frame ()) { char *l; - l = (char *) dwarf2out_cfi_label (); + l = (char *) dwarf2out_cfi_label (); cfa_offset += 4; dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_offset); dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset); @@ -585,17 +585,17 @@ m68k_output_function_prologue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED } } - /* If the stack limit is not a symbol, check it here. + /* If the stack limit is not a symbol, check it here. This has the disadvantage that it may be too late... */ if (current_function_limit_stack) { if (REG_P (stack_limit_rtx)) asm_fprintf (stream, "\tcmp" ASM_DOT "l %s,%Rsp\n\ttrapcs\n", - reg_names[REGNO (stack_limit_rtx)]); + M68K_REGNAME(REGNO (stack_limit_rtx))); else if (GET_CODE (stack_limit_rtx) != SYMBOL_REF) warning ("stack limit expression is not supported"); } - + if (current_frame.reg_no <= 2) { /* Store each separately in the same order moveml uses. @@ -611,22 +611,22 @@ m68k_output_function_prologue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED asm_fprintf (stream, MOTOROLA ? "\t%Omove.l %s,-(%Rsp)\n" : "\tmovel %s,%Rsp@-\n", - reg_names[15 - i]); + M68K_REGNAME(15 - i)); if (dwarf2out_do_frame ()) { char *l = (char *) dwarf2out_cfi_label (); cfa_offset += 4; - if (! frame_pointer_needed) - dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset); - dwarf2out_reg_save (l, 15 - i, -cfa_offset); + if (! frame_pointer_needed) + dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset); + dwarf2out_reg_save (l, 15 - i, -cfa_offset); } } } else if (current_frame.reg_rev_mask) { if (TARGET_COLDFIRE) - /* The ColdFire does not support the predecrement form of the + /* The ColdFire does not support the predecrement form of the MOVEM instruction, so we must adjust the stack pointer and then use the plain address register indirect mode. The required register save space was combined earlier with @@ -661,22 +661,22 @@ m68k_output_function_prologue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (TARGET_ID_SHARED_LIBRARY) { asm_fprintf (stream, "\tmovel %s@(%s), %s\n", - reg_names[PIC_OFFSET_TABLE_REGNUM], + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM), m68k_library_id_string, - reg_names[PIC_OFFSET_TABLE_REGNUM]); + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM)); } else { if (MOTOROLA) asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n", - reg_names[PIC_OFFSET_TABLE_REGNUM]); + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM)); else { asm_fprintf (stream, "\tmovel %I%U_GLOBAL_OFFSET_TABLE_, %s\n", - reg_names[PIC_OFFSET_TABLE_REGNUM]); + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM)); asm_fprintf (stream, "\tlea %Rpc@(0,%s:l),%s\n", - reg_names[PIC_OFFSET_TABLE_REGNUM], - reg_names[PIC_OFFSET_TABLE_REGNUM]); + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM), + M68K_REGNAME(PIC_OFFSET_TABLE_REGNUM)); } } } @@ -779,31 +779,31 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\t%Omove.l -%wd(%s,%Ra1.l),%s\n", offset, - reg_names[FRAME_POINTER_REGNUM], - reg_names[i]); + M68K_REGNAME(FRAME_POINTER_REGNUM), + M68K_REGNAME(i)); else asm_fprintf (stream, "\tmovel %s@(-%wd,%Ra1:l),%s\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), offset, - reg_names[i]); + M68K_REGNAME(i)); } else if (restore_from_sp) asm_fprintf (stream, MOTOROLA ? "\t%Omove.l (%Rsp)+,%s\n" : "\tmovel %Rsp@+,%s\n", - reg_names[i]); + M68K_REGNAME(i)); else { if (MOTOROLA) asm_fprintf (stream, "\t%Omove.l -%wd(%s),%s\n", offset, - reg_names[FRAME_POINTER_REGNUM], - reg_names[i]); + M68K_REGNAME(FRAME_POINTER_REGNUM), + M68K_REGNAME(i)); else asm_fprintf (stream, "\tmovel %s@(-%wd),%s\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), offset, - reg_names[i]); + M68K_REGNAME(i)); } offset -= 4; } @@ -816,7 +816,7 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (big) { asm_fprintf (stream, "\tadd" ASM_DOT "l %s,%Ra1\n", - reg_names[FRAME_POINTER_REGNUM]); + M68K_REGNAME(FRAME_POINTER_REGNUM)); asm_fprintf (stream, MOTOROLA ? "\tmovm.l (%Ra1),%I0x%x\n" : "\tmoveml %Ra1@,%I0x%x\n", @@ -832,11 +832,11 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\tmovm.l -%wd(%s),%I0x%x\n", current_frame.offset + fsize, - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.reg_mask); else asm_fprintf (stream, "\tmoveml %s@(-%wd),%I0x%x\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.offset + fsize, current_frame.reg_mask); } @@ -848,11 +848,11 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\tmovm.l -%wd(%s,%Ra1.l),%I0x%x\n", current_frame.offset + fsize, - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.reg_mask); else asm_fprintf (stream, "\tmoveml %s@(-%wd,%Ra1:l),%I0x%x\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.offset + fsize, current_frame.reg_mask); } @@ -868,11 +868,11 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\tmovm.l -%wd(%s),%I0x%x\n", current_frame.offset + fsize, - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.reg_mask); else asm_fprintf (stream, "\tmoveml %s@(-%wd),%I0x%x\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.offset + fsize, current_frame.reg_mask); } @@ -885,11 +885,11 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\tfmovm -%wd(%s,%Ra1.l),%I0x%x\n", current_frame.foffset + fsize, - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.fpu_rev_mask); else asm_fprintf (stream, "\tfmovem %s@(-%wd,%Ra1:l),%I0x%x\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.foffset + fsize, current_frame.fpu_rev_mask); } @@ -907,18 +907,17 @@ m68k_output_function_epilogue (FILE *stream, HOST_WIDE_INT size ATTRIBUTE_UNUSED if (MOTOROLA) asm_fprintf (stream, "\tfmovm -%wd(%s),%I0x%x\n", current_frame.foffset + fsize, - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.fpu_rev_mask); else asm_fprintf (stream, "\tfmovem %s@(-%wd),%I0x%x\n", - reg_names[FRAME_POINTER_REGNUM], + M68K_REGNAME(FRAME_POINTER_REGNUM), current_frame.foffset + fsize, current_frame.fpu_rev_mask); } } if (frame_pointer_needed) - fprintf (stream, "\tunlk %s\n", - reg_names[FRAME_POINTER_REGNUM]); + fprintf (stream, "\tunlk %s\n", M68K_REGNAME(FRAME_POINTER_REGNUM)); else if (fsize_with_regs) { if (fsize_with_regs <= 8) @@ -2707,7 +2706,7 @@ print_operand (FILE *file, rtx op, int letter) { /* This is only for direct addresses with TARGET_PCREL */ if (GET_CODE (op) != MEM || GET_CODE (XEXP (op, 0)) != SYMBOL_REF - || !TARGET_PCREL) + || !TARGET_PCREL) abort (); output_addr_const (file, XEXP (op, 0)); } @@ -2716,9 +2715,9 @@ print_operand (FILE *file, rtx op, int letter) if (letter == 'R') /* Print out the second register name of a register pair. I.e., R (6) => 7. */ - fputs (reg_names[REGNO (op) + 1], file); + fputs (M68K_REGNAME(REGNO (op) + 1), file); else - fputs (reg_names[REGNO (op)], file); + fputs (M68K_REGNAME(REGNO (op)), file); } else if (GET_CODE (op) == MEM) { @@ -2816,15 +2815,15 @@ print_operand_address (FILE *file, rtx addr) switch (GET_CODE (addr)) { case REG: - fprintf (file, MOTOROLA ? "(%s)" : "%s@", reg_names[REGNO (addr)]); + fprintf (file, MOTOROLA ? "(%s)" : "%s@", M68K_REGNAME(REGNO (addr))); break; case PRE_DEC: fprintf (file, MOTOROLA ? "-(%s)" : "%s@-", - reg_names[REGNO (XEXP (addr, 0))]); + M68K_REGNAME(REGNO (XEXP (addr, 0)))); break; case POST_INC: fprintf (file, MOTOROLA ? "(%s)+" : "%s@+", - reg_names[REGNO (XEXP (addr, 0))]); + M68K_REGNAME(REGNO (XEXP (addr, 0)))); break; case PLUS: reg1 = reg2 = ireg = breg = offset = 0; @@ -2933,14 +2932,14 @@ print_operand_address (FILE *file, rtx addr) { ASM_OUTPUT_CASE_FETCH (file, CODE_LABEL_NUMBER (XEXP (addr, 0)), - reg_names[REGNO (XEXP (ireg, 0))]); + M68K_REGNAME(REGNO (XEXP (ireg, 0)))); fprintf (file, "w"); } else { ASM_OUTPUT_CASE_FETCH (file, CODE_LABEL_NUMBER (XEXP (addr, 0)), - reg_names[REGNO (ireg)]); + M68K_REGNAME(REGNO (ireg))); fprintf (file, "l"); } if (scale != 1) @@ -2953,7 +2952,7 @@ print_operand_address (FILE *file, rtx addr) { ASM_OUTPUT_CASE_FETCH (file, CODE_LABEL_NUMBER (XEXP (addr, 0)), - reg_names[REGNO (breg)]); + M68K_REGNAME(REGNO (breg))); fprintf (file, "l)"); break; } @@ -2980,13 +2979,13 @@ print_operand_address (FILE *file, rtx addr) fprintf (file, ".w"); } } - fprintf (file, "(%s", reg_names[REGNO (breg)]); + fprintf (file, "(%s", M68K_REGNAME(REGNO (breg))); if (ireg != 0) putc (',', file); } else /* !MOTOROLA */ { - fprintf (file, "%s@(", reg_names[REGNO (breg)]); + fprintf (file, "%s@(", M68K_REGNAME(REGNO (breg))); if (addr != 0) { output_addr_const (file, addr); @@ -3011,21 +3010,21 @@ print_operand_address (FILE *file, rtx addr) } if (ireg != 0 && GET_CODE (ireg) == SIGN_EXTEND) fprintf (file, MOTOROLA ? "%s.w" : "%s:w", - reg_names[REGNO (XEXP (ireg, 0))]); + M68K_REGNAME(REGNO (XEXP (ireg, 0)))); else if (ireg != 0) fprintf (file, MOTOROLA ? "%s.l" : "%s:l", - reg_names[REGNO (ireg)]); + M68K_REGNAME(REGNO (ireg))); if (scale != 1) fprintf (file, MOTOROLA ? "*%d" : ":%d", scale); putc (')', file); break; } else if (reg1 != 0 && GET_CODE (addr) == LABEL_REF - && ! (flag_pic && reg1 == pic_offset_table_rtx)) + && ! (flag_pic && reg1 == pic_offset_table_rtx)) { ASM_OUTPUT_CASE_FETCH (file, CODE_LABEL_NUMBER (XEXP (addr, 0)), - reg_names[REGNO (reg1)]); + M68K_REGNAME(REGNO (reg1))); fprintf (file, "l)"); break; } diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 86742fc49c1..b65315efc32 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -1,5 +1,4 @@ -/* Definitions of target machine for GNU compiler. - Sun 68000/68020 version. +/* Definitions of target machine for GCC for Motorola 680x0/ColdFire. Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. diff --git a/gcc/config/m68k/m68kelf.h b/gcc/config/m68k/m68kelf.h index ac59af4b0bc..2ac5ceb1606 100644 --- a/gcc/config/m68k/m68kelf.h +++ b/gcc/config/m68k/m68kelf.h @@ -78,18 +78,6 @@ Boston, MA 02111-1307, USA. */ return "jmp %%pc@(2,%0:w)"; \ } while (0) -/* How to refer to registers in assembler output. - This sequence is indexed by compiler's hard-register-number. - Motorola format uses different register names than defined - in m68k.h. */ - -#undef REGISTER_NAMES - -#define REGISTER_NAMES \ -{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ - "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \ - "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", "argptr" } - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ diff --git a/gcc/config/m68k/netbsd-elf.h b/gcc/config/m68k/netbsd-elf.h index f9f4d128e3a..ecb1469f995 100644 --- a/gcc/config/m68k/netbsd-elf.h +++ b/gcc/config/m68k/netbsd-elf.h @@ -175,19 +175,6 @@ while (0) #define ASM_COMMENT_START "|" -/* How to refer to registers in assembler output. - This sequence is indexed by compiler's hard-register-number. - Motorola format uses different register names than defined in m68k.h. - We also take this chance to convert 'a6' to 'fp' */ - -#undef REGISTER_NAMES - -#define REGISTER_NAMES \ -{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ - "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \ - "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", "argptr" } - - /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to keep switch tables in the text section. */