* pa-protos.h: New file.
* pa.c: Include recog.h and tm_p.h.
(compute_zdepwi_operands, compute_movstrsi_length,
remove_useless_addtr_insns, store_reg, load_reg, set_reg_plus_d,
find_addr_reg, import_milli): Add static prototypes.
(pa_cpu_string, pa_arch_string): Constify a char*.
(legitimize_pic_address): Pass argument `mode' to pic_label_operand.
(read_only_operand): Add argument `mode'.
(singlemove_string, output_move_double, output_fp_move_double,
output_block_move, output_and, output_ior, output_ascii,
remove_useless_addtr_insns, milli_names, output_mul_insn,
output_div_insn, output_mod_insn, output_arg_descriptor,
output_cbranch, output_bb, output_bvb, output_dbra, ,
output_millicode_call, output_call, hppa_encode_label,
output_parallel_movb, output_parallel_addb): Constify a char*.
(hppa_va_start): Mark parameter `stdarg_p' with ATTRIBUTE_UNUSED.
(output_parallel_addb): Remove extra arg to `constrain_operands'
* pa.h: Move all prototypes to pa-protos.h.
(pa_cpu_string, pa_arch_string): Constify a char*.
(LEGITIMIZE_ADDRESS): Call `symbolic_operand' with mode argument.
* pa.md: Call `function_label_operand' with mode argument.
Likewise for `read_only_operand'.
Fix nesting of parens in call to `symbolic_operand'.
From-SVN: r31331
+2000-01-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * pa-protos.h: New file.
+
+ * pa.c: Include recog.h and tm_p.h.
+ (compute_zdepwi_operands, compute_movstrsi_length,
+ remove_useless_addtr_insns, store_reg, load_reg, set_reg_plus_d,
+ find_addr_reg, import_milli): Add static prototypes.
+ (pa_cpu_string, pa_arch_string): Constify a char*.
+ (legitimize_pic_address): Pass argument `mode' to pic_label_operand.
+ (read_only_operand): Add argument `mode'.
+ (singlemove_string, output_move_double, output_fp_move_double,
+ output_block_move, output_and, output_ior, output_ascii,
+ remove_useless_addtr_insns, milli_names, output_mul_insn,
+ output_div_insn, output_mod_insn, output_arg_descriptor,
+ output_cbranch, output_bb, output_bvb, output_dbra, ,
+ output_millicode_call, output_call, hppa_encode_label,
+ output_parallel_movb, output_parallel_addb): Constify a char*.
+ (hppa_va_start): Mark parameter `stdarg_p' with ATTRIBUTE_UNUSED.
+ (output_parallel_addb): Remove extra arg to `constrain_operands'
+
+ * pa.h: Move all prototypes to pa-protos.h.
+ (pa_cpu_string, pa_arch_string): Constify a char*.
+ (LEGITIMIZE_ADDRESS): Call `symbolic_operand' with mode argument.
+
+ * pa.md: Call `function_label_operand' with mode argument.
+ Likewise for `read_only_operand'.
+ Fix nesting of parens in call to `symbolic_operand'.
+
2000-01-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* i860-protos.h: New file.
--- /dev/null
+/* Prototypes for pa.c functions used in the md file & elsewhere.
+ Copyright (C) 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. */
+
+#ifdef RTX_CODE
+/* Prototype function used in MACHINE_DEPENDENT_REORG macro. */
+extern void pa_reorg PARAMS ((rtx));
+
+/* Prototype function used in various macros. */
+extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
+
+/* Used in insn-*.c. */
+extern int following_call PARAMS ((rtx));
+extern int function_label_operand PARAMS ((rtx, enum machine_mode));
+extern int lhs_lshift_cint_operand PARAMS ((rtx, enum machine_mode));
+
+#ifdef TREE_CODE
+extern void hppa_va_start PARAMS ((int, tree, rtx));
+extern rtx hppa_va_arg PARAMS ((tree, tree));
+#endif /* TREE_CODE */
+extern rtx hppa_legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
+
+/* Define functions in pa.c and used in insn-output.c. */
+
+extern const char *output_and PARAMS ((rtx *));
+extern const char *output_ior PARAMS ((rtx *));
+extern const char *output_move_double PARAMS ((rtx *));
+extern const char *output_fp_move_double PARAMS ((rtx *));
+extern const char *output_block_move PARAMS ((rtx *, int));
+extern const char *output_cbranch PARAMS ((rtx *, int, int, int, rtx));
+extern const char *output_bb PARAMS ((rtx *, int, int, int, rtx, int));
+extern const char *output_bvb PARAMS ((rtx *, int, int, int, rtx, int));
+extern const char *output_dbra PARAMS ((rtx *, rtx, int));
+extern const char *output_movb PARAMS ((rtx *, rtx, int, int));
+extern const char *output_parallel_movb PARAMS ((rtx *, int));
+extern const char *output_parallel_addb PARAMS ((rtx *, int));
+extern const char *output_call PARAMS ((rtx, rtx));
+extern const char *output_millicode_call PARAMS ((rtx, rtx));
+extern const char *output_mul_insn PARAMS ((int, rtx));
+extern const char *output_div_insn PARAMS ((rtx *, int, rtx));
+extern const char *output_mod_insn PARAMS ((int, rtx));
+extern const char *singlemove_string PARAMS ((rtx *));
+extern void output_arg_descriptor PARAMS ((rtx));
+extern void output_global_address PARAMS ((FILE *, rtx, int));
+extern void print_operand PARAMS ((FILE *, rtx, int));
+extern rtx legitimize_pic_address PARAMS ((rtx, enum machine_mode, rtx));
+extern struct rtx_def *gen_cmp_fp PARAMS ((enum rtx_code, rtx, rtx));
+extern void hppa_encode_label PARAMS ((rtx, int));
+extern int arith11_operand PARAMS ((rtx, enum machine_mode));
+extern int symbolic_expression_p PARAMS ((rtx));
+extern int hppa_address_cost PARAMS ((rtx));
+extern int symbolic_memory_operand PARAMS ((rtx, enum machine_mode));
+extern int pa_adjust_cost PARAMS ((rtx, rtx, rtx, int));
+extern int pa_adjust_insn_length PARAMS ((rtx, int));
+extern int int11_operand PARAMS ((rtx, enum machine_mode));
+extern int reg_or_cint_move_operand PARAMS ((rtx, enum machine_mode));
+extern int arith5_operand PARAMS ((rtx, enum machine_mode));
+extern int uint5_operand PARAMS ((rtx, enum machine_mode));
+extern int pic_label_operand PARAMS ((rtx, enum machine_mode));
+extern int plus_xor_ior_operator PARAMS ((rtx, enum machine_mode));
+extern int basereg_operand PARAMS ((rtx, enum machine_mode));
+extern int shadd_operand PARAMS ((rtx, enum machine_mode));
+extern int arith_operand PARAMS ((rtx, enum machine_mode));
+extern int read_only_operand PARAMS ((rtx, enum machine_mode));
+extern int move_operand PARAMS ((rtx, enum machine_mode));
+extern int and_operand PARAMS ((rtx, enum machine_mode));
+extern int ior_operand PARAMS ((rtx, enum machine_mode));
+extern int arith32_operand PARAMS ((rtx, enum machine_mode));
+extern int uint32_operand PARAMS ((rtx, enum machine_mode));
+extern int reg_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
+extern int reg_or_0_operand PARAMS ((rtx, enum machine_mode));
+extern int reg_or_0_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
+extern int pre_cint_operand PARAMS ((rtx, enum machine_mode));
+extern int post_cint_operand PARAMS ((rtx, enum machine_mode));
+extern int div_operand PARAMS ((rtx, enum machine_mode));
+extern int int5_operand PARAMS ((rtx, enum machine_mode));
+extern int movb_comparison_operator PARAMS ((rtx, enum machine_mode));
+extern int ireg_or_int5_operand PARAMS ((rtx, enum machine_mode));
+extern int fmpyaddoperands PARAMS ((rtx *));
+extern int fmpysuboperands PARAMS ((rtx *));
+extern int call_operand_address PARAMS ((rtx, enum machine_mode));
+extern int ior_operand PARAMS ((rtx, enum machine_mode));
+extern void emit_bcond_fp PARAMS ((enum rtx_code, rtx));
+extern int emit_move_sequence PARAMS ((rtx *, enum machine_mode, rtx));
+extern int emit_hpdiv_const PARAMS ((rtx *, int));
+extern int is_function_label_plus_const PARAMS ((rtx));
+extern int jump_in_call_delay PARAMS ((rtx));
+extern enum reg_class secondary_reload_class PARAMS ((enum reg_class,
+ enum machine_mode, rtx));
+
+/* Declare functions defined in pa.c and used in templates. */
+
+extern struct rtx_def *return_addr_rtx PARAMS ((int, rtx));
+
+extern int fp_reg_operand PARAMS ((rtx, enum machine_mode));
+extern int arith_double_operand PARAMS ((rtx, enum machine_mode));
+extern int ireg_operand PARAMS ((rtx, enum machine_mode));
+extern int lhs_lshift_operand PARAMS ((rtx, enum machine_mode));
+extern int pc_or_label_operand PARAMS ((rtx, enum machine_mode));
+#ifdef ARGS_SIZE_RTX
+/* expr.h defines ARGS_SIZE_RTX and `enum direction' */
+extern enum direction function_arg_padding PARAMS ((enum machine_mode, tree));
+#endif /* ARGS_SIZE_RTX */
+extern int non_hard_reg_operand PARAMS ((rtx, enum machine_mode));
+extern int eq_neq_comparison_operator PARAMS ((rtx, enum machine_mode));
+extern int insn_refs_are_delayed PARAMS ((rtx));
+#endif /* RTX_CODE */
+
+/* Prototype function used in macro CONST_OK_FOR_LETTER_P. */
+extern int zdepi_cint_p PARAMS ((unsigned HOST_WIDE_INT));
+
+extern struct rtx_def *hppa_builtin_saveregs PARAMS ((void));
+
+extern void output_deferred_plabels PARAMS ((FILE *));
+extern void override_options PARAMS ((void));
+extern void output_ascii PARAMS ((FILE *, const unsigned char *, int));
+extern void output_function_prologue PARAMS ((FILE *, int));
+extern void output_function_epilogue PARAMS ((FILE *, int));
+extern int compute_frame_size PARAMS ((int, int *));
+extern int and_mask_p PARAMS ((unsigned HOST_WIDE_INT));
+extern int cint_ok_for_move PARAMS ((HOST_WIDE_INT));
+extern void hppa_expand_prologue PARAMS ((void));
+extern void hppa_expand_epilogue PARAMS ((void));
+extern int hppa_can_use_return_insn_p PARAMS ((void));
+extern int ior_mask_p PARAMS ((unsigned HOST_WIDE_INT));
+
+#ifdef TREE_CODE
+extern int reloc_needed PARAMS ((tree));
+#endif /* TREE_CODE */
/* Subroutines for insn-output.c for HPPA.
- Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93-99, 2000 Free Software Foundation, Inc.
Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c
This file is part of GNU CC.
#include "obstack.h"
#include "toplev.h"
#include "ggc.h"
+#include "recog.h"
+#include "tm_p.h"
static void restore_unscaled_index_insn_codes PROTO((rtx));
static void record_unscaled_index_insn_codes PROTO((rtx));
static int shadd_constant_p PROTO((int));
static void pa_add_gc_roots PROTO((void));
static void mark_deferred_plabels PROTO((void *));
+static void compute_zdepwi_operands PROTO((unsigned HOST_WIDE_INT, unsigned *));
+static int compute_movstrsi_length PROTO((rtx));
+static void remove_useless_addtr_insns PROTO((rtx, int));
+static void store_reg PROTO((int, int, int));
+static void load_reg PROTO((int, int, int));
+static void set_reg_plus_d PROTO((int, int, int));
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
enum processor_type pa_cpu;
/* String to hold which cpu we are scheduling for. */
-char *pa_cpu_string;
+const char *pa_cpu_string;
/* Which architecture we are generating code for. */
enum architecture_type pa_arch;
/* String to hold which architecture we are generating code for. */
-char *pa_arch_string;
+const char *pa_arch_string;
/* Set by the FUNCTION_PROFILER macro. */
int hp_profile_labelno;
registers which were saved by the current function's prologue. */
static int gr_saved, fr_saved;
-static rtx find_addr_reg ();
+static rtx find_addr_reg PARAMS ((rtx));
/* Keep track of the number of bytes we have output in the CODE subspaces
during this compilation so we'll know when to emit inline long-calls. */
rtx
legitimize_pic_address (orig, mode, reg)
rtx orig, reg;
- enum machine_mode mode ATTRIBUTE_UNUSED;
+ enum machine_mode mode;
{
rtx pic_ref = orig;
/* Labels need special handling. */
- if (pic_label_operand (orig))
+ if (pic_label_operand (orig, mode))
{
/* We do not want to go through the movXX expanders here since that
would create recursion.
so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true. */
int
-read_only_operand (operand)
+read_only_operand (operand, mode)
rtx operand;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
{
if (GET_CODE (operand) == CONST)
operand = XEXP (XEXP (operand, 0), 0);
\f
/* Return the best assembler insn template
for moving operands[1] into operands[0] as a fullword. */
-char *
+const char *
singlemove_string (operands)
rtx *operands;
{
/* Compute position (in OP[1]) and width (in OP[2])
useful for copying IMM to a register using the zdepi
instructions. Store the immediate value to insert in OP[0]. */
-void
+static void
compute_zdepwi_operands (imm, op)
unsigned HOST_WIDE_INT imm;
unsigned *op;
/* Output assembler code to perform a doubleword move insn
with operands OPERANDS. */
-char *
+const char *
output_move_double (operands)
rtx *operands;
{
return "";
}
\f
-char *
+const char *
output_fp_move_double (operands)
rtx *operands;
{
OPERANDS[5] is the alignment safe to use, as a CONST_INT.
OPERANDS[6] is another temporary register. */
-char *
+const char *
output_block_move (operands, size_is_constant)
rtx *operands;
int size_is_constant ATTRIBUTE_UNUSED;
Basic structure is the same as emit_block_move, except that we
count insns rather than emit them. */
-int
+static int
compute_movstrsi_length (insn)
rtx insn;
{
}
\f
-char *
+const char *
output_and (operands)
rtx *operands;
{
return "and %1,%2,%0";
}
-char *
+const char *
output_ior (operands)
rtx *operands;
{
void
output_ascii (file, p, size)
FILE *file;
- unsigned char *p;
+ const unsigned char *p;
int size;
{
int i;
When CHECK_NOTES is zero we can only eliminate add,tr insns
when there's a 1:1 correspondence between fcmp and ftest/fbranch
instructions. */
-void
+static void
remove_useless_addtr_insns (insns, check_notes)
rtx insns;
int check_notes;
if (GET_CODE (x) == HIGH)
x = XEXP (x, 0);
- if (GET_CODE (x) == SYMBOL_REF && read_only_operand (x))
+ if (GET_CODE (x) == SYMBOL_REF && read_only_operand (x, VOIDmode))
assemble_name (file, XSTR (x, 0));
else if (GET_CODE (x) == SYMBOL_REF && !flag_pic)
{
}
else if (GET_CODE (x) == CONST)
{
- char *sep = "";
+ const char *sep = "";
int offset = 0; /* assembler wants -$global$ at end */
rtx base = NULL_RTX;
sep = "-";
else abort ();
- if (!read_only_operand (base) && !flag_pic)
+ if (!read_only_operand (base, VOIDmode) && !flag_pic)
fputs ("-$global$", file);
if (offset)
fprintf (file,"%s%d", sep, offset);
Keep track of which ones we have used. */
enum millicodes { remI, remU, divI, divU, mulI, mulU, end1000 };
+static void import_milli PROTO((enum millicodes));
static char imported[(int)end1000];
-static char *milli_names[] = {"remI", "remU", "divI", "divU", "mulI", "mulU"};
+static const char * const milli_names[] = {"remI", "remU", "divI", "divU", "mulI", "mulU"};
static char import_string[] = ".IMPORT $$....,MILLICODE";
#define MILLI_START 10
/* The register constraints have put the operands and return value in
the proper registers. */
-char *
+const char *
output_mul_insn (unsignedp, insn)
int unsignedp ATTRIBUTE_UNUSED;
rtx insn;
return 0;
}
-char *
+const char *
output_div_insn (operands, unsignedp, insn)
rtx *operands;
int unsignedp;
/* Output a $$rem millicode to do mod. */
-char *
+const char *
output_mod_insn (unsignedp, insn)
int unsignedp;
rtx insn;
output_arg_descriptor (call_insn)
rtx call_insn;
{
- char *arg_regs[4];
+ const char *arg_regs[4];
enum machine_mode arg_mode;
rtx link;
int i, output_flag = 0;
if (!flag_pic
&& is_symbolic
- && read_only_operand (in))
+ && read_only_operand (in, VOIDmode))
return NO_REGS;
if (class != R1_REGS && is_symbolic)
void
hppa_va_start (stdarg_p, valist, nextarg)
- int stdarg_p;
+ int stdarg_p ATTRIBUTE_UNUSED;
tree valist;
rtx nextarg;
{
output appropriate to emit the branch corresponding to all given
parameters. */
-char *
+const char *
output_cbranch (operands, nullify, length, negated, insn)
rtx *operands;
int nullify, length, negated;
varying length branches, negated branches and all combinations of the
above. it returns the appropriate output template to emit the branch. */
-char *
+const char *
output_bb (operands, nullify, length, negated, insn, which)
rtx *operands ATTRIBUTE_UNUSED;
int nullify, length, negated;
of the above. it returns the appropriate output template to emit the
branch. */
-char *
+const char *
output_bvb (operands, nullify, length, negated, insn, which)
rtx *operands ATTRIBUTE_UNUSED;
int nullify, length, negated;
Note it may perform some output operations on its own before
returning the final output string. */
-char *
+const char *
output_dbra (operands, insn, which_alternative)
rtx *operands;
rtx insn;
Note it may perform some output operations on its own before
returning the final output string. */
-char *
+const char *
output_movb (operands, insn, which_alternative, reverse_comparison)
rtx *operands;
rtx insn;
CALL_DEST is the routine we are calling. */
-char *
+const char *
output_millicode_call (insn, call_dest)
rtx insn;
rtx call_dest;
CALL_DEST is the routine we are calling. */
-char *
+const char *
output_call (insn, call_dest)
rtx insn;
rtx call_dest;
we don't have any direct calls in that case. */
{
int i;
- char *name = XSTR (call_dest, 0);
+ const char *name = XSTR (call_dest, 0);
/* See if we have already put this function on the list
of deferred plabels. This list is generally small,
rtx sym;
int permanent;
{
- char *str = XSTR (sym, 0);
+ const char *str = XSTR (sym, 0);
int len = strlen (str);
char *newstr;
/* Output an unconditional move and branch insn. */
-char *
+const char *
output_parallel_movb (operands, length)
rtx *operands;
int length;
/* Output an unconditional add and branch insn. */
-char *
+const char *
output_parallel_addb (operands, length)
rtx *operands;
int length;
INSN_CODE (new) = -1;
insn_code_number = recog_memoized (new);
if (insn_code_number < 0
- || !constrain_operands (insn_code_number, 1))
+ || !constrain_operands (1))
return 0;
if (reversed)
/* Definitions of target machine for GNU compiler, for the HP Spectrum.
- Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93-99, 2000 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) of Cygnus Support
and Tim Moore (moore@defmacro.cs.utah.edu) of the Center for
Software Science at the University of Utah.
};
/* For -mschedule= option. */
-extern char *pa_cpu_string;
+extern const char *pa_cpu_string;
extern enum processor_type pa_cpu;
#define pa_cpu_attr ((enum attr_cpu)pa_cpu)
};
/* For -march= option. */
-extern char *pa_arch_string;
+extern const char *pa_arch_string;
extern enum architecture_type pa_arch;
/* Print subsidiary information on the compiler version in use. */
/* Machine dependent reorg pass. */
#define MACHINE_DEPENDENT_REORG(X) pa_reorg(X)
-/* Prototype function used in MACHINE_DEPENDENT_REORG macro. */
-void pa_reorg ();
-
-/* Prototype function used in various macros. */
-int symbolic_operand ();
-
-/* Used in insn-*.c. */
-int following_call ();
-int function_label_operand ();
-int lhs_lshift_cint_operand ();
-
/* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "-Dhppa -Dhp9000s800 -D__hp9000s800 -Dhp9k8 -Dunix -Dhp9000 -Dhp800 -Dspectrum -DREVARGV -Asystem(unix) -Asystem(bsd) -Acpu(hppa) -Amachine(hppa)"
: (C) == 'P' ? and_mask_p (VALUE) \
: 0)
-/* Prototype function used in macro CONST_OK_FOR_LETTER_P. */
-int zdepi_cint_p ();
-
/* Similar, but for floating or large integer constants, and defining letters
G and H. Here VALUE is the CONST_DOUBLE rtx itself.
Ordinarily they are not call used registers, but they are for
_builtin_saveregs, so we must make this explicit. */
-extern struct rtx_def *hppa_builtin_saveregs ();
#define EXPAND_BUILTIN_SAVEREGS() hppa_builtin_saveregs ()
/* Implement `va_start' for varargs and stdarg. */
-extern void hppa_va_start();
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
hppa_va_start (stdarg, valist, nextarg)
/* Implement `va_arg'. */
-extern struct rtx_def *hppa_va_arg();
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
hppa_va_arg (valist, type)
\f
It is always safe for this macro to do nothing. It exists to recognize
opportunities to optimize the output. */
-extern struct rtx_def *hppa_legitimize_address ();
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
{ rtx orig_x = (X); \
(X) = hppa_legitimize_address (X, OLDX, MODE); \
fprintf (FILE, "%d(%s)", offset, reg_names [REGNO (base)]); \
break; \
case LO_SUM: \
- if (!symbolic_operand (XEXP (addr, 1))) \
+ if (!symbolic_operand (XEXP (addr, 1), VOIDmode)) \
fputs ("R'", FILE); \
else if (flag_pic == 0) \
fputs ("RR'", FILE); \
}}
\f
-/* Define functions in pa.c and used in insn-output.c. */
-
-extern char *output_and ();
-extern char *output_ior ();
-extern char *output_move_double ();
-extern char *output_fp_move_double ();
-extern char *output_block_move ();
-extern char *output_cbranch ();
-extern char *output_bb ();
-extern char *output_bvb ();
-extern char *output_dbra ();
-extern char *output_movb ();
-extern char *output_parallel_movb ();
-extern char *output_parallel_addb ();
-extern char *output_return ();
-extern char *output_call ();
-extern char *output_millicode_call ();
-extern char *output_mul_insn ();
-extern char *output_div_insn ();
-extern char *output_mod_insn ();
-extern char *singlemove_string ();
-extern void output_arg_descriptor ();
-extern void output_deferred_plabels ();
-extern void override_options ();
-extern void output_ascii ();
-extern void output_function_prologue ();
-extern void output_function_epilogue ();
-extern void output_global_address ();
-extern void print_operand ();
-extern struct rtx_def *legitimize_pic_address ();
-extern struct rtx_def *gen_cmp_fp ();
-extern void hppa_encode_label ();
-extern int arith11_operand ();
-extern int symbolic_expression_p ();
-extern int reloc_needed ();
-extern int compute_frame_size ();
-extern int hppa_address_cost ();
-extern int and_mask_p ();
-extern int symbolic_memory_operand ();
-extern int pa_adjust_cost ();
-extern int pa_adjust_insn_length ();
-extern int int11_operand ();
-extern int reg_or_cint_move_operand ();
-extern int arith5_operand ();
-extern int uint5_operand ();
-extern int pic_label_operand ();
-extern int plus_xor_ior_operator ();
-extern int basereg_operand ();
-extern int shadd_operand ();
-extern int arith_operand ();
-extern int read_only_operand ();
-extern int move_operand ();
-extern int and_operand ();
-extern int ior_operand ();
-extern int arith32_operand ();
-extern int uint32_operand ();
-extern int reg_or_nonsymb_mem_operand ();
-extern int reg_or_0_operand ();
-extern int reg_or_0_or_nonsymb_mem_operand ();
-extern int pre_cint_operand ();
-extern int post_cint_operand ();
-extern int div_operand ();
-extern int int5_operand ();
-extern int movb_comparison_operator ();
-extern int ireg_or_int5_operand ();
-extern int fmpyaddoperands ();
-extern int fmpysuboperands ();
-extern int call_operand_address ();
-extern int cint_ok_for_move ();
-extern int ior_operand ();
-extern void emit_bcond_fp ();
-extern int emit_move_sequence ();
-extern int emit_hpdiv_const ();
-extern void hppa_expand_prologue ();
-extern void hppa_expand_epilogue ();
-extern int hppa_can_use_return_insn_p ();
-extern int is_function_label_plus_const ();
-extern int jump_in_call_delay ();
-extern enum reg_class secondary_reload_class ();
-extern int insn_sets_and_refs_are_delayed ();
-
-/* Declare functions defined in pa.c and used in templates. */
-
-extern struct rtx_def *return_addr_rtx ();
-
/* Find the return address associated with the frame given by
FRAMEADDR. */
#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \
;;- Machine description for HP PA-RISC architecture for GNU C compiler
-;; Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 93-99, 2000 Free Software Foundation, Inc.
;; Contributed by the Center for Software Science at the University
;; of Utah.
(plus:SI (match_operand:SI 1 "register_operand" "r")
(high:SI (match_operand 2 "" ""))))]
"symbolic_operand (operands[2], Pmode)
- && ! function_label_operand (operands[2])
+ && ! function_label_operand (operands[2], Pmode)
&& flag_pic == 2"
"addil LT'%G2,%1"
[(set_attr "type" "binary")
[(set (match_operand:SI 0 "register_operand" "=a")
(high:SI (match_operand 1 "" "")))]
"symbolic_operand (operands[1], Pmode)
- && ! function_label_operand (operands[1])
- && ! read_only_operand (operands[1])
+ && ! function_label_operand (operands[1], Pmode)
+ && ! read_only_operand (operands[1], Pmode)
&& ! flag_pic"
"*
{
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(high:SI (match_operand 1 "" "")))]
- "(!flag_pic || !symbolic_operand (operands[1]), Pmode)
+ "(!flag_pic || !symbolic_operand (operands[1], Pmode))
&& !is_function_label_plus_const (operands[1])"
"*
{