ix86_regparm = REGPARM_MAX;
/* If the user has provided any of the -malign-* options,
- warn and use that value only if -falign-* is not set.
+ warn and use that value only if -falign-* is not set.
Remove this code in GCC 3.2 or later. */
if (ix86_align_loops_string)
{
cum->sse_regno = 0;
}
}
- else
+ else
{
cum->words += words;
cum->nregs -= words;
case TImode:
if (cum->sse_nregs)
ret = gen_rtx_REG (mode, cum->sse_regno);
- break;
+ break;
}
if (TARGET_DEBUG_ARG)
to be able to access the saved ebp value in our frame. */
if (cfun->machine->accesses_prev_frame)
return 1;
-
+
/* Several x86 os'es need a frame pointer for other reasons,
usually pertaining to setjmp. */
if (SUBTARGET_FRAME_POINTER_REQUIRED)
ix86_compute_frame_layout (&frame);
- /* Calculate start of saved registers relative to ebp. Special care
+ /* Calculate start of saved registers relative to ebp. Special care
must be taken for the normal return case of a function using
eh_return: the eax and edx registers are marked as saved, but not
restored along this path. */
if (!optimize || optimize_size || !TARGET_BRANCH_PREDICTION_HINTS)
return;
-
+
x = find_reg_note (current_output_insn, REG_BR_PROB, 0);
if (x)
{
return buf;
}
-/* Output code to initialize control word copies used by
+/* Output code to initialize control word copies used by
trunc?f?i patterns. NORMAL is set to current control word, while ROUND_DOWN
is set to control word rounding downwards. */
void
{
int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;
int dimode_p = GET_MODE (operands[0]) == DImode;
- rtx xops[4];
/* Jump through a hoop or two for DImode, since the hardware has no
non-popping instruction. We used to do this a different way, but
than 4 bytes, because gcc is able to optimize such code better (in
the case the destination or the count really is aligned, gcc is often
able to predict the branches) and also it is friendlier to the
- hardware branch prediction.
+ hardware branch prediction.
Using loops is benefical for generic case, because we can
handle small counts using the loops. Many CPUs (such as Athlon)
tmp = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);
emit_insn (gen_rtx_SET (VOIDmode, out,
gen_rtx_IF_THEN_ELSE (Pmode, tmp,
- reg2,
- out)));
+ reg2,
+ out)));
}
else
&& (mode) != SImode));
}
/* Return the cost of moving data from a register in class CLASS1 to
- one in class CLASS2.
+ one in class CLASS2.
It is not required that the cost always equal 2 when FROM is the same as TO;
on some machines it is expensive to move between registers if they are not
If moving between registers and memory is more expensive than
between two registers, you should define this macro to express the
- relative cost.
-
+ relative cost.
+
Model also increased moving costs of QImode registers in non
Q_REGS classes.
*/
/* Declarations for insn-output.c. These functions are defined in recog.c,
final.c, and varasm.c.
Copyright (C) 1987, 1991, 1994, 1997, 1998,
- 1999, 2000 Free Software Foundation, Inc.
+ 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
Called from varasm.c before most kinds of output. */
extern void app_disable PARAMS ((void));
-/* Return the number of slots filled in the current
+/* Return the number of slots filled in the current
delayed branch sequence (we don't count the insn needing the
delay slot). Zero if not in a delayed branch sequence. */
extern int dbr_sequence_length PARAMS ((void));
/* Return nonzero if this function has no function calls. */
extern int leaf_function_p PARAMS ((void));
+/* Return 1 if branch is an forward branch.
+ Uses insn_shuid array, so it works only in the final pass. May be used by
+ output templates to add branch prediction hints, for example. */
+extern int final_forward_branch_p PARAMS ((rtx));
+
/* Return 1 if this function uses only the registers that can be
safely renumbered. */
extern int only_leaf_regs_used PARAMS ((void));