/* Definitions of target machine for GNU compiler. Matsushita MN10300 series
- Copyright (C) 2000 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2003 Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
This file is part of GNU CC.
extern int call_address_operand PARAMS ((rtx, enum machine_mode));
extern int impossible_plus_operand PARAMS ((rtx, enum machine_mode));
extern int const_8bit_operand PARAMS ((rtx, enum machine_mode));
+
+extern bool mn10300_wide_const_load_uses_clr PARAMS ((rtx operands[2]));
#endif /* RTX_CODE */
#ifdef TREE_CODE
extern int initial_offset PARAMS ((int, int));
extern int can_use_return_insn PARAMS ((void));
extern int mask_ok_for_mem_btst PARAMS ((int, int));
-
/* Subroutines for insn-output.c for Matsushita MN10300 series
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
return false;
}
}
+
+/* Check whether a constant used to initialize a DImode or DFmode can
+ use a clr instruction. The code here must be kept in sync with
+ movdf and movdi. */
+
+bool
+mn10300_wide_const_load_uses_clr (operands)
+ rtx operands[2];
+{
+ long val[2];
+
+ if (GET_CODE (operands[0]) != REG
+ || REGNO_REG_CLASS (REGNO (operands[0])) != DATA_REGS)
+ return false;
+
+ switch (GET_CODE (operands[1]))
+ {
+ case CONST_INT:
+ {
+ rtx low, high;
+ split_double (operands[1], &low, &high);
+ val[0] = INTVAL (low);
+ val[1] = INTVAL (high);
+ }
+ break;
+
+ case CONST_DOUBLE:
+ if (GET_MODE (operands[1]) == DFmode)
+ {
+ REAL_VALUE_TYPE rv;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, val);
+ }
+ else if (GET_MODE (operands[1]) == VOIDmode
+ || GET_MODE (operands[1]) == DImode)
+ {
+ val[0] = CONST_DOUBLE_LOW (operands[1]);
+ val[1] = CONST_DOUBLE_HIGH (operands[1]);
+ }
+ break;
+
+ default:
+ return false;
+ }
+
+ return val[0] == 0 || val[1] == 0;
+}
;; GCC machine description for Matsushita MN10300
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
;; Free Software Foundation, Inc.
;; Contributed by Jeff Law (law@cygnus.com).
abort ();
}
}"
- [(set_attr "cc" "none,none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
+ [(set (attr "cc")
+ (cond
+ [
+ (lt (symbol_ref "which_alternative") (const_int 2)
+ ) (const_string "none")
+ (eq (symbol_ref "which_alternative") (const_int 2)
+ ) (const_string "clobber")
+ (eq (symbol_ref "which_alternative") (const_int 3)
+ ) (if_then_else
+ (ne (symbol_ref "rtx_equal_p (operands[0], operands[1])")
+ (const_int 0)) (const_string "clobber")
+ (const_string "none_0hit"))
+ (ior (eq (symbol_ref "which_alternative") (const_int 8))
+ (eq (symbol_ref "which_alternative") (const_int 9))
+ ) (if_then_else
+ (ne (symbol_ref "mn10300_wide_const_load_uses_clr
+ (operands)")
+ (const_int 0)) (const_string "clobber")
+ (const_string "none_0hit"))
+ ] (const_string "none_0hit")))])
(define_expand "movdf"
[(set (match_operand:DF 0 "general_operand" "")
abort ();
}
}"
- [(set_attr "cc" "none,none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
+ [(set (attr "cc")
+ (cond
+ [
+ (lt (symbol_ref "which_alternative") (const_int 2)
+ ) (const_string "none")
+ (eq (symbol_ref "which_alternative") (const_int 2)
+ ) (const_string "clobber")
+ (eq (symbol_ref "which_alternative") (const_int 3)
+ ) (if_then_else
+ (ne (symbol_ref "rtx_equal_p (operands[0], operands[1])")
+ (const_int 0)) (const_string "clobber")
+ (const_string "none_0hit"))
+ (ior (eq (symbol_ref "which_alternative") (const_int 8))
+ (eq (symbol_ref "which_alternative") (const_int 9))
+ ) (if_then_else
+ (ne (symbol_ref "mn10300_wide_const_load_uses_clr
+ (operands)")
+ (const_int 0)) (const_string "clobber")
+ (const_string "none_0hit"))
+ ] (const_string "none_0hit")))])
\f