i386.md (R8_REG, R9_REG): New constants.

* config/i386/i386.md (R8_REG, R9_REG): New constants.
	* config/i386/i386.h (CONDITIONAL_REGISTER_USAGE): Use named
	constants instead of magic numbers.
	(HARD_REGNO_CALLER_SAVE_MODE): Ditto.
	(QI_REG_P): Ditto.
	* config/i386/i386.c (x86_64_int_parameter_registers): Ditto.
	(x86_64_ms_abi_int_parameter_registers): Ditto.
	(x86_64_int_return_registers): Ditto.
	(ix86_expand_call): Ditto for clobbered_registers array.
	(ix86_hard_regno_mode_ok): Ditto.
	(x86_extended_QIreg_mentioned_p): Ditto.

From-SVN: r144638
This commit is contained in:
Uros Bizjak 2009-03-05 08:34:16 +01:00
parent d095e03c25
commit 6c6094f12f
5 changed files with 58 additions and 37 deletions

View file

@ -1,6 +1,20 @@
2009-03-05 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (R8_REG, R9_REG): New constants.
* config/i386/i386.h (CONDITIONAL_REGISTER_USAGE): Use named
constants instead of magic numbers.
(HARD_REGNO_CALLER_SAVE_MODE): Ditto.
(QI_REG_P): Ditto.
* config/i386/i386.c (x86_64_int_parameter_registers): Ditto.
(x86_64_ms_abi_int_parameter_registers): Ditto.
(x86_64_int_return_registers): Ditto.
(ix86_expand_call): Ditto for clobbered_registers array.
(ix86_hard_regno_mode_ok): Ditto.
(x86_extended_QIreg_mentioned_p): Ditto.
2009-03-05 J"orn Rennecke <joern.rennecke@arc.com>
PR tree-optimization/39349:
PR tree-optimization/39349
* cse.c (cse_insn): Fix loop to stop at VOIDmode.
* combine.c (gen_lowpart_for_combine): Use omode when generating
@ -8,7 +22,7 @@
2009-03-04 J"orn Rennecke <joern.rennecke@arc.com>
PR rtl-optimization/39235:
PR rtl-optimization/39235
* loop-iv.c (get_simple_loop_desc): Use XCNEW.
2009-03-04 Zdenek Dvorak <ook@ucw.cz>
@ -110,10 +124,10 @@
* config/i386/i386.md (ST?_REG, MM?_REG): New constants.
(*call_1_rex64_ms_sysv): Use named constants instead of magic
numbers to describe clobbbered registers.
numbers to describe clobbered registers.
(*call_value_0_rex64_ms_sysv): Ditto.
* config/i386/mmx.md (emms): Ditto.
(femms): Ditto.
* config/i386/mmx.md (mmx_emms): Ditto.
(mmx_femms): Ditto.
2009-03-02 Richard Sandiford <rdsandiford@googlemail.com>
@ -321,7 +335,7 @@
PR tree-optimization/39259
* tree-inline.c (initialize_cfun): Remove asserts for calls_setjmp and
alls_alloca function flags.
calls_alloca function flags.
(copy_bb): Set calls_setjmp and alls_alloca function flags if such
calls are detected.
@ -714,7 +728,7 @@
PR target/39149
* config/i386/i386.c (override_options): Correct warning
messages for -malign-loops, -malign-jumps and -malign-functions.
messages for -malign-loops, -malign-jumps and -malign-functions.
2009-02-13 H.J. Lu <hongjiu.lu@intel.com>

View file

@ -1533,24 +1533,8 @@ int const dbx_register_map[FIRST_PSEUDO_REGISTER] =
-1, -1, -1, -1, -1, -1, -1, -1, /* extended SSE registers */
};
static int const x86_64_int_parameter_registers[6] =
{
5 /*RDI*/, 4 /*RSI*/, 1 /*RDX*/, 2 /*RCX*/,
FIRST_REX_INT_REG /*R8 */, FIRST_REX_INT_REG + 1 /*R9 */
};
static int const x86_64_ms_abi_int_parameter_registers[4] =
{
2 /*RCX*/, 1 /*RDX*/,
FIRST_REX_INT_REG /*R8 */, FIRST_REX_INT_REG + 1 /*R9 */
};
static int const x86_64_int_return_registers[4] =
{
0 /*RAX*/, 1 /*RDX*/, 5 /*RDI*/, 4 /*RSI*/
};
/* The "default" register map used in 64bit mode. */
int const dbx64_register_map[FIRST_PSEUDO_REGISTER] =
{
0, 1, 2, 3, 4, 5, 6, 7, /* general regs */
@ -1634,6 +1618,23 @@ rtx ix86_compare_op0 = NULL_RTX;
rtx ix86_compare_op1 = NULL_RTX;
rtx ix86_compare_emitted = NULL_RTX;
/* Define parameter passing and return registers. */
static int const x86_64_int_parameter_registers[6] =
{
DI_REG, SI_REG, DX_REG, CX_REG, R8_REG, R9_REG
};
static int const x86_64_ms_abi_int_parameter_registers[4] =
{
CX_REG, DX_REG, R8_REG, R9_REG
};
static int const x86_64_int_return_registers[4] =
{
AX_REG, DX_REG, DI_REG, SI_REG
};
/* Define the structure for the machine field in struct function. */
struct stack_local_entry GTY(())
@ -18684,8 +18685,12 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
by SYSV calls. */
if (ix86_cfun_abi () == MS_ABI && function_call_abi == SYSV_ABI)
{
static int clobbered_registers[] = {27, 28, 45, 46, 47, 48, 49, 50, 51,
52, SI_REG, DI_REG};
static int clobbered_registers[] = {
XMM6_REG, XMM7_REG, XMM8_REG,
XMM9_REG, XMM10_REG, XMM11_REG,
XMM12_REG, XMM13_REG, XMM14_REG,
XMM15_REG, SI_REG, DI_REG
};
unsigned int i;
rtx vec[ARRAY_SIZE (clobbered_registers) + 2];
rtx unspec = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx),
@ -25757,7 +25762,7 @@ ix86_hard_regno_mode_ok (int regno, enum machine_mode mode)
{
/* Take care for QImode values - they can be in non-QI regs,
but then they do cause partial register stalls. */
if (regno < 4 || TARGET_64BIT)
if (regno <= BX_REG || TARGET_64BIT)
return 1;
if (!TARGET_PARTIAL_REG_STALL)
return 1;
@ -26869,7 +26874,7 @@ x86_extended_QIreg_mentioned_p (rtx insn)
extract_insn_cached (insn);
for (i = 0; i < recog_data.n_operands; i++)
if (REG_P (recog_data.operand[i])
&& REGNO (recog_data.operand[i]) >= 4)
&& REGNO (recog_data.operand[i]) > BX_REG)
return true;
return false;
}

View file

@ -938,10 +938,10 @@ do { \
&& ((cfun && cfun->machine->call_abi == MS_ABI) \
|| (!cfun && DEFAULT_ABI == MS_ABI))) \
{ \
call_used_regs[4 /*RSI*/] = 0; \
call_used_regs[5 /*RDI*/] = 0; \
call_used_regs[27 /*XMM6*/] = 0; \
call_used_regs[28 /*XMM7*/] = 0; \
call_used_regs[SI_REG] = 0; \
call_used_regs[DI_REG] = 0; \
call_used_regs[XMM6_REG] = 0; \
call_used_regs[XMM7_REG] = 0; \
for (i = FIRST_REX_SSE_REG; i <= LAST_REX_SSE_REG; i++) \
call_used_regs[i] = 0; \
} \
@ -1073,7 +1073,7 @@ do { \
: (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \
: (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false) \
: (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode \
: (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode \
: (MODE) == QImode && (REGNO) > BX_REG && !TARGET_64BIT ? SImode \
: (MODE))
/* Specify the registers used for certain standard purposes.
@ -1310,7 +1310,7 @@ enum reg_class
#define SMALL_REGISTER_CLASSES 1
#define QI_REG_P(X) (REG_P (X) && REGNO (X) < 4)
#define QI_REG_P(X) (REG_P (X) && REGNO (X) <= BX_REG)
#define GENERAL_REGNO_P(N) \
((N) <= STACK_POINTER_REGNUM || REX_INT_REGNO_P (N))
@ -1508,7 +1508,8 @@ enum reg_class
prologue and apilogue. This is not possible without
ACCUMULATE_OUTGOING_ARGS. */
#define ACCUMULATE_OUTGOING_ARGS (TARGET_ACCUMULATE_OUTGOING_ARGS || ix86_cfun_abi () == MS_ABI)
#define ACCUMULATE_OUTGOING_ARGS \
(TARGET_ACCUMULATE_OUTGOING_ARGS || ix86_cfun_abi () == MS_ABI)
/* If defined, a C expression whose value is nonzero when we want to use PUSH
instructions to pass outgoing arguments. */

View file

@ -291,6 +291,8 @@
(MM5_REG 34)
(MM6_REG 35)
(MM7_REG 36)
(R8_REG 37)
(R9_REG 38)
(R10_REG 39)
(R11_REG 40)
(R13_REG 42)

View file

@ -53,8 +53,7 @@
2009-03-03 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/39248
* gcc.dg/vect/vect-complex-1.c: Add attribute aligned
to the arrays.
* gcc.dg/vect/vect-complex-1.c: Add attribute aligned to the arrays.
* gcc.dg/vect/vect-iv-6.c: Don't expect to fail to vectorize
on targets without vector misalignment support.
* lib/target-supports.exp