+2000-02-07 Dmitri Makarov <dim@wrs.com> & Bernd Schmidt <bernds@redhat.com>
+
+ * config/arm/arm.c (arm_init_cumulative_args); New function:
+ Initlaise the CUMULATIE_ARGS strcuture for a function
+ defintion.
+ (arm_function_arg): New function: Determine where to place a
+ function's argument. Also handles deciding the function's
+ call cookie.
+ (current_file_function_operand): New function: Return true if
+ the symbol is a function which has already been compiled.
+ (arm_is_long_call_p): New function: Return true if the
+ indicated function should be called via a long call.
+ (arm_valid_type_attribute_p): New function: Return true if the
+ attribute is a valid, arm specific, attribute.
+ (arm_comp_type_attribute): New function: Return true if the
+ two types have compatable, arm specific, attributes.
+
+ * config/arm/arm.h (CUMULATIVE_ARGS): Redefine to be a
+ structure.
+ (FUNCTION_ARG): Redefine to call arm_function_arg.
+ (FUNCTION_ARG_PARTIAL_NREGS): Redefine to use correct
+ structure field.
+ (INIT_CUMULATIVE_ARGS): Redefine to call
+ arm_init_cumulative_args.
+ (FUNCTION_ARG_ADVANCE): Redefine to use correct structure
+ field.
+ (SETUP_INCOMING_VARARGS): Redefine to use correct structure
+ field.
+ (ARM_MARK_NEARBY_FUNCTION): New macro: Mark already compiled
+ functions.
+ (ENCODE_SECTION): Add call to ARM_MARK_NEARBY_FUNCTION.
+ (VALID_MACHINE_TYPE_ATTRIBUTE): Define.
+ (COMP_TYPE_ATTRIBUTES): Define.
+
+ * config/arm/arm.md (call): Call arm_is_long_call_p to decide
+ if a long call is needed.
+ (call_value): Call arm_is_long_call_p to decide if a long call
+ is needed.
+ (call_symbol): Call arm_is_long_call_p to decide if a long call
+ is needed.
+
+ * config/arm/arm-protos.h: Add prototype for arm_is_long_call_p.
+
2000-02-11 Denis Chertykov <denisc@overta.ru>
* README.AVR: New file with information about the avr ports.
/* Output routines for GCC for ARM.
- Copyright (C) 1991, 93-99, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
and Martin Simmons (@harleqn.co.uk).
More major hacks by Richard Earnshaw (rearnsha@arm.com).
/* See if two shifts will do 2 or more insn's worth of work. */
if (clear_sign_bit_copies >= 16 && clear_sign_bit_copies < 24)
{
- HOST_WIDE_INT shift_mask = ((0xffffffffUL
+ HOST_WIDE_INT shift_mask = ((0xffffffffUL
<< (32 - clear_sign_bit_copies))
& 0xffffffffUL);
}
\f
-/* Return 1 if the operand is a SYMBOL_REF for a function known to be in
- this file. */
+/* Return 1 if the operand is a SYMBOL_REF for a function
+ known to be defined in the current compilation unit. */
static int
current_file_function_operand (sym_ref)
rtx sym_ref;
{
- return (SYMBOL_REF_FLAG (sym_ref)
- || sym_ref == XEXP (DECL_RTL (current_function_decl), 0));
+ /* XXX FIXME - we need some way to determine if SYMREF has already been
+ compiled. We wanted to used SYMBOL_REF_FLAG but this is already in use
+ by the constant pool generation code. */
+ return sym_ref == XEXP (DECL_RTL (current_function_decl), 0);
}
/* Return non-zero if a 32 bit "long call" should be generated for this
if (use_return_insn (FALSE) && return_used_this_function
&& (frame_size + current_function_outgoing_args_size) != 0
&& ! (frame_pointer_needed && TARGET_APCS))
- abort ();
+ abort ();
/* Reset the ARM-specific per-function variables. */
current_function_anonymous_args = 0;
case CALL_INSN:
/* If using 32-bit addresses the cc is not preserved over
- calls */
+ calls. */
if (TARGET_APCS_32)
{
/* Succeed if the following insn is the target label,
/* If this is an unconditional branch to the same label, succeed.
If it is to another label, do nothing. If it is conditional,
fail. */
- /* XXX Probably, the tests for SET and the PC are unnecessary. */
+ /* XXX Probably, the tests for SET and the PC are unnecessary. */
scanbody = PATTERN (this_insn);
if (GET_CODE (scanbody) == SET
/* Definitions of target machine for GNU compiler, for ARM.
- Copyright (C) 1991, 93, 94, 05, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
and Martin Simmons (@harleqn.co.uk).
More major hacks by Richard Earnshaw (rearnsha@arm.com)
{ "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \
SUBTARGET_EXTRA_SPECS
+#ifndef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS
+#endif
+
#ifndef SUBTARGET_CPP_SPEC
#define SUBTARGET_CPP_SPEC ""
#endif
/* The frame pointer register used in gcc has nothing to do with debugging;
that is controlled by the APCS-FRAME option. */
-/* Not fully implemented yet */
+/* Not fully implemented yet. */
/* #define CAN_DEBUG_WITHOUT_FP 1 */
#define TARGET_MEM_FUNCTIONS 1
: preserve_subexpressions_p ()));
DONE;
}
+
if (flag_pic
&& (CONSTANT_P (operands[1])
|| symbol_mentioned_p (operands[1])