*** empty log message ***

From-SVN: r481
This commit is contained in:
Richard Stallman 1992-03-14 05:34:29 +00:00
parent a130a4418f
commit 64a184e92d

View File

@ -50,11 +50,11 @@ rtx legitimize_pic_address ();
/* Emit a (use pic_offset_table_rtx) if we used PIC relocation in the /* Emit a (use pic_offset_table_rtx) if we used PIC relocation in the
function at any time during the compilation process. In the future function at any time during the compilation process. In the future
we should try and eliminate the USE if we can easily deterine that we should try and eliminate the USE if we can easily determine that
all PIC references were deleted from the current function. That would all PIC references were deleted from the current function. That would
save an address register */ save an address register */
finalize_pic() finalize_pic ()
{ {
if (flag_pic && current_function_uses_pic_offset_table) if (flag_pic && current_function_uses_pic_offset_table)
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
@ -190,7 +190,7 @@ output_function_prologue (stream, size)
if (mask & (1 << i)) if (mask & (1 << i))
asm_fprintf (stream, asm_fprintf (stream,
#ifdef MOTOROLA #ifdef MOTOROLA
"\tmov.l %s,-(%Rsp)\n", "\t%Omove.l %s,-(%Rsp)\n",
#else #else
"\tmovel %s,%Rsp@-\n", "\tmovel %s,%Rsp@-\n",
#endif #endif
@ -207,7 +207,7 @@ output_function_prologue (stream, size)
if (flag_pic && current_function_uses_pic_offset_table) if (flag_pic && current_function_uses_pic_offset_table)
{ {
#ifdef MOTOROLA #ifdef MOTOROLA
asm_fprintf (stream, "\tmov.l %I__GLOBAL_OFFSET_TABLE_, %s\n", asm_fprintf (stream, "\t%Omove.l %I__GLOBAL_OFFSET_TABLE_, %s\n",
reg_names[PIC_OFFSET_TABLE_REGNUM]); reg_names[PIC_OFFSET_TABLE_REGNUM]);
asm_fprintf (stream, "\tlea.l (%Rpc,%s.l),%s\n", asm_fprintf (stream, "\tlea.l (%Rpc,%s.l),%s\n",
reg_names[PIC_OFFSET_TABLE_REGNUM], reg_names[PIC_OFFSET_TABLE_REGNUM],
@ -303,7 +303,7 @@ output_function_epilogue (stream, size)
&& (mask || fmask || fpoffset)) && (mask || fmask || fpoffset))
{ {
#ifdef MOTOROLA #ifdef MOTOROLA
asm_fprintf (stream, "\tmov.l %0I%d,%Ra0\n", -fsize); asm_fprintf (stream, "\t%Omove.l %0I%d,%Ra0\n", -fsize);
#else #else
asm_fprintf (stream, "\tmovel %0I%d,%Ra0\n", -fsize); asm_fprintf (stream, "\tmovel %0I%d,%Ra0\n", -fsize);
#endif #endif
@ -325,7 +325,7 @@ output_function_epilogue (stream, size)
if (big) if (big)
{ {
#ifdef MOTOROLA #ifdef MOTOROLA
asm_fprintf (stream, "\tmov.l -%d(%s,%Ra0.l),%s\n", asm_fprintf (stream, "\t%Omove.l -%d(%s,%Ra0.l),%s\n",
offset + fsize, offset + fsize,
reg_names[FRAME_POINTER_REGNUM], reg_names[FRAME_POINTER_REGNUM],
reg_names[i]); reg_names[i]);
@ -338,7 +338,7 @@ output_function_epilogue (stream, size)
else if (! frame_pointer_needed) else if (! frame_pointer_needed)
{ {
#ifdef MOTOROLA #ifdef MOTOROLA
asm_fprintf (stream, "\tmov.l (%Rsp)+,%s\n", asm_fprintf (stream, "\t%Omove.l (%Rsp)+,%s\n",
reg_names[i]); reg_names[i]);
#else #else
asm_fprintf (stream, "\tmovel %Rsp@+,%s\n", asm_fprintf (stream, "\tmovel %Rsp@+,%s\n",
@ -348,7 +348,7 @@ output_function_epilogue (stream, size)
else else
{ {
#ifdef MOTOROLA #ifdef MOTOROLA
asm_fprintf (stream, "\tmov.l -%d(%s),%s\n", asm_fprintf (stream, "\t%Omove.l -%d(%s),%s\n",
offset + fsize, offset + fsize,
reg_names[FRAME_POINTER_REGNUM], reg_names[FRAME_POINTER_REGNUM],
reg_names[i]); reg_names[i]);
@ -515,6 +515,155 @@ not_sp_operand (op, mode)
return op != stack_pointer_rtx && general_operand (op, mode); return op != stack_pointer_rtx && general_operand (op, mode);
} }
/* Return TRUE if X is a valid comparison operator for the dbcc
instruction.
Note it rejects floating point comparison operators.
(In the future we could use Fdbcc).
It also rejects some comparisons when CC_NO_OVERFLOW is set. */
int
valid_dbcc_comparison_p (x, mode)
rtx x;
enum machine_mode mode;
{
/* We could add support for these in the future */
if (cc_prev_status.flags & CC_IN_68881)
return 0;
switch (GET_CODE (x))
{
case EQ: case NE: case GTU: case LTU:
case GEU: case LEU:
return 1;
/* Reject some when CC_NO_OVERFLOW is set. This may be over
conservative */
case GT: case LT: case GE: case LE:
return ! (cc_prev_status.flags & CC_NO_OVERFLOW);
default:
return 0;
}
}
/* Output a dbCC; jCC sequence. Note we do not handle the
floating point version of this sequence (Fdbcc). We also
do not handle alternative conditions when CC_NO_OVERFLOW is
set. It is assumed that valid_dbcc_comparison_p will kick
those out before we get here. */
output_dbcc_and_branch (operands)
rtx *operands;
{
switch (GET_CODE (operands[3]))
{
case EQ:
#ifdef MOTOROLA
output_asm_insn ("dbeq %0,%l1\n\tjbeq %l2", operands);
#else
output_asm_insn ("dbeq %0,%l1\n\tjeq %l2", operands);
#endif
break;
case NE:
#ifdef MOTOROLA
output_asm_insn ("dbne %0,%l1\n\tjbne %l2", operands);
#else
output_asm_insn ("dbne %0,%l1\n\tjne %l2", operands);
#endif
break;
case GT:
#ifdef MOTOROLA
output_asm_insn ("dbgt %0,%l1\n\tjbgt %l2", operands);
#else
output_asm_insn ("dbgt %0,%l1\n\tjgt %l2", operands);
#endif
break;
case GTU:
#ifdef MOTOROLA
output_asm_insn ("dbhi %0,%l1\n\tjbhi %l2", operands);
#else
output_asm_insn ("dbhi %0,%l1\n\tjhi %l2", operands);
#endif
break;
case LT:
#ifdef MOTOROLA
output_asm_insn ("dblt %0,%l1\n\tjblt %l2", operands);
#else
output_asm_insn ("dblt %0,%l1\n\tjlt %l2", operands);
#endif
break;
case LTU:
#ifdef MOTOROLA
output_asm_insn ("dbcs %0,%l1\n\tjbcs %l2", operands);
#else
output_asm_insn ("dbcs %0,%l1\n\tjcs %l2", operands);
#endif
break;
case GE:
#ifdef MOTOROLA
output_asm_insn ("dbge %0,%l1\n\tjbge %l2", operands);
#else
output_asm_insn ("dbge %0,%l1\n\tjge %l2", operands);
#endif
break;
case GEU:
#ifdef MOTOROLA
output_asm_insn ("dbcc %0,%l1\n\tjbcc %l2", operands);
#else
output_asm_insn ("dbcc %0,%l1\n\tjcc %l2", operands);
#endif
break;
case LE:
#ifdef MOTOROLA
output_asm_insn ("dble %0,%l1\n\tjble %l2", operands);
#else
output_asm_insn ("dble %0,%l1\n\tjle %l2", operands);
#endif
break;
case LEU:
#ifdef MOTOROLA
output_asm_insn ("dbls %0,%l1\n\tjbls %l2", operands);
#else
output_asm_insn ("dbls %0,%l1\n\tjls %l2", operands);
#endif
break;
default:
abort ();
}
/* If the decrement is to be done in SImode, then we have
to compensate for the fact that dbcc decrements in HImode. */
switch (GET_MODE (operands[0]))
{
case SImode:
#ifdef MOTOROLA
output_asm_insn ("clr%.w %0\n\tsubq%.l %#1,%0\n\tjbpl %l1", operands);
#else
output_asm_insn ("clr%.w %0\n\tsubq%.l %#1,%0\n\tjpl %l1", operands);
#endif
break;
case HImode:
break;
default:
abort ();
}
}
char * char *
output_btst (operands, countop, dataop, insn, signpos) output_btst (operands, countop, dataop, insn, signpos)
rtx *operands; rtx *operands;
@ -697,7 +846,7 @@ singlemove_string (operands)
&& INTVAL (operands[1]) < 128 && INTVAL (operands[1]) < 128
&& INTVAL (operands[1]) >= -128) && INTVAL (operands[1]) >= -128)
{ {
#if defined(MOTOROLA) && !defined(CRDS) #if defined (MOTOROLA) && !defined (CRDS)
return "moveq%.l %1,%0"; return "moveq%.l %1,%0";
#else #else
return "moveq %1,%0"; return "moveq %1,%0";
@ -1018,7 +1167,7 @@ output_move_const_double (operands)
rtx *operands; rtx *operands;
{ {
#ifdef SUPPORT_SUN_FPA #ifdef SUPPORT_SUN_FPA
if (TARGET_FPA && FPA_REG_P(operands[0])) if (TARGET_FPA && FPA_REG_P (operands[0]))
{ {
int code = standard_sun_fpa_constant_p (operands[1]); int code = standard_sun_fpa_constant_p (operands[1]);
@ -1244,7 +1393,7 @@ standard_sun_fpa_constant_p (x)
/* /*
* Stuff that looks different if it's single or double * Stuff that looks different if it's single or double
*/ */
if (GET_MODE(x) == SFmode) if (GET_MODE (x) == SFmode)
{ {
if (d == S_E) if (d == S_E)
return 0x8; return 0x8;
@ -1452,7 +1601,7 @@ print_operand (file, op, letter)
} }
#ifdef SUPPORT_SUN_FPA #ifdef SUPPORT_SUN_FPA
else if ((letter == 'y' || letter == 'w') else if ((letter == 'y' || letter == 'w')
&& GET_CODE(op) == CONST_DOUBLE && GET_CODE (op) == CONST_DOUBLE
&& (i = standard_sun_fpa_constant_p (op))) && (i = standard_sun_fpa_constant_p (op)))
{ {
fprintf (file, "%%%d", i & 0x1ff); fprintf (file, "%%%d", i & 0x1ff);