+Fri Apr 2 11:58:22 1999 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * config/c4x/c4x.c (c4x_emit_move_sequence): Force invalid QImode
+ constants into memory if we get called directly from gen_move_insn
+ rather than emit_move_insn.
+ (c4x_legitimize_address): Fix up LABEL_REF addresses.
+
Thu Apr 1 12:04:05 1999 Jim Wilson <wilson@cygnus.com>
* expr.c (store_field): When check direct_store, assume all complex
constants... */
op1 = force_const_mem (mode, op1);
}
+ else if (mode == QImode && CONSTANT_P (op1) && ! LEGITIMATE_CONSTANT_P (op1))
+ {
+ /* We shouldn't need this test if only emit_move_insn was called.
+ However, some routines call gen_move_insn which doesn't check that
+ the constants are legitimate. */
+ op1 = force_const_mem (mode, op1);
+ }
else if (mode == HImode && CONSTANT_P (op1) && ! LEGITIMATE_CONSTANT_P (op1))
{
/* We could load all sorts of constants in two goes by pulling all
rtx orig ATTRIBUTE_UNUSED;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
- if (GET_CODE (orig) == SYMBOL_REF)
+ if (GET_CODE (orig) == SYMBOL_REF
+ || GET_CODE (orig) == LABEL_REF)
{
if (mode == HImode || mode == HFmode)
{
c4x_K_constant (op)
rtx op;
{
- if (TARGET_C3X)
+ if (TARGET_C3X || ! c4x_immed_int_constant (op))
return 0;
- return c4x_immed_int_constant (op) && IS_INT5_CONST (INTVAL (op));
+ return IS_INT5_CONST (INTVAL (op));
}
}
-/* Symbolic operand. */
+/* Symbolic address operand. */
int
symbolic_address_operand (op, mode)
else
abort ();
}
-