Commit fe7496dd by Alexandre Oliva Committed by Alexandre Oliva

mn10300.c (mn10300_wide_const_load_uses_clr): New function.

* config/mn10300/mn10300.c (mn10300_wide_const_load_uses_clr): New
function.
* config/mn10300/mn10300-protos.h: Declare it.
* config/mn10300/mn10300.md (movdi, movdf): Use it to compute
attribute cc of instructions that may use clr.

From-SVN: r62916
parent e4402f97
2003-02-14 Alexandre Oliva <aoliva@redhat.com>
* config/mn10300/mn10300.c (mn10300_wide_const_load_uses_clr): New
function.
* config/mn10300/mn10300-protos.h: Declare it.
* config/mn10300/mn10300.md (movdi, movdf): Use it to compute
attribute cc of instructions that may use clr.
2003-02-14 Kazu Hirata <kazu@cs.umass.edu>
* simplify-rtx.c (simplify_binary_operation): Simplify ~y when
......
/* 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.
......@@ -40,6 +40,8 @@ extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
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
......@@ -57,4 +59,3 @@ extern void expand_epilogue PARAMS ((void));
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).
......@@ -1390,3 +1390,51 @@ mn10300_rtx_costs (x, code, outer_code, total)
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).
......@@ -520,7 +520,26 @@
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" "")
......@@ -670,7 +689,26 @@
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")))])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment