diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-12-16 18:23:00 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-12-16 18:23:00 +0000 |
commit | 805e22b2051e9c6a75377ea6599654d7415da483 (patch) | |
tree | c259697c448b0c6f548f153c48c46a8d7a75970f /gcc/config/rs6000 | |
parent | 2c27ce73ee2229b0871c4ccad2342d8a4be85eff (diff) | |
download | gcc-805e22b2051e9c6a75377ea6599654d7415da483.tar.gz |
Merge basic-improvements-branch to trunk
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60174 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/rs6000')
-rw-r--r-- | gcc/config/rs6000/linux64.h | 2 | ||||
-rw-r--r-- | gcc/config/rs6000/lynx.h | 1 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000-c.c | 2 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 34 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 16 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 53 | ||||
-rw-r--r-- | gcc/config/rs6000/sysv4.h | 229 | ||||
-rw-r--r-- | gcc/config/rs6000/t-rs6000-c-rule | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/t-vxworks | 10 | ||||
-rw-r--r-- | gcc/config/rs6000/vxppc.h | 57 | ||||
-rw-r--r-- | gcc/config/rs6000/vxworks.h | 81 | ||||
-rw-r--r-- | gcc/config/rs6000/xcoff.h | 10 |
12 files changed, 246 insertions, 254 deletions
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 73fd5beed3d..3d5d7e447b8 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -323,7 +323,7 @@ do \ assemble_name (FILE, \ XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ putc ('\n', FILE); \ - ASM_OUTPUT_INTERNAL_LABEL (FILE, "LM", sym_lineno); \ + (*targetm.asm_out.internal_label) (FILE, "LM", sym_lineno); \ sym_lineno += 1; \ } \ while (0) diff --git a/gcc/config/rs6000/lynx.h b/gcc/config/rs6000/lynx.h index 7878ef94a17..9689bf150f9 100644 --- a/gcc/config/rs6000/lynx.h +++ b/gcc/config/rs6000/lynx.h @@ -33,7 +33,6 @@ Boston, MA 02111-1307, USA. */ #undef TARGET_ASM_SELECT_SECTION #undef USER_LABEL_PREFIX #undef ASM_OUTPUT_LABELREF -#undef ASM_OUTPUT_INTERNAL_LABEL #undef ASM_GENERATE_INTERNAL_LABEL #undef ASM_OUTPUT_COMMON #undef ASM_OUTPUT_LOCAL diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 03f91baf2c7..a9ea94f9e05 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -23,6 +23,8 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "cpplib.h" #include "tree.h" #include "c-pragma.h" diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 5c0ef2f6f30..27069b6f1d9 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -22,6 +22,8 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "rtl.h" #include "regs.h" #include "hard-reg-set.h" @@ -165,6 +167,7 @@ struct builtin_description const enum rs6000_builtins code; }; +static bool rs6000_function_ok_for_sibcall PARAMS ((tree, tree)); static void rs6000_add_gc_roots PARAMS ((void)); static int num_insns_constant_wide PARAMS ((HOST_WIDE_INT)); static void validate_condition_mode @@ -388,6 +391,9 @@ static const char alt_reg_names[][8] = #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall #endif +#undef TARGET_FUNCTION_OK_FOR_SIBCALL +#define TARGET_FUNCTION_OK_FOR_SIBCALL rs6000_function_ok_for_sibcall + struct gcc_target targetm = TARGET_INITIALIZER; /* Override command line options. Mostly we process the processor @@ -462,6 +468,9 @@ rs6000_override_options (default_cpu) {"405", PROCESSOR_PPC405, MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS, POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64}, + {"405f", PROCESSOR_PPC405, + MASK_POWERPC | MASK_NEW_MNEMONICS, + POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64}, {"505", PROCESSOR_MPCCORE, MASK_POWERPC | MASK_NEW_MNEMONICS, POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64}, @@ -9510,33 +9519,34 @@ rs6000_return_addr (count, frame) vector parameters are required to have a prototype, so the argument type info must be available here. (The tail recursion case can work with vector parameters, but there's no way to distinguish here.) */ -int -function_ok_for_sibcall (fndecl) - tree fndecl; +static bool +rs6000_function_ok_for_sibcall (decl, exp) + tree decl; + tree exp ATTRIBUTE_UNUSED; { tree type; - if (fndecl) + if (decl) { if (TARGET_ALTIVEC_VRSAVE) { - for (type = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); + for (type = TYPE_ARG_TYPES (TREE_TYPE (decl)); type; type = TREE_CHAIN (type)) { if (TREE_CODE (TREE_VALUE (type)) == VECTOR_TYPE) - return 0; + return false; } } if (DEFAULT_ABI == ABI_DARWIN - || (*targetm.binds_local_p) (fndecl)) + || (*targetm.binds_local_p) (decl)) { - tree attr_list = TYPE_ATTRIBUTES (TREE_TYPE (fndecl)); + tree attr_list = TYPE_ATTRIBUTES (TREE_TYPE (decl)); if (!lookup_attribute ("longcall", attr_list) || lookup_attribute ("shortcall", attr_list)) - return 1; + return true; } } - return 0; + return false; } static int @@ -11424,7 +11434,7 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function) /* Set up a TOC entry for the function. */ ASM_GENERATE_INTERNAL_LABEL (buf, "Lthunk", labelno); toc_section (); - ASM_OUTPUT_INTERNAL_LABEL (file, "Lthunk", labelno); + (*targetm.asm_out.internal_label) (file, "Lthunk", labelno); labelno++; if (TARGET_MINIMAL_TOC) @@ -11747,7 +11757,7 @@ output_toc (file, x, labelno, mode) ASM_OUTPUT_ALIGN (file, 3); } - ASM_OUTPUT_INTERNAL_LABEL (file, "LC", labelno); + (*targetm.asm_out.internal_label) (file, "LC", labelno); /* Handle FP constants specially. Note that if we have a minimal TOC, things we put here aren't actually in the TOC, so we can allow diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index e5e9e27cce9..9bb6373682b 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -69,6 +69,7 @@ Boston, MA 02111-1307, USA. */ %{mcpu=401: -mppc} \ %{mcpu=403: -m403} \ %{mcpu=405: -m405} \ +%{mcpu=405f: -m405} \ %{mcpu=505: -mppc} \ %{mcpu=601: -m601} \ %{mcpu=602: -mppc} \ @@ -1804,10 +1805,6 @@ typedef struct rs6000_args argument is passed depends on whether or not it is a named argument. */ #define STRICT_ARGUMENT_NAMING 1 -/* We do not allow indirect calls to be optimized into sibling calls, nor - do we allow calls with vector parameters. */ -#define FUNCTION_OK_FOR_SIBCALL(DECL) function_ok_for_sibcall ((DECL)) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ @@ -1933,9 +1930,6 @@ typedef struct rs6000_args /* Addressing modes, and classification of registers for them. */ -/* #define HAVE_POST_INCREMENT 0 */ -/* #define HAVE_POST_DECREMENT 0 */ - #define HAVE_PRE_DECREMENT 1 #define HAVE_PRE_INCREMENT 1 @@ -2801,14 +2795,6 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) -/* Store in OUTPUT a string (made with alloca) containing - an assembler-name for a local static variable named NAME. - LABELNO is an integer which is different for each call. */ - -#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ -( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ - sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Pick up the return address upon entry to a procedure. Used for dwarf2 unwind information. This also enables the table driven mechanism. */ diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index a031a295e9b..2f11f5781cb 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -36,6 +36,7 @@ ;; 16 macho_correct_pic ;; 19 movesi_from_cr ;; 20 movesi_to_cr +;; 21 cntlz{w,d}2 count lead zero word/double word ;; Define an insn type attribute. This is used in function unit delay ;; computations. @@ -2364,12 +2365,27 @@ (const_int 0)))] "") -(define_insn "ffssi2" - [(set (match_operand:SI 0 "gpc_reg_operand" "=&r") - (ffs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))] +(define_expand "ffssi2" + [(set (match_dup 2) + (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r"))) + (parallel [(set (match_dup 3) (and:SI (match_dup 1) + (match_dup 2))) + (clobber (scratch:CC))]) + (set (match_dup 4) (unspec:SI [(match_dup 3)] 21)) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (minus:SI (const_int 32) (match_dup 4)))] "" - "neg %0,%1\;and %0,%0,%1\;{cntlz|cntlzw} %0,%0\;{sfi|subfic} %0,%0,32" - [(set_attr "length" "16")]) + { + operands[2] = gen_reg_rtx (SImode); + operands[3] = gen_reg_rtx (SImode); + operands[4] = gen_reg_rtx (SImode); + }) + +(define_insn "cntlzw2" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (unspec:SI [(match_operand:SI 1 "gpc_reg_operand" "r")] 21))] + "" + "{cntlz|cntlzw} %0,%1") (define_expand "mulsi3" [(use (match_operand:SI 0 "gpc_reg_operand" "")) @@ -6724,12 +6740,27 @@ (const_int 0)))] "") -(define_insn "ffsdi2" - [(set (match_operand:DI 0 "gpc_reg_operand" "=&r") - (ffs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))] +(define_expand "ffsdi2" + [(set (match_dup 2) + (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r"))) + (parallel [(set (match_dup 3) (and:DI (match_dup 1) + (match_dup 2))) + (clobber (scratch:CC))]) + (set (match_dup 4) (unspec:DI [(match_dup 3)] 21)) + (set (match_operand:DI 0 "gpc_reg_operand" "=r") + (minus:DI (const_int 64) (match_dup 4)))] "TARGET_POWERPC64" - "neg %0,%1\;and %0,%0,%1\;cntlzd %0,%0\;subfic %0,%0,64" - [(set_attr "length" "16")]) + { + operands[2] = gen_reg_rtx (DImode); + operands[3] = gen_reg_rtx (DImode); + operands[4] = gen_reg_rtx (DImode); + }) + +(define_insn "cntlzd2" + [(set (match_operand:DI 0 "gpc_reg_operand" "=r") + (unspec:DI [(match_operand:DI 1 "gpc_reg_operand" "r")] 21))] + "TARGET_POWERPC64" + "cntlzd %0,%1") (define_insn "muldi3" [(set (match_operand:DI 0 "gpc_reg_operand" "=r") @@ -8581,7 +8612,9 @@ int endian = (WORDS_BIG_ENDIAN == 0); long l[2]; REAL_VALUE_TYPE rv; +#if HOST_BITS_PER_WIDE_INT >= 64 HOST_WIDE_INT val; +#endif REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]); REAL_VALUE_TO_TARGET_DOUBLE (rv, l); diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 68fa73f7997..b10649d904a 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -150,7 +150,6 @@ extern int g_switch_set; /* Whether -G xx was passed. */ N_("Link with libmvme.a, libc.a and crt0.o") }, \ { "emb", 0, \ N_("Set the PPC_EMB bit in the ELF flags header") }, \ - { "vxworks", 0, N_("no description yet") }, \ { "windiss", 0, N_("Use the WindISS simulator") }, \ { "shlib", 0, N_("no description yet") }, \ EXTRA_SUBTARGET_SWITCHES \ @@ -458,7 +457,7 @@ toc_section () \ { \ toc_initialized = 1; \ fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \ - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LCTOC", 0); \ + (*targetm.asm_out.internal_label) (asm_out_file, "LCTOC", 0); \ fprintf (asm_out_file, "\t.tc "); \ ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1[TC],"); \ ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ @@ -603,7 +602,7 @@ extern int rs6000_pic_labelno; { \ char buf[256]; \ \ - ASM_OUTPUT_INTERNAL_LABEL (FILE, "LCL", rs6000_pic_labelno); \ + (*targetm.asm_out.internal_label) (FILE, "LCL", rs6000_pic_labelno); \ \ ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1); \ fprintf (FILE, "\t%s ", init_ptr); \ @@ -646,7 +645,7 @@ extern int rs6000_pic_labelno; #define LOCAL_LABEL_PREFIX "." #define USER_LABEL_PREFIX "" -/* svr4.h overrides ASM_OUTPUT_INTERNAL_LABEL. */ +/* svr4.h overrides (*targetm.asm_out.internal_label). */ #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ asm_fprintf (FILE, "%L%s", PREFIX) @@ -816,15 +815,15 @@ do { \ %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ %{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ -%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ -%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-freebsd: -mbig} \ - %{mcall-i960-old: -mlittle} \ - %{mcall-linux: -mbig} \ - %{mcall-gnu: -mbig} \ - %{mcall-netbsd: -mbig} \ -}}}}" +%{memb|msdata|msdata=eabi: -memb} \ +%{mlittle|mlittle-endian:-mlittle; \ + mbig|mbig-endian :-mbig; \ + mcall-aixdesc | \ + mcall-freebsd | \ + mcall-netbsd | \ + mcall-linux | \ + mcall-gnu :-mbig; \ + mcall-i960-old :-mlittle}" #define CC1_ENDIAN_BIG_SPEC "" @@ -839,19 +838,15 @@ do { \ /* Pass -G xxx to the compiler and set correct endian mode. */ #define CC1_SPEC "%{G*} \ -%{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} \ -%{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-aixdesc: -mbig %(cc1_endian_big) } \ - %{mcall-freebsd: -mbig %(cc1_endian_big) } \ - %{mcall-i960-old: -mlittle %(cc1_endian_little) } \ - %{mcall-linux: -mbig %(cc1_endian_big) } \ - %{mcall-gnu: -mbig %(cc1_endian_big) } \ - %{mcall-netbsd: -mbig %(cc1_endian_big) } \ - %{!mcall-aixdesc: %{!mcall-freebsd: %{!mcall-i960-old: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ - %(cc1_endian_default) \ - }}}}}} \ -}}}} \ +%{mlittle|mlittle-endian: %(cc1_endian_little); \ + mbig |mbig-endian : %(cc1_endian_big); \ + mcall-aixdesc | \ + mcall-freebsd | \ + mcall-netbsd | \ + mcall-linux | \ + mcall-gnu : -mbig %(cc1_endian_big); \ + mcall-i960-old : -mlittle %(cc1_endian_little); \ + : %(cc1_endian_default)} \ %{mno-sdata: -msdata=none } \ %{meabi: %{!mcall-*: -mcall-sysv }} \ %{!meabi: %{!mno-eabi: \ @@ -884,18 +879,16 @@ do { \ /* Default starting address if specified. */ #define LINK_START_SPEC "\ -%{mads: %(link_start_ads) } \ -%{myellowknife: %(link_start_yellowknife) } \ -%{mmvme: %(link_start_mvme) } \ -%{msim: %(link_start_sim) } \ -%{mwindiss: %(link_start_windiss) } \ -%{mcall-freebsd: %(link_start_freebsd) } \ -%{mcall-linux: %(link_start_linux) } \ -%{mcall-gnu: %(link_start_gnu) } \ -%{mcall-netbsd: %(link_start_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ - %{!mcall-freebsd: %(link_start_default) }}}}}}}}}" +%{mads : %(link_start_ads) ; \ + myellowknife : %(link_start_yellowknife) ; \ + mmvme : %(link_start_mvme) ; \ + msim : %(link_start_sim) ; \ + mwindiss : %(link_start_windiss) ; \ + mcall-freebsd: %(link_start_freebsd) ; \ + mcall-linux : %(link_start_linux) ; \ + mcall-gnu : %(link_start_gnu) ; \ + mcall-netbsd : %(link_start_netbsd) ; \ + : %(link_start_default) }" #define LINK_START_DEFAULT_SPEC "" @@ -943,18 +936,16 @@ do { \ /* Any specific OS flags. */ #define LINK_OS_SPEC "\ -%{mads: %(link_os_ads) } \ -%{myellowknife: %(link_os_yellowknife) } \ -%{mmvme: %(link_os_mvme) } \ -%{msim: %(link_os_sim) } \ -%{mwindiss: %(link_os_windiss) } \ -%{mcall-freebsd: %(link_os_freebsd) } \ -%{mcall-linux: %(link_os_linux) } \ -%{mcall-gnu: %(link_os_gnu) } \ -%{mcall-netbsd: %(link_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(link_os_default) }}}}}}}}}" +%{mads : %(link_os_ads) ; \ + myellowknife : %(link_os_yellowknife) ; \ + mmvme : %(link_os_mvme) ; \ + msim : %(link_os_sim) ; \ + mwindiss : %(link_os_windiss) ; \ + mcall-freebsd: %(link_os_freebsd) ; \ + mcall-linux : %(link_os_linux) ; \ + mcall-gnu : %(link_os_gnu) ; \ + mcall-netbsd : %(link_os_netbsd) ; \ + : %(link_os_default) }" #define LINK_OS_DEFAULT_SPEC "" @@ -966,74 +957,64 @@ do { \ /* Override rs6000.h definition. */ #undef CPP_SPEC #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) \ -%{mads: %(cpp_os_ads) } \ -%{myellowknife: %(cpp_os_yellowknife) } \ -%{mmvme: %(cpp_os_mvme) } \ -%{msim: %(cpp_os_sim) } \ -%{mwindiss: %(cpp_os_windiss) } \ -%{mcall-freebsd: %(cpp_os_freebsd) } \ -%{mcall-linux: %(cpp_os_linux) } \ -%{mcall-gnu: %(cpp_os_gnu) } \ -%{mcall-netbsd: %(cpp_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}}" +%{mads : %(cpp_os_ads) ; \ + myellowknife : %(cpp_os_yellowknife) ; \ + mmvme : %(cpp_os_mvme) ; \ + msim : %(cpp_os_sim) ; \ + mwindiss : %(cpp_os_windiss) ; \ + mcall-freebsd: %(cpp_os_freebsd) ; \ + mcall-linux : %(cpp_os_linux) ; \ + mcall-gnu : %(cpp_os_gnu) ; \ + mcall-netbsd : %(cpp_os_netbsd) ; \ + : %(cpp_os_default) }" #define CPP_OS_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC "\ -%{mads: %(startfile_ads) } \ -%{myellowknife: %(startfile_yellowknife) } \ -%{mmvme: %(startfile_mvme) } \ -%{msim: %(startfile_sim) } \ -%{mwindiss: %(startfile_windiss) } \ -%{mcall-freebsd: %(startfile_freebsd) } \ -%{mcall-linux: %(startfile_linux) } \ -%{mcall-gnu: %(startfile_gnu) } \ -%{mcall-netbsd: %(startfile_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(startfile_default) }}}}}}}}}" +%{mads : %(startfile_ads) ; \ + myellowknife : %(startfile_yellowknife) ; \ + mmvme : %(startfile_mvme) ; \ + msim : %(startfile_sim) ; \ + mwindiss : %(startfile_windiss) ; \ + mcall-freebsd: %(startfile_freebsd) ; \ + mcall-linux : %(startfile_linux) ; \ + mcall-gnu : %(startfile_gnu) ; \ + mcall-netbsd : %(startfile_netbsd) ; \ + : %(startfile_default) }" #define STARTFILE_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef LIB_SPEC #define LIB_SPEC "\ -%{mads: %(lib_ads) } \ -%{myellowknife: %(lib_yellowknife) } \ -%{mmvme: %(lib_mvme) } \ -%{msim: %(lib_sim) } \ -%{mwindiss: %(lib_windiss) } \ -%{mcall-freebsd: %(lib_freebsd) } \ -%{mcall-linux: %(lib_linux) } \ -%{mcall-gnu: %(lib_gnu) } \ -%{mcall-netbsd: %(lib_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(lib_default) }}}}}}}}}" +%{mads : %(lib_ads) ; \ + myellowknife : %(lib_yellowknife) ; \ + mmvme : %(lib_mvme) ; \ + msim : %(lib_sim) ; \ + mwindiss : %(lib_windiss) ; \ + mcall-freebsd: %(lib_freebsd) ; \ + mcall-linux : %(lib_linux) ; \ + mcall-gnu : %(lib_gnu) ; \ + mcall-netbsd : %(lib_netbsd) ; \ + : %(lib_default) }" #define LIB_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC "\ -%{mads: crtsavres.o%s %(endfile_ads)} \ -%{myellowknife: crtsavres.o%s %(endfile_yellowknife)} \ -%{mmvme: crtsavres.o%s %(endfile_mvme)} \ -%{msim: crtsavres.o%s %(endfile_sim)} \ -%{mwindiss: %(endfile_windiss)} \ -%{mcall-freebsd: crtsavres.o%s %(endfile_freebsd) } \ -%{mcall-linux: crtsavres.o%s %(endfile_linux) } \ -%{mcall-gnu: crtsavres.o%s %(endfile_gnu) } \ -%{mcall-netbsd: crtsavres.o%s %(endfile_netbsd) } \ -%{mvxworks: crtsavres.o%s %(endfile_vxworks) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %{!mvxworks: %(crtsavres_default) \ - %(endfile_default) }}}}}}}}}}" +%{mads : crtsavres.o%s %(endfile_ads) ; \ + myellowknife : crtsavres.o%s %(endfile_yellowknife) ; \ + mmvme : crtsavres.o%s %(endfile_mvme) ; \ + msim : crtsavres.o%s %(endfile_sim) ; \ + mwindiss : %(endfile_windiss) ; \ + mcall-freebsd: crtsavres.o%s %(endfile_freebsd) ; \ + mcall-linux : crtsavres.o%s %(endfile_linux) ; \ + mcall-gnu : crtsavres.o%s %(endfile_gnu) ; \ + mcall-netbsd : crtsavres.o%s %(endfile_netbsd) ; \ + : %(crtsavres_default) %(endfile_default) }" #define CRTSAVRES_DEFAULT_SPEC "crtsavres.o%s" @@ -1205,48 +1186,6 @@ ncrtn.o%s" #define CPP_OS_NETBSD_SPEC "\ -D__powerpc__ -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__" -/* VxWorks support. */ -/* VxWorks does all the library stuff itself. */ -#define LIB_VXWORKS_SPEC "" - -/* VxWorks provides the functionality of crt0.o and friends itself. */ - -#define STARTFILE_VXWORKS_SPEC "" - -#define ENDFILE_VXWORKS_SPEC "" - -/* Because it uses ld -r, vxworks has no start/end files, nor starting - address. */ - -#define LINK_START_VXWORKS_SPEC "" - -#define LINK_OS_VXWORKS_SPEC "-r" - -#define CPP_OS_VXWORKS_SPEC "\ --DCPU_FAMILY=PPC \ -%{!mcpu*: \ - %{mpowerpc*: -DCPU=PPC603} \ - %{!mno-powerpc: -DCPU=PPC603}} \ -%{mcpu=powerpc: -DCPU=PPC603} \ -%{mcpu=401: -DCPU=PPC403} \ -%{mcpu=403: -DCPU=PPC403} \ -%{mcpu=405: -DCPU=PPC405} \ -%{mcpu=601: -DCPU=PPC601} \ -%{mcpu=602: -DCPU=PPC603} \ -%{mcpu=603: -DCPU=PPC603} \ -%{mcpu=603e: -DCPU=PPC603} \ -%{mcpu=ec603e: -DCPU=PPC603} \ -%{mcpu=604: -DCPU=PPC604} \ -%{mcpu=604e: -DCPU=PPC604} \ -%{mcpu=620: -DCPU=PPC604} \ -%{mcpu=740: -DCPU=PPC603} \ -%{mcpu=7450: -DCPU=PPC603} \ -%{mcpu=750: -DCPU=PPC603} \ -%{mcpu=801: -DCPU=PPC603} \ -%{mcpu=821: -DCPU=PPC603} \ -%{mcpu=823: -DCPU=PPC603} \ -%{mcpu=860: -DCPU=PPC603}" - /* WindISS support. */ #define LIB_WINDISS_SPEC "--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group" @@ -1280,7 +1219,6 @@ ncrtn.o%s" { "lib_gnu", LIB_GNU_SPEC }, \ { "lib_linux", LIB_LINUX_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \ - { "lib_vxworks", LIB_VXWORKS_SPEC }, \ { "lib_windiss", LIB_WINDISS_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \ @@ -1291,7 +1229,6 @@ ncrtn.o%s" { "startfile_gnu", STARTFILE_GNU_SPEC }, \ { "startfile_linux", STARTFILE_LINUX_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ - { "startfile_vxworks", STARTFILE_VXWORKS_SPEC }, \ { "startfile_windiss", STARTFILE_WINDISS_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \ @@ -1302,7 +1239,6 @@ ncrtn.o%s" { "endfile_gnu", ENDFILE_GNU_SPEC }, \ { "endfile_linux", ENDFILE_LINUX_SPEC }, \ { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ - { "endfile_vxworks", ENDFILE_VXWORKS_SPEC }, \ { "endfile_windiss", ENDFILE_WINDISS_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "link_path", LINK_PATH_SPEC }, \ @@ -1317,7 +1253,6 @@ ncrtn.o%s" { "link_start_gnu", LINK_START_GNU_SPEC }, \ { "link_start_linux", LINK_START_LINUX_SPEC }, \ { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ - { "link_start_vxworks", LINK_START_VXWORKS_SPEC }, \ { "link_start_windiss", LINK_START_WINDISS_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_os", LINK_OS_SPEC }, \ @@ -1329,7 +1264,6 @@ ncrtn.o%s" { "link_os_linux", LINK_OS_LINUX_SPEC }, \ { "link_os_gnu", LINK_OS_GNU_SPEC }, \ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ - { "link_os_vxworks", LINK_OS_VXWORKS_SPEC }, \ { "link_os_windiss", LINK_OS_WINDISS_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ @@ -1343,7 +1277,6 @@ ncrtn.o%s" { "cpp_os_gnu", CPP_OS_GNU_SPEC }, \ { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ - { "cpp_os_vxworks", CPP_OS_VXWORKS_SPEC }, \ { "cpp_os_windiss", CPP_OS_WINDISS_SPEC }, \ { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, diff --git a/gcc/config/rs6000/t-rs6000-c-rule b/gcc/config/rs6000/t-rs6000-c-rule index a768fb5b0ea..b9a92dd9f83 100644 --- a/gcc/config/rs6000/t-rs6000-c-rule +++ b/gcc/config/rs6000/t-rs6000-c-rule @@ -1,4 +1,5 @@ rs6000-c.o: $(srcdir)/config/rs6000/rs6000-c.c \ $(srcdir)/config/rs6000/rs6000-protos.h \ - $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(CPPLIB_H) $(TM_P_H) c-pragma.h errors.h - $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(CPPLIB_H) \ + $(TM_P_H) c-pragma.h errors.h coretypes.h $(TM_H) + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/rs6000/rs6000-c.c diff --git a/gcc/config/rs6000/t-vxworks b/gcc/config/rs6000/t-vxworks new file mode 100644 index 00000000000..e89e47b8d09 --- /dev/null +++ b/gcc/config/rs6000/t-vxworks @@ -0,0 +1,10 @@ +# Multilibs for VxWorks. + +MULTILIB_OPTIONS = t403/t405/t440/t603/t604/t860 +MULTILIB_DIRNAMES = PPC403gnu PPC405gnu PPC440gnu \ + PPC603gnu PPC604gnu PPC860gnu + +MULTILIB_MATCHES = t604= + +# Put vxlib.c back in LIB2FUNCS_EXTRA (t-ppccomm clobbers it). +LIB2FUNCS_EXTRA += $(srcdir)/config/vxlib.c diff --git a/gcc/config/rs6000/vxppc.h b/gcc/config/rs6000/vxppc.h deleted file mode 100644 index 91250a68909..00000000000 --- a/gcc/config/rs6000/vxppc.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Definitions of target machine for GNU compiler. Vxworks PowerPC version. - Copyright (C) 1996, 2000 Free Software Foundation, Inc. - -This file is part of GNU CC. - -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -/* This file just exists to give specs for the PowerPC running on VxWorks. */ - -/* Reset defaults */ -#undef CPP_OS_DEFAULT_SPEC -#define CPP_OS_DEFAULT_SPEC "%(cpp_os_vxworks)" - -#undef LIB_DEFAULT_SPEC -#define LIB_DEFAULT_SPEC "%(lib_vxworks)" - -#undef STARTFILE_DEFAULT_SPEC -#define STARTFILE_DEFAULT_SPEC "%(startfile_vxworks)" - -#undef ENDFILE_DEFAULT_SPEC -#define ENDFILE_DEFAULT_SPEC "%(endfile_vxworks)" - -#undef LINK_START_DEFAULT_SPEC -#define LINK_START_DEFAULT_SPEC "%(link_start_vxworks)" - -#undef LINK_OS_DEFAULT_SPEC -#define LINK_OS_DEFAULT_SPEC "%(link_os_vxworks)" - -#undef TARGET_OS_CPP_BUILTINS -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__vxworks"); \ - builtin_define ("__vxworks__"); \ - builtin_assert ("system=vxworks"); \ - builtin_assert ("system=embedded"); \ - builtin_assert ("cpu=powerpc"); \ - builtin_assert ("machine=powerpc"); \ - } \ - while (0) - -/* We use stabs-in-elf for debugging */ -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h new file mode 100644 index 00000000000..dddd26d8d5e --- /dev/null +++ b/gcc/config/rs6000/vxworks.h @@ -0,0 +1,81 @@ +/* Definitions of target machine for GNU compiler. Vxworks PowerPC version. + Copyright (C) 1996, 2000, 2002 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* N.B. Only big endian PPC is supported by VxWorks. */ + +#undef CPP_PREDEFINES +#define CPP_PREDEFINES \ + "-D__vxworks -D__vxworks__ -D_BIG_ENDIAN -D__BIG_ENDIAN__" + +/* We have to kill off the entire specs set created by rs6000/sysv4.h + and substitute our own set. The top level vxworks.h has done some + of this for us. */ + +#undef SUBTARGET_EXTRA_SPECS +#undef CPP_SPEC +#undef CC1_SPEC +#undef ASM_SPEC + +#define SUBTARGET_EXTRA_SPECS /* none needed */ + +#define CPP_SPEC \ +"-DCPU_FAMILY=PPC -D__ppc -D__EABI__ -D__ELF__ \ + %{t403: -DCPU=PPC403 -D_SOFT_FLOAT ; \ + t405: -DCPU=PPC405 -D_SOFT_FLOAT ; \ + t440: -DCPU=PPC440 -D_SOFT_FLOAT ; \ + t603: -DCPU=PPC603 ; \ + t604: -DCPU=PPC604 ; \ + t860: -DCPU=PPC860 -D_SOFT_FLOAT ; \ + : -DCPU=PPC604} \ + %{!msoft-float:-D__hardfp} \ + %{fpic: -D__PIC__=1 -D__pic__=1 ; \ + fPIC: -D__PIC__=2 -D__pic__=2 } \ + %(cpp_cpu)" + +/* N.B. GCC does not currently support the 440 processor as distinct + from the 405 series. */ +#define CC1_SPEC \ +"%{t403: -mcpu=403 -mstrict-align ; \ + t405: -mcpu=405 -mstrict-align ; \ + t440: -mcpu=405 -mstrict-align ; \ + t603: -mcpu=603 -mstrict-align ; \ + t604: -mcpu=604 -mstrict-align ; \ + t860: -mcpu=860 ; \ + : -mcpu=604 -mstrict-align } \ + %{G*} %{mno-sdata:-msdata=none} %{msdata:-msdata=default} \ + %{mlittle|mlittle-endian:-mstrict-align} \ + %{profile: -p} \ + %{fvec:-maltivec} %{fvec-eabi:-maltivec -mabi=altivec}" + +#define ASM_SPEC "%(asm_cpu) \ +%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ +%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ +%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} -mbig" + +#undef MULTILIB_DEFAULTS +#define MULTILIB_DEFAULTS { "t604" } + +/* We can't use .ctors/.dtors sections. */ +#undef TARGET_ASM_OUTPUT_CONSTRUCTOR +#undef TARGET_ASM_OUTPUT_DESTRUCTOR + +/* Nor sdata. */ +#undef SDATA_DEFAULT_SIZE +#define SDATA_DEFAULT_SIZE 0 diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h index 21d74a9e616..64a0dcd45db 100644 --- a/gcc/config/rs6000/xcoff.h +++ b/gcc/config/rs6000/xcoff.h @@ -325,12 +325,6 @@ toc_section () \ } \ } -/* This is how to output an internal numbered label where - PREFIX is the class of label and NUM is the number within the class. */ - -#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ - fprintf (FILE, "%s..%u:\n", (PREFIX), (unsigned) (NUM)) - /* This is how to output an internal label prefix. rs6000.c uses this when generating traceback tables. */ @@ -338,11 +332,11 @@ toc_section () \ fprintf (FILE, "%s..", PREFIX) /* This is how to output a label for a jump table. Arguments are the same as - for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is + for (*targetm.asm_out.internal_label), except the insn for the jump table is passed. */ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ -{ ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } +{ ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); } /* This is how to store into the string LABEL the symbol_ref name of an internal numbered label where |