diff options
author | Eric Christopher <echristo@gcc.gnu.org> | 2002-06-06 01:25:16 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gcc.gnu.org> | 2002-06-06 01:25:16 +0000 |
commit | 33005162262a89f7dfd60e3e402c57d23330edfd (patch) | |
tree | a7fa60e79e389c8dd2c787bac815437aa9e4d1b3 /gcc | |
parent | 5d3dfc3ac1c7fcb4d7a9582d20c21baa8b17b605 (diff) | |
download | gcc-33005162262a89f7dfd60e3e402c57d23330edfd.zip gcc-33005162262a89f7dfd60e3e402c57d23330edfd.tar.gz gcc-33005162262a89f7dfd60e3e402c57d23330edfd.tar.bz2 |
toplev.c: Remove half-pic.
2002-06-05 Eric Christopher <echristo@redhat.com>
* toplev.c: Remove half-pic.
* config/mips/mips.c: Ditto.
* config/mips/mips.h: Ditto. Remove unused defines.
* config/mips/openbsd.h: Update comment to reflect above.
* config/mips/mips.md: Remove half-pic constraints.
* halfpic.h: Delete.
* halfpic.c: Ditto.
From-SVN: r54296
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 44 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 80 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 87 | ||||
-rw-r--r-- | gcc/config/mips/mips.md | 35 | ||||
-rw-r--r-- | gcc/config/mips/openbsd.h | 4 | ||||
-rw-r--r-- | gcc/halfpic.c | 399 | ||||
-rw-r--r-- | gcc/halfpic.h | 67 | ||||
-rw-r--r-- | gcc/toplev.c | 4 |
8 files changed, 58 insertions, 662 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8fa7a5d..042a369 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,18 @@ +2002-06-05 Eric Christopher <echristo@redhat.com> + + * toplev.c: Remove half-pic. + * config/mips/mips.c: Ditto. + * config/mips/mips.h: Ditto. Remove unused defines. + * config/mips/openbsd.h: Update comment to reflect above. + * config/mips/mips.md: Remove half-pic constraints. + * halfpic.h: Delete. + * halfpic.c: Ditto. + 2002-06-05 Jeffrey Law <law@redhat.com> * pa.h (EXTRA_CONSTRAINT, T case): Further refine so that it rejects (mem (lo_sum (reg) (unspec))), but will allow - (mem (lo_sum (reg) (symbol_ref)) for PA2.0. + (mem (lo_sum (reg) (symbol_ref)) for PA2.0. 2002-06-05 Neil Booth <neil@daikokuya.demon.co.uk> @@ -52,7 +62,7 @@ Wed Jun 5 20:42:31 2002 J"orn Rennecke <joern.rennecke@superh.com> (diagnostic_set_info): Declare. * diagnostic.c (report_problematic_module): Rename to - diagnostic_repor_current_module. + diagnostic_repor_current_module. (set_diagnostic_context): Remove. (count_error): Rename to diagnostic_error_count. (error_function_changed): Remove. @@ -215,7 +225,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> 2002-06-03 Geoffrey Keating <geoffk@redhat.com> Merge from pch-branch: - + * gengtype.h (UNION_OR_STRUCT_P): New macro. * gengtype.c (write_gc_structure_fields): Use it. (write_gc_root): Use it here too. @@ -362,7 +372,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> outside ifdefs. (incomplete_types): Likewise. (decl_scope_table): Likewise. - (dwarf2out_init): Don't call ggc_add_tree_varray_root. + (dwarf2out_init): Don't call ggc_add_tree_varray_root. * cfglayout.c (scope_to_insns_finalize): Don't use VARRAY_FREE. * c-tree.h (struct lang_type): Update for change to length specifier. * c-parse.in (yylexstring): Don't use VARRAY_FREE. @@ -436,7 +446,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> to list of includes. * gengtype.c (write_gc_marker_routine_for_structure): Name - the routines 'gt_ggc_mx_*' instead of 'gt_ggc_m_*'. + the routines 'gt_ggc_mx_*' instead of 'gt_ggc_m_*'. (write_gc_types): Arrange for the tests with NULL to be inlined. (write_gc_roots): Update uses of procedure pointers. * ggc-common.c (gt_ggc_mx_rtx_def): Rename from gt_ggc_m_rtx_def. @@ -579,7 +589,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> * c-tree.h (struct lang_identifier): Use gengtype. (union lang_tree_node): New. (c_mark_tree): Delete prototype. - * dwarf2out.c [!DWARF2_DEBUGGING_INFO]: Define dummy + * dwarf2out.c [!DWARF2_DEBUGGING_INFO]: Define dummy dwarf2_debug_hooks. * gengtype-lex.l (IWORD): Allow 'bool'. (ptr_alias): Match. @@ -664,7 +674,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> * config/d30v/d30v.c (d30v_init_expanders): Likewise. * config/arm/arm.c (arm_init_expanders): Likewise. * config/alpha/alpha.c (override_options): Likewise. - * gengtype.h (enum gc_used_enum): Add GC_MAYBE_POINTED_TO. + * gengtype.h (enum gc_used_enum): Add GC_MAYBE_POINTED_TO. * gengtype.c (set_gc_used_type): Handle 'maybe_null' option. (write_gc_structure_fields): Don't handle 'really' option. Handle 'maybe_null' option. @@ -985,7 +995,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> * tree.c: Use gengtype for roots. * tree.h: Use gengtype for roots. * varasm.c: Use gengtype for roots. - + * Makefile.in (GTFILES): Add @all_gtfiles@. * configure: Regenerate. * configure.in: Construct all_gtfiles from the gtfiles definitions @@ -1031,10 +1041,10 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> * config/arm/arm.c (arm_mark_machine_status): Delete. (arm_init_machine_status): Update calling sequence. (arm_init_expanders): Use canonical name for arm_mark_machine_status. - * config/cris/cris.c (cris_init_machine_status): Update + * config/cris/cris.c (cris_init_machine_status): Update calling sequence. * config/d30v/d30v.h (struct machine_function): Use gengtype. - * config/d30v/d30v.c (d30v_init_machine_status): Update + * config/d30v/d30v.c (d30v_init_machine_status): Update calling sequence. (d30v_mark_machine_status): Delete. * config/i386/i386.c: Include gt-i386.h. @@ -1043,12 +1053,12 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> (ix86_mark_machine_status): Delete. (override_options): Use canonical namke for ix86_mark_machine_status. * config/ia64/ia64.h (struct machine_function): Use gengtype. - * config/ia64/ia64.c (ia64_init_machine_status): Update calling + * config/ia64/ia64.c (ia64_init_machine_status): Update calling sequence. (ia64_mark_machine_status): Delete. - (ia64_override_options): Use canonical name for + (ia64_override_options): Use canonical name for ia64_mark_machine_status. - * config/mmix/mmix.c (mmix_init_machine_status): Update calling + * config/mmix/mmix.c (mmix_init_machine_status): Update calling sequence. * config/rs6000/rs6000.c (rs6000_init_machine_status): Likewise. * config/xtensa/xtensa.c (xtensa_init_machine_status): Likewise. @@ -1191,7 +1201,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> Document that the machine_function structures must be allocated using GC. Update mark_machine_status documentation. * function.h: Don't declare free_machine_status. - * function.c (free_machine_status): Don't define. + * function.c (free_machine_status): Don't define. (free_after_compilation): Don't call free_machine_status. (ggc_mark_struct_function): Mark f->machine. Call mark_machine_status only on non-NULL pointers. @@ -1388,7 +1398,7 @@ Tue Jun 4 19:29:42 CEST 2002 Jan Hubicka <jh@suse.cz> 2002-06-03 Gabriel Dos Reis <gdr@codesourcery.com> - * diagnostic.h (diagnostic_count): Move from output_buffer to + * diagnostic.h (diagnostic_count): Move from output_buffer to diagnostic_context. (diagnostic_kind_count): Adjust definition. @@ -1555,7 +1565,7 @@ config/h8300: 2002-06-02 Gabriel Dos Reis <gdr@codesourcery.com> * diagnostic.h (struct diagnostic_context): Add new member - internal_error. + internal_error. (internal_error_function): Remove declaration. * diagnostic.c (internal_error_function): Remove definition.. (internal_error): Adjust use. @@ -1641,7 +1651,7 @@ Sat Jun 1 23:29:51 CEST 2002 Jan Hubicka <jh@suse.cz> 2002-06-01 Daniel Berlin <dberlin@dberlin.org> * tree-inline.c (expand_call_inline): Make the statement - expression we generate have a COMPOUND_STMT. + expression we generate have a COMPOUND_STMT. 2002-06-01 Roger Sayle <roger@eyesopen.com> diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 1f6f71e..fb9bda5 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -54,10 +54,6 @@ Boston, MA 02111-1307, USA. */ #include "target.h" #include "target-def.h" -#ifdef HALF_PIC_DEBUG -#include "halfpic.h" -#endif - #ifdef __GNU_STAB__ #define STAB_CODE_TYPE enum __stab_debug_code #else @@ -272,10 +268,6 @@ rtx branch_cmp[2]; /* what type of branch to use */ enum cmp_type branch_type; -/* Number of previously seen half-pic pointers and references. */ -static int prev_half_pic_ptrs = 0; -static int prev_half_pic_refs = 0; - /* The target cpu for code generation. */ enum processor_type mips_arch; @@ -2277,46 +2269,10 @@ mips_move_1word (operands, insn, unsignedp) else if (code1 == SYMBOL_REF || code1 == CONST) { - if (HALF_PIC_P () && CONSTANT_P (op1) && HALF_PIC_ADDRESS_P (op1)) - { - rtx offset = const0_rtx; - - if (GET_CODE (op1) == CONST) - op1 = eliminate_constant_term (XEXP (op1, 0), &offset); - - if (GET_CODE (op1) == SYMBOL_REF) - { - operands[2] = HALF_PIC_PTR (op1); - - if (TARGET_STATS) - mips_count_memory_refs (operands[2], 1); - - if (INTVAL (offset) == 0) - { - delay = DELAY_LOAD; - ret = (unsignedp && TARGET_64BIT - ? "lwu\t%0,%2" - : "lw\t%0,%2"); - } - else - { - dslots_load_total++; - operands[3] = offset; - if (unsignedp && TARGET_64BIT) - ret = (SMALL_INT (offset) - ? "lwu\t%0,%2%#\n\tadd\t%0,%0,%3" - : "lwu\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]"); - else - ret = (SMALL_INT (offset) - ? "lw\t%0,%2%#\n\tadd\t%0,%0,%3" - : "lw\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]"); - } - } - } - else if (TARGET_MIPS16 - && code1 == CONST - && GET_CODE (XEXP (op1, 0)) == REG - && REGNO (XEXP (op1, 0)) == GP_REG_FIRST + 28) + if (TARGET_MIPS16 + && code1 == CONST + && GET_CODE (XEXP (op1, 0)) == REG + && REGNO (XEXP (op1, 0)) == GP_REG_FIRST + 28) { /* This case arises on the mips16; see mips16_gp_pseudo_reg. */ @@ -5203,10 +5159,6 @@ override_options () if (mips_abi != ABI_32 && mips_abi != ABI_O64) flag_pcc_struct_return = 0; - /* Tell halfpic.c that we have half-pic code if we do. */ - if (TARGET_HALF_PIC) - HALF_PIC_INIT (); - /* -fpic (-KPIC) is the default when TARGET_ABICALLS is defined. We need to set flag_pic so that the LEGITIMATE_PIC_OPERAND_P macro will work. */ /* ??? -non_shared turns off pic code generation, but this is not @@ -6369,11 +6321,6 @@ mips_asm_file_end (file) tree name_tree; struct extern_list *p; - if (HALF_PIC_P ()) - { - HALF_PIC_FINISH (file); - } - if (extern_head) { fputs ("\n", file); @@ -7614,20 +7561,6 @@ mips_output_function_epilogue (file, size) dslots_jump_total, dslots_jump_filled, num_refs[0], num_refs[1], num_refs[2]); - if (HALF_PIC_NUMBER_PTRS > prev_half_pic_ptrs) - { - fprintf (stderr, - " half-pic=%3d", HALF_PIC_NUMBER_PTRS - prev_half_pic_ptrs); - prev_half_pic_ptrs = HALF_PIC_NUMBER_PTRS; - } - - if (HALF_PIC_NUMBER_REFS > prev_half_pic_refs) - { - fprintf (stderr, - " pic-ref=%3d", HALF_PIC_NUMBER_REFS - prev_half_pic_refs); - prev_half_pic_refs = HALF_PIC_NUMBER_REFS; - } - fputc ('\n', stderr); } @@ -8085,11 +8018,6 @@ mips_encode_section_info (decl, first) SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1; } - else if (HALF_PIC_P ()) - { - if (first) - HALF_PIC_ENCODE (decl); - } } /* Return register to use for a function return value with VALTYPE for diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index b17c2a0..5f71b54 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -172,20 +172,6 @@ extern int mips_string_length; /* length of strings for mips16 */ extern void sdata_section PARAMS ((void)); extern void sbss_section PARAMS ((void)); -/* Stubs for half-pic support if not OSF/1 reference platform. */ - -#ifndef HALF_PIC_P -#define HALF_PIC_P() 0 -#define HALF_PIC_NUMBER_PTRS 0 -#define HALF_PIC_NUMBER_REFS 0 -#define HALF_PIC_ENCODE(DECL) -#define HALF_PIC_DECLARE(NAME) -#define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it") -#define HALF_PIC_ADDRESS_P(X) 0 -#define HALF_PIC_PTR(X) X -#define HALF_PIC_FINISH(STREAM) -#endif - /* Macros to silence warnings about numbers being signed in traditional C and unsigned in ISO C when compiled on 32-bit hosts. */ @@ -210,7 +196,7 @@ extern void sbss_section PARAMS ((void)); #define MASK_SOFT_FLOAT 0x00000100 /* software floating point */ #define MASK_FLOAT64 0x00000200 /* fp registers are 64 bits */ #define MASK_ABICALLS 0x00000400 /* emit .abicalls/.cprestore/.cpload */ -#define MASK_HALF_PIC 0x00000800 /* Emit OSF-style pic refs to externs*/ +#define MASK_UNUSED1 0x00000800 /* Unused Mask. */ #define MASK_LONG_CALLS 0x00001000 /* Always call through a register */ #define MASK_64BIT 0x00002000 /* Use 64 bit GP registers and insns */ #define MASK_EMBEDDED_PIC 0x00004000 /* Generate embedded PIC code */ @@ -285,9 +271,6 @@ extern void sbss_section PARAMS ((void)); /* .abicalls, etc from Pyramid V.4 */ #define TARGET_ABICALLS (target_flags & MASK_ABICALLS) - /* OSF pic references to externs */ -#define TARGET_HALF_PIC (target_flags & MASK_HALF_PIC) - /* software floating point */ #define TARGET_SOFT_FLOAT (target_flags & MASK_SOFT_FLOAT) #define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT) @@ -417,10 +400,6 @@ extern void sbss_section PARAMS ((void)); N_("Use Irix PIC")}, \ {"no-abicalls", -MASK_ABICALLS, \ N_("Don't use Irix PIC")}, \ - {"half-pic", MASK_HALF_PIC, \ - N_("Use OSF PIC")}, \ - {"no-half-pic", -MASK_HALF_PIC, \ - N_("Don't use OSF PIC")}, \ {"long-calls", MASK_LONG_CALLS, \ N_("Use indirect calls")}, \ {"no-long-calls", -MASK_LONG_CALLS, \ @@ -506,11 +485,7 @@ extern void sbss_section PARAMS ((void)); #endif #ifndef TARGET_ENDIAN_DEFAULT -#ifndef DECSTATION #define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN -#else -#define TARGET_ENDIAN_DEFAULT 0 -#endif #endif #ifndef MIPS_ISA_DEFAULT @@ -780,35 +755,6 @@ while (0) /* Show we can debug even without a frame pointer. */ #define CAN_DEBUG_WITHOUT_FP -/* Complain about missing specs and predefines that should be defined in each - of the target tm files to override the defaults. This is mostly a place- - holder until I can get each of the files updated [mm]. */ - -#if defined(OSF_OS) \ - || defined(DECSTATION) \ - || defined(SGI_TARGET) \ - || defined(MIPS_NEWS) \ - || defined(MIPS_SYSV) \ - || defined(MIPS_SVR4) \ - || defined(MIPS_BSD43) - -#ifndef CPP_PREDEFINES - #error "Define CPP_PREDEFINES in the appropriate tm.h file" -#endif - -#ifndef LIB_SPEC - #error "Define LIB_SPEC in the appropriate tm.h file" -#endif - -#ifndef STARTFILE_SPEC - #error "Define STARTFILE_SPEC in the appropriate tm.h file" -#endif - -#ifndef MACHINE_TYPE - #error "Define MACHINE_TYPE in the appropriate tm.h file" -#endif -#endif - /* Tell collect what flags to pass to nm. */ #ifndef NM_FLAGS #define NM_FLAGS "-Bn" @@ -1001,10 +947,6 @@ extern int mips_abi; %{mint64|mlong64|mlong32:-mexplicit-type-size }\ %{mgp32: %{mfp64:%emay not use both -mgp32 and -mfp64} %{!mfp32: -mfp32}} \ %{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}} \ -%{pic-none: -mno-half-pic} \ -%{pic-lib: -mhalf-pic} \ -%{pic-extern: -mhalf-pic} \ -%{pic-calls: -mhalf-pic} \ %{save-temps: } \ %(subtarget_cc1_spec) \ %(cc1_cpu_spec)" @@ -2234,7 +2176,6 @@ extern enum reg_class mips_char_to_class[256]; `Q' is for mips16 GP relative constants `R' is for memory references which take 1 word for the instruction. - `S' is for references to extern items which are PIC for OSF/rose. `T' is for memory addresses that can be used to load two words. */ #define EXTRA_CONSTRAINT(OP,CODE) \ @@ -2243,8 +2184,6 @@ extern enum reg_class mips_char_to_class[256]; && mips16_gp_offset_p (OP)) \ : (GET_CODE (OP) != MEM) ? FALSE \ : ((CODE) == 'R') ? simple_memory_operand (OP, GET_MODE (OP)) \ - : ((CODE) == 'S') ? (HALF_PIC_P () && CONSTANT_P (OP) \ - && HALF_PIC_ADDRESS_P (OP)) \ : FALSE) /* Given an rtx X being reloaded into a reg required to be @@ -3092,14 +3031,13 @@ typedef struct mips_args { `la $5,s;sw $4,70000($5)' via LEGITIMIZE_ADDRESS. */ /* ??? SGI Irix 6 assembler fails for CONST address, so reject them. */ #define CONSTANT_ADDRESS_P(X) \ - ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ + (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH \ || (GET_CODE (X) == CONST \ && ! (flag_pic && pic_address_needs_scratch (X)) \ && (mips_abi == ABI_32 \ || mips_abi == ABI_O64 \ - || mips_abi == ABI_EABI))) \ - && (!HALF_PIC_P () || !HALF_PIC_ADDRESS_P (X))) + || mips_abi == ABI_EABI))) /* Define this, so that when PIC, reload won't try to reload invalid addresses which require two reload registers. */ @@ -3354,13 +3292,6 @@ typedef struct mips_args { #define FUNCTION_MODE (Pmode == DImode ? DImode : SImode) -/* Define TARGET_MEM_FUNCTIONS if we want to use calls to memcpy and - memset, instead of the BSD functions bcopy and bzero. */ - -#if defined(MIPS_SYSV) || defined(OSF_OS) -#define TARGET_MEM_FUNCTIONS -#endif - /* A part of a C `switch' statement that describes the relative costs of constant RTL expressions. It must contain `case' @@ -4161,7 +4092,7 @@ typedef struct mips_args { ALL_COP_ADDITIONAL_REGISTER_NAMES \ } -/* This is meant to be redefined in the host dependent files. It is a +/* This is meant to be redefined in the host dependent files. It is a set of alternative names and regnums for mips coprocessors. */ #define ALL_COP_ADDITIONAL_REGISTER_NAMES @@ -4282,8 +4213,7 @@ while (0) LM[0-9]+ Silicon Graphics/ECOFF stabs label before each stmt. $Lb[0-9]+ Begin blocks for MIPS debug support $Lc[0-9]+ Label for use in s<xx> operation. - $Le[0-9]+ End blocks for MIPS debug support - $Lp\..+ Half-pic labels. */ + $Le[0-9]+ End blocks for MIPS debug support */ /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. @@ -4316,7 +4246,6 @@ do { \ do \ { \ mips_declare_object (STREAM, NAME, "", ":\n", 0); \ - HALF_PIC_DECLARE (NAME); \ } \ while (0) @@ -4393,10 +4322,10 @@ do { \ emitting the label is moved to function_prologue, so that we can get the line number correctly emitted before the .ent directive, and after any .file directives. */ - +/* #undef ASM_DECLARE_FUNCTION_NAME -#define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ - HALF_PIC_DECLARE (NAME) +#define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) +*/ /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 118c159..83ae30e 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -4938,7 +4938,7 @@ move\\t%0,%z4\\n\\ if ((INTVAL (offset) & 7) == 0 && (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx)) - return \"sd\\t%1,%0\"; + return \"sd\\t%z1,%0\"; return \"usd\\t%z1,%0\"; }" @@ -5131,17 +5131,17 @@ move\\t%0,%z4\\n\\ "") (define_insn "movdi_internal2" - [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,d,R,m,*x,*d,*x,*a,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") - (match_operand:DI 1 "movdi_operand" "d,S,IKL,Mnis,R,m,dJ,dJ,J,*x,*d,*J,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] + [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,d,R,m,*x,*d,*x,*a,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") + (match_operand:DI 1 "movdi_operand" "d,IKL,Mnis,R,m,dJ,dJ,J,*x,*d,*J,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] "TARGET_64BIT && !TARGET_MIPS16 && (register_operand (operands[0], DImode) || se_register_operand (operands[1], DImode) || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0) || operands[1] == CONST0_RTX (DImode))" "* return mips_move_2words (operands, insn); " - [(set_attr "type" "move,load,arith,arith,load,load,store,store,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") + [(set_attr "type" "move,arith,arith,load,load,store,store,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") (set_attr "mode" "DI") - (set_attr "length" "4,8,4,8,4,8,4,8,4,4,4,8,8,8,8,8,8,8")]) + (set_attr "length" "4,4,8,4,8,4,8,4,4,4,8,8,8,8,8,8,8")]) (define_insn "" [(set (match_operand:DI 0 "nonimmediate_operand" "=d,y,d,d,d,d,d,d,R,m,*d") @@ -5517,7 +5517,7 @@ move\\t%0,%z4\\n\\ (set_attr "mode" "SI") (set_attr_alternative "length" - [(if_then_else + [(if_then_else (lt (symbol_ref "(unsigned HOST_WIDE_INT) INTVAL (operands[0])") (const_int 1024)) (const_int 4) @@ -5527,28 +5527,28 @@ move\\t%0,%z4\\n\\ ;; in FP registers (off by default, use -mdebugh to enable). (define_insn "movsi_internal1" - [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,R,m,*d,*f*z,*f,*f,*f,*R,*m,*x,*x,*d,*d,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") - (match_operand:SI 1 "move_operand" "d,S,IKL,Mnis,R,m,dJ,dJ,*f*z,*d,*f,*R,*m,*f,*f,J,*d,*x,*a,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] + [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,R,m,*d,*f*z,*f,*f,*f,*R,*m,*x,*x,*d,*d,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") + (match_operand:SI 1 "move_operand" "d,IKL,Mnis,R,m,dJ,dJ,*f*z,*d,*f,*R,*m,*f,*f,J,*d,*x,*a,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] "TARGET_DEBUG_H_MODE && !TARGET_MIPS16 && (register_operand (operands[0], SImode) || register_operand (operands[1], SImode) || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))" "* return mips_move_1word (operands, insn, FALSE);" - [(set_attr "type" "move,load,arith,arith,load,load,store,store,xfer,xfer,move,load,load,store,store,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") + [(set_attr "type" "move,arith,arith,load,load,store,store,xfer,xfer,move,load,load,store,store,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") (set_attr "mode" "SI") - (set_attr "length" "4,8,4,8,4,8,4,8,4,4,4,4,8,4,8,4,4,4,4,4,4,8,4,4,8")]) + (set_attr "length" "4,4,8,4,8,4,8,4,4,4,4,8,4,8,4,4,4,4,4,4,8,4,4,8")]) (define_insn "movsi_internal2" - [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,d,R,m,*d,*z,*x,*d,*x,*d,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") - (match_operand:SI 1 "move_operand" "d,S,IKL,Mnis,R,m,dJ,dJ,*z,*d,J,*x,*d,*a,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] + [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,d,d,R,m,*d,*z,*x,*d,*x,*d,*B*C*D,*B*C*D,*B*C*D,*d,*m,*R") + (match_operand:SI 1 "move_operand" "d,IKL,Mnis,R,m,dJ,dJ,*z,*d,J,*x,*d,*a,*d,*m,*R,*B*C*D,*B*C*D,*B*C*D"))] "!TARGET_DEBUG_H_MODE && !TARGET_MIPS16 && (register_operand (operands[0], SImode) || register_operand (operands[1], SImode) || (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == 0))" "* return mips_move_1word (operands, insn, FALSE);" - [(set_attr "type" "move,load,arith,arith,load,load,store,store,xfer,xfer,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") + [(set_attr "type" "move,arith,arith,load,load,store,store,xfer,xfer,hilo,hilo,hilo,hilo,xfer,load,load,xfer,store,store") (set_attr "mode" "SI") - (set_attr "length" "4,8,4,8,4,8,4,8,4,4,4,4,4,4,4,4,8,4,4,8")]) + (set_attr "length" "4,4,8,4,8,4,8,4,4,4,4,4,4,4,4,8,4,4,8")]) ;; This is the mips16 movsi instruction. We accept a small integer as ;; the source if the destination is a GP memory reference. This is @@ -5559,8 +5559,8 @@ move\\t%0,%z4\\n\\ ;; into a register. (define_insn "" - [(set (match_operand:SI 0 "nonimmediate_operand" "=d,y,d,d,d,d,d,d,d,R,m,*d,*d") - (match_operand:SI 1 "move_operand" "d,d,y,S,K,N,s,R,m,d,d,*x,*a"))] + [(set (match_operand:SI 0 "nonimmediate_operand" "=d,y,d,d,d,d,d,d,R,m,*d,*d") + (match_operand:SI 1 "move_operand" "d,d,y,K,N,s,R,m,d,d,*x,*a"))] "TARGET_MIPS16 && (register_operand (operands[0], SImode) || register_operand (operands[1], SImode) @@ -5572,13 +5572,12 @@ move\\t%0,%z4\\n\\ && (SMALL_INT (operands[1]) || SMALL_INT_UNSIGNED (operands[1]))))" "* return mips_move_1word (operands, insn, FALSE);" - [(set_attr "type" "move,move,move,load,arith,arith,arith,load,load,store,store,hilo,hilo") + [(set_attr "type" "move,move,move,arith,arith,arith,load,load,store,store,hilo,hilo") (set_attr "mode" "SI") (set_attr_alternative "length" [(const_int 4) (const_int 4) (const_int 4) - (const_int 8) (if_then_else (match_operand:VOID 1 "m16_uimm8_1" "") (const_int 4) (const_int 8)) diff --git a/gcc/config/mips/openbsd.h b/gcc/config/mips/openbsd.h index 5fc062b..6ed3440 100644 --- a/gcc/config/mips/openbsd.h +++ b/gcc/config/mips/openbsd.h @@ -35,7 +35,7 @@ Boston, MA 02111-1307, USA. */ #define LIB_SPEC OBSD_LIB_SPEC /* By default, OpenBSD mips is little endian. This is important to set - here as mips/mips.h defaults to big endian unless DECSTATION. */ + here as mips/mips.h defaults to big endian. */ #ifndef TARGET_ENDIAN_DEFAULT #define TARGET_ENDIAN_DEFAULT 0 #endif @@ -81,7 +81,7 @@ Boston, MA 02111-1307, USA. */ /* Controlling the compilation driver. */ -/* LINK_SPEC appropriate for OpenBSD: support for GCC options +/* LINK_SPEC appropriate for OpenBSD: support for GCC options -static, -assert, and -nostdlib. Dynamic loader control. */ #undef LINK_SPEC #define LINK_SPEC \ diff --git a/gcc/halfpic.c b/gcc/halfpic.c deleted file mode 100644 index f491314..0000000 --- a/gcc/halfpic.c +++ /dev/null @@ -1,399 +0,0 @@ -/* OSF/rose half-pic support functions. - Copyright (C) 1992, 1997, 1998, 1999 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC 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. - -GCC 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -/* The OSF/rose half-pic model assumes that the non-library code does - not need to have full PIC (position independent code), but rather, - that pointers to external references are put into the data section - and dereferenced as normal pointers. References to static data does - not need to be PIC-ized. - - Another optimization is to have the compiler know what symbols are - in the shared libraries, and to only lay down the pointers to - things which in the library proper. */ - -#include "config.h" - -#ifdef HALF_PIC_INIT - -#include "system.h" -#include "tree.h" -#include "rtl.h" -#include "expr.h" -#include "output.h" -#include "obstack.h" -#include "halfpic.h" - -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free - -int flag_half_pic = 0; /* Global half-pic flag. */ -int half_pic_number_ptrs = 0; /* # distinct pointers found */ -int half_pic_number_refs = 0; /* # half-pic references */ -int (*ptr_half_pic_address_p) PARAMS ((rtx)) = half_pic_address_p; - -/* Obstack to hold generated pic names. */ -static struct obstack half_pic_obstack; - -/* List of pointers created to pic references. */ - -struct all_refs { - struct all_refs *hash_next; /* next name in hash chain */ - struct all_refs *next; /* next name created */ - int external_p; /* name is an external reference */ - int pointer_p; /* pointer created. */ - const char *ref_name; /* reference name to ptr to real_name */ - int ref_len; /* reference name length */ - const char *real_name; /* real function/data name */ - int real_len; /* strlen (real_name) */ -}; - -static struct all_refs *half_pic_names; - -static const char *half_pic_prefix; -static int half_pic_prefix_len; - - -/* Return the hash bucket of a name or NULL. The hash chain is - organized as a self reorganizing circularly linked chain. It is - assumed that any name passed to use will never be reallocated. For - names in SYMBOL_REF's this is true, because the names are allocated - on the permanent obstack. */ - -#ifndef MAX_HASH_TABLE -#define MAX_HASH_TABLE 1009 -#endif - -#define HASHBITS 30 - -static struct all_refs *half_pic_hash PARAMS ((const char *, int, int)); - -static struct all_refs * -half_pic_hash (name, len, create_p) - const char *name; /* name to hash */ - int len; /* length of the name (or 0 to call strlen) */ - int create_p; /* != 0 to create new hash bucket if new */ -{ - static struct all_refs *hash_table[MAX_HASH_TABLE]; - static struct all_refs zero_all_refs; - - const unsigned char *uname; - int hash; - int i; - int ch; - struct all_refs *first; - struct all_refs *ptr; - - if (len == 0) - len = strlen (name); - - /* Compute hash code */ - uname = (const unsigned char *)name; - ch = uname[0]; - hash = len * 613 + ch; - for (i = 1; i < len; i += 2) - hash = (hash * 613) + uname[i]; - - hash &= (1 << HASHBITS) - 1; - hash %= MAX_HASH_TABLE; - - /* See if the name is in the hash table. */ - ptr = first = hash_table[hash]; - if (ptr) - { - do - { - if (len == ptr->real_len - && ch == *(ptr->real_name) - && !strcmp (name, ptr->real_name)) - { - hash_table[hash] = ptr; - return ptr; - } - - ptr = ptr->hash_next; - } - while (ptr != first); - } - - /* name not in hash table. */ - if (!create_p) - return (struct all_refs *) 0; - - ptr = (struct all_refs *) obstack_alloc (&half_pic_obstack, sizeof (struct all_refs)); - *ptr = zero_all_refs; - - ptr->real_name = name; - ptr->real_len = len; - - /* Update circular links. */ - if (first == (struct all_refs *) 0) - ptr->hash_next = ptr; - - else - { - ptr->hash_next = first->hash_next; - first->hash_next = ptr; - } - - hash_table[hash] = ptr; - return ptr; -} - - -/* Do any half-pic initializations. */ - -void -half_pic_init () -{ - flag_half_pic = TRUE; - half_pic_prefix = HALF_PIC_PREFIX; - half_pic_prefix_len = strlen (half_pic_prefix); - obstack_init (&half_pic_obstack); -} - - -/* Write out all pointers to pic references. */ - -void -half_pic_finish (stream) - FILE *stream; -{ - struct all_refs *p = half_pic_names; - - if (!p) - return; - - data_section (); - for (; p != 0; p = p->next) - { - /* Emit the pointer if used. */ - if (p->pointer_p) - { - ASM_OUTPUT_LABEL (stream, p->ref_name); - assemble_aligned_integer (POINTER_SIZE / BITS_PER_UNIT, - gen_rtx_SYMBOL_REF (Pmode, p->real_name)); - } - } -} - - -/* Encode in a declaration whether or not it is half-pic. */ - -void -half_pic_encode (decl) - tree decl; -{ - enum tree_code code = TREE_CODE (decl); - tree asm_name; - struct all_refs *ptr; - - if (!flag_half_pic) - return; - - if (code != VAR_DECL && code != FUNCTION_DECL) - return; - - asm_name = DECL_ASSEMBLER_NAME (decl); - - if (!asm_name) - return; - -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - { - fprintf (stderr, "\n========== Half_pic_encode %.*s\n", - IDENTIFIER_LENGTH (asm_name), - IDENTIFIER_POINTER (asm_name)); - debug_tree (decl); - } -#endif - - /* If this is not an external reference, it can't be half-pic. */ - if (!DECL_EXTERNAL (decl) && (code != VAR_DECL || !TREE_PUBLIC (decl))) - return; - - ptr = half_pic_hash (IDENTIFIER_POINTER (asm_name), - IDENTIFIER_LENGTH (asm_name), - TRUE); - - ptr->external_p = TRUE; - -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - fprintf (stderr, "\n%.*s is half-pic\n", - IDENTIFIER_LENGTH (asm_name), - IDENTIFIER_POINTER (asm_name)); -#endif -} - - -/* Mark that an object is now local, and no longer needs half-pic. */ - -void -half_pic_declare (name) - const char *name; -{ - struct all_refs *ptr; - - if (!flag_half_pic) - return; - - ptr = half_pic_hash (name, 0, FALSE); - if (!ptr) - return; - - ptr->external_p = FALSE; - -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - fprintf (stderr, "\n========== Half_pic_declare %s\n", name); -#endif -} - - -/* Mark that an object is explicitly external. */ - -void -half_pic_external (name) - const char *name; -{ - struct all_refs *ptr; - - if (!flag_half_pic) - return; - - ptr = half_pic_hash (name, 0, TRUE); - if (!ptr) - return; - - ptr->external_p = TRUE; - -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - fprintf (stderr, "\n========== Half_pic_external %s\n", name); -#endif -} - - -/* Return whether an address is half-pic. */ - -int -half_pic_address_p (addr) - rtx addr; -{ - const char *name; - int len; - struct all_refs *ptr; - - if (!flag_half_pic) - return FALSE; - - switch (GET_CODE (addr)) - { - default: - break; - - case CONST: - { - rtx offset = const0_rtx; - addr = eliminate_constant_term (XEXP (addr, 0), &offset); - if (GET_CODE (addr) != SYMBOL_REF) - return FALSE; - } - /* fall through */ - - case SYMBOL_REF: - name = XSTR (addr, 0); - -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - fprintf (stderr, "\n========== Half_pic_address_p %s\n", name); -#endif - - /* If this is a label, it will have a '*' in front of it. */ - if (name[0] == '*') - return FALSE; - - /* If this is a reference to the actual half-pic pointer, it - is obviously not half-pic. */ - - len = strlen (name); - if (len > half_pic_prefix_len - && half_pic_prefix[0] == name[0] - && !strncmp (name, half_pic_prefix, half_pic_prefix_len)) - return FALSE; - - ptr = half_pic_hash (name, len, FALSE); - if (ptr == (struct all_refs *) 0) - return FALSE; - - if (ptr->external_p) - { -#ifdef HALF_PIC_DEBUG - if (HALF_PIC_DEBUG) - fprintf (stderr, "%s is half-pic\n", name); -#endif - return TRUE; - } - } - - return FALSE; -} - - -/* Return the name of the pointer to the PIC function, allocating - it if need be. */ - -struct rtx_def * -half_pic_ptr (operand) - rtx operand; -{ - const char *name; - struct all_refs *p; - int len; - - if (GET_CODE (operand) != SYMBOL_REF) - return operand; - - name = XSTR (operand, 0); - len = strlen (name); - p = half_pic_hash (name, len, FALSE); - if (p == (struct all_refs *) 0 || !p->external_p) - return operand; - - if (!p->pointer_p) - { /* first time, create pointer */ - obstack_grow (&half_pic_obstack, half_pic_prefix, half_pic_prefix_len); - obstack_grow (&half_pic_obstack, name, len+1); - - p->next = half_pic_names; - p->ref_name = (char *) obstack_finish (&half_pic_obstack); - p->ref_len = len + half_pic_prefix_len; - p->pointer_p = TRUE; - - half_pic_names = p; - half_pic_number_ptrs++; - } - - half_pic_number_refs++; - return gen_rtx_SYMBOL_REF (Pmode, p->ref_name); -} - -#endif /* HALF_PIC_INIT */ diff --git a/gcc/halfpic.h b/gcc/halfpic.h deleted file mode 100644 index 37bc499..0000000 --- a/gcc/halfpic.h +++ /dev/null @@ -1,67 +0,0 @@ -/* OSF/rose half-pic support definitions. - Copyright (C) 1992, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC 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. - -GCC 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -#ifndef NO_HALF_PIC - -/* Declare the variable flag_half_pic as 'int' instead of 'extern - int', so that BSS variables are created (even though this is not - strict ANSI). This is because rtl.c now refers to the - CONSTANT_ADDRESS_P macro, which in turn refers to flag_half_pic, - and wants to call half_pic_address_p, whose address we also store - in a BSS variable. This way, the gen* programs won't get - unknown symbol errors when being linked (flag_half_pic will never - be true in the gen* programs). */ - -int flag_half_pic; /* Global half-pic flag. */ -int (*ptr_half_pic_address_p) PARAMS ((struct rtx_def *)); /* ptr to half_pic_address_p () */ - -extern int half_pic_number_ptrs; /* # distinct pointers found */ -extern int half_pic_number_refs; /* # half-pic references */ -extern void half_pic_encode PARAMS ((union tree_node *)); /* encode whether half-pic */ -extern void half_pic_declare PARAMS ((const char *)); /* declare object local */ -extern void half_pic_external PARAMS ((const char *)); /* declare object external */ -extern void half_pic_init PARAMS ((void)); /* half_pic initialization */ -extern int half_pic_address_p PARAMS ((struct rtx_def *)); /* true if an address is half-pic */ -extern struct rtx_def *half_pic_ptr PARAMS ((struct rtx_def *)); /* return RTX for half-pic pointer */ -#ifdef BUFSIZ -extern void half_pic_finish PARAMS ((FILE *)); /* half_pic termination */ -#endif - -/* Macros to provide access to the half-pic stuff (so they can easily - be stubbed out. */ - -#define HALF_PIC_P() (flag_half_pic) -#define HALF_PIC_NUMBER_PTRS (half_pic_number_ptrs) -#define HALF_PIC_NUMBER_REFS (half_pic_number_refs) - -#define HALF_PIC_ENCODE(DECL) half_pic_encode (DECL) -#define HALF_PIC_DECLARE(NAME) half_pic_declare (NAME) -#define HALF_PIC_EXTERNAL(NAME) half_pic_external (NAME) -#define HALF_PIC_INIT() half_pic_init () -#define HALF_PIC_FINISH(STREAM) half_pic_finish (STREAM) -#define HALF_PIC_ADDRESS_P(X) ((*ptr_half_pic_address_p) (X)) -#define HALF_PIC_PTR(X) half_pic_ptr (X) - -/* Prefix for half-pic names */ -#ifndef HALF_PIC_PREFIX -#define HALF_PIC_PREFIX "__pic_" -#endif - -#endif /* NO_HALF_PIC */ diff --git a/gcc/toplev.c b/gcc/toplev.c index 9dd6468..7ac28c0f 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -88,10 +88,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "xcoffout.h" /* Needed for external data declarations for e.g. AIX 4.x. */ #endif - -#ifdef HALF_PIC_DEBUG -#include "halfpic.h" -#endif /* Carry information from ASM_DECLARE_OBJECT_NAME to ASM_FINISH_DECLARE_OBJECT. */ |