avr-protos.h (call_insn_operand): Delete prototype.
* config/avr/avr-protos.h (call_insn_operand): Delete prototype. * config/avr/avr.c (call_insn_operand): Delete function. * config/avr/avr.md (*pushqi, *pushhi, *pushsi, *pushsf): Use REG_SP instead of register number. Use predicates. * config/avr/predicates.md (const0_operand, reg_or_0_operand, call_insn_operand): Add. From-SVN: r120546
This commit is contained in:
parent
b7fdd4ed69
commit
696e990bdb
|
@ -1,3 +1,12 @@
|
|||
2007-01-07 Anatoly Sokolov <aesok@post.ru>
|
||||
|
||||
* config/avr/avr-protos.h (call_insn_operand): Delete prototype.
|
||||
* config/avr/avr.c (call_insn_operand): Delete function.
|
||||
* config/avr/avr.md (*pushqi, *pushhi, *pushsi, *pushsf): Use REG_SP
|
||||
instead of register number. Use predicates.
|
||||
* config/avr/predicates.md (const0_operand, reg_or_0_operand,
|
||||
call_insn_operand): Add.
|
||||
|
||||
2007-01-06 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* tree-pass.h (pass_build_cgraph_edges): Declare.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Prototypes for exported functions defined in avr.c
|
||||
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Denis Chertykov (denisc@overta.ru)
|
||||
|
||||
|
@ -112,7 +112,6 @@ extern int test_hard_reg_class (enum reg_class class, rtx x);
|
|||
extern int jump_over_one_insn_p (rtx insn, rtx dest);
|
||||
|
||||
extern int avr_hard_regno_mode_ok (int regno, enum machine_mode mode);
|
||||
extern int call_insn_operand (rtx op, enum machine_mode mode);
|
||||
extern void final_prescan_insn (rtx insn, rtx *operand, int num_operands);
|
||||
extern int avr_simplify_comparison_p (enum machine_mode mode,
|
||||
RTX_CODE operator, rtx x);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Subroutines for insn-output.c for ATMEL AVR micro controllers
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Denis Chertykov (denisc@overta.ru)
|
||||
|
||||
|
@ -1170,22 +1170,6 @@ print_operand (FILE *file, rtx x, int code)
|
|||
print_operand_address (file, x);
|
||||
}
|
||||
|
||||
/* Recognize operand OP of mode MODE used in call instructions. */
|
||||
|
||||
int
|
||||
call_insn_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (GET_CODE (op) == MEM)
|
||||
{
|
||||
rtx inside = XEXP (op, 0);
|
||||
if (register_operand (inside, Pmode))
|
||||
return 1;
|
||||
if (CONSTANT_ADDRESS_P (inside))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Update the condition code in the INSN. */
|
||||
|
||||
void
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;; -*- Mode: Scheme -*-
|
||||
;; Machine description for GNU compiler,
|
||||
;; for ATMEL AVR micro controllers.
|
||||
;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006
|
||||
;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
|
||||
;; Free Software Foundation, Inc.
|
||||
;; Contributed by Denis Chertykov (denisc@overta.ru)
|
||||
|
||||
|
@ -145,9 +145,9 @@
|
|||
[(set_attr "length" "5")])
|
||||
|
||||
(define_insn "*pushqi"
|
||||
[(set (mem:QI (post_dec (reg:HI 32)))
|
||||
(match_operand:QI 0 "nonmemory_operand" "r,L"))]
|
||||
"(operands[0] == const0_rtx || register_operand (operands[0], QImode))"
|
||||
[(set (mem:QI (post_dec (reg:HI REG_SP)))
|
||||
(match_operand:QI 0 "reg_or_0_operand" "r,L"))]
|
||||
""
|
||||
"@
|
||||
push %0
|
||||
push __zero_reg__"
|
||||
|
@ -155,25 +155,25 @@
|
|||
|
||||
|
||||
(define_insn "*pushhi"
|
||||
[(set (mem:HI (post_dec (reg:HI 32)))
|
||||
(match_operand:HI 0 "nonmemory_operand" "r,L"))]
|
||||
"(operands[0] == const0_rtx || register_operand (operands[0], HImode))"
|
||||
[(set (mem:HI (post_dec (reg:HI REG_SP)))
|
||||
(match_operand:HI 0 "reg_or_0_operand" "r,L"))]
|
||||
""
|
||||
"@
|
||||
push %B0\;push %A0
|
||||
push __zero_reg__\;push __zero_reg__"
|
||||
[(set_attr "length" "2,2")])
|
||||
|
||||
(define_insn "*pushsi"
|
||||
[(set (mem:SI (post_dec (reg:HI 32)))
|
||||
(match_operand:SI 0 "nonmemory_operand" "r,L"))]
|
||||
"(operands[0] == const0_rtx || register_operand (operands[0], SImode))"
|
||||
[(set (mem:SI (post_dec (reg:HI REG_SP)))
|
||||
(match_operand:SI 0 "reg_or_0_operand" "r,L"))]
|
||||
""
|
||||
"@
|
||||
push %D0\;push %C0\;push %B0\;push %A0
|
||||
push __zero_reg__\;push __zero_reg__\;push __zero_reg__\;push __zero_reg__"
|
||||
[(set_attr "length" "4,4")])
|
||||
|
||||
(define_insn "*pushsf"
|
||||
[(set (mem:SF (post_dec (reg:HI 32)))
|
||||
[(set (mem:SF (post_dec (reg:HI REG_SP)))
|
||||
(match_operand:SF 0 "register_operand" "r"))]
|
||||
""
|
||||
"push %D0
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;; Predicate definitions for ATMEL AVR micro controllers.
|
||||
;; Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
;;
|
||||
;; This file is part of GCC.
|
||||
;;
|
||||
|
@ -50,7 +50,17 @@
|
|||
(and (match_code "const_int")
|
||||
(match_test "INTVAL (op) >= 0x40
|
||||
&& INTVAL (op) <= 0x60 - GET_MODE_SIZE (mode)")))
|
||||
|
||||
|
||||
;; Return 1 if OP is the zero constant for MODE.
|
||||
(define_predicate "const0_operand"
|
||||
(and (match_code "const_int,const_double")
|
||||
(match_test "op == CONST0_RTX (mode)")))
|
||||
|
||||
;; Returns true if OP is either the constant zero or a register.
|
||||
(define_predicate "reg_or_0_operand"
|
||||
(ior (match_operand 0 "register_operand")
|
||||
(match_operand 0 "const0_operand")))
|
||||
|
||||
;; Returns 1 if OP is a SYMBOL_REF.
|
||||
(define_predicate "symbol_ref_operand"
|
||||
(match_code "symbol_ref"))
|
||||
|
@ -83,3 +93,9 @@
|
|||
(define_predicate "simple_comparison_operator"
|
||||
(and (match_operand 0 "comparison_operator")
|
||||
(not (match_code "gt,gtu,le,leu"))))
|
||||
|
||||
;; Return true if OP is a valid call operand.
|
||||
(define_predicate "call_insn_operand"
|
||||
(and (match_code "mem")
|
||||
(ior (match_test "register_operand (XEXP (op, 0), mode)")
|
||||
(match_test "CONSTANT_ADDRESS_P (XEXP (op, 0))"))))
|
||||
|
|
Loading…
Reference in New Issue