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
This commit is contained in:
Eric Christopher 2002-06-06 01:25:16 +00:00
parent 5d3dfc3ac1
commit 3300516226
8 changed files with 58 additions and 662 deletions

View File

@ -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>

View File

@ -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

View File

@ -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. */

View File

@ -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))

View File

@ -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 \

View File

@ -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 */

View File

@ -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 */

View File

@ -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. */