mmix.md ("*call_real"): Fix typo in comment.
* config/mmix/mmix.md ("*call_real"): Fix typo in comment. * config/mmix/mmix.h (EXTRA_CONSTRAINT): Pass MMIX_REG_OK_STRICT to mmix_extra_constraint. * config/mmix/mmix.c (mmix_secondary_reload_class): Only handle non-global register classes. Mark now unused parameters as such. (mmix_extra_constraint, 'U'): Use new parameter strict and call calling memory_operand_p or strict_memory_address_p, not address_operand. * config/mmix/mmix-protos.h (mmix_extra_constraint): Add parameter. From-SVN: r48402
This commit is contained in:
parent
f6e67fa57e
commit
e9fef64c58
|
@ -1,3 +1,15 @@
|
||||||
|
2001-12-30 Hans-Peter Nilsson <hp@bitrange.com>
|
||||||
|
|
||||||
|
* config/mmix/mmix.md ("*call_real"): Fix typo in comment.
|
||||||
|
* config/mmix/mmix.h (EXTRA_CONSTRAINT): Pass MMIX_REG_OK_STRICT
|
||||||
|
to mmix_extra_constraint.
|
||||||
|
* config/mmix/mmix.c (mmix_secondary_reload_class): Only handle
|
||||||
|
non-global register classes. Mark now unused parameters as such.
|
||||||
|
(mmix_extra_constraint, 'U'): Use new parameter strict and call
|
||||||
|
calling memory_operand_p or strict_memory_address_p, not
|
||||||
|
address_operand.
|
||||||
|
* config/mmix/mmix-protos.h (mmix_extra_constraint): Add parameter.
|
||||||
|
|
||||||
2001-12-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
2001-12-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||||
|
|
||||||
* unroll.c: Move include files above first use of `const'.
|
* unroll.c: Move include files above first use of `const'.
|
||||||
|
|
|
@ -108,7 +108,7 @@ extern enum reg_class mmix_secondary_reload_class
|
||||||
PARAMS ((enum reg_class, enum machine_mode, rtx, int));
|
PARAMS ((enum reg_class, enum machine_mode, rtx, int));
|
||||||
extern int mmix_const_ok_for_letter_p PARAMS ((HOST_WIDE_INT, int));
|
extern int mmix_const_ok_for_letter_p PARAMS ((HOST_WIDE_INT, int));
|
||||||
extern int mmix_const_double_ok_for_letter_p PARAMS ((rtx, int));
|
extern int mmix_const_double_ok_for_letter_p PARAMS ((rtx, int));
|
||||||
extern int mmix_extra_constraint PARAMS ((rtx, int));
|
extern int mmix_extra_constraint PARAMS ((rtx, int, int));
|
||||||
extern rtx mmix_dynamic_chain_address PARAMS ((rtx));
|
extern rtx mmix_dynamic_chain_address PARAMS ((rtx));
|
||||||
extern rtx mmix_return_addr_rtx PARAMS ((int, rtx));
|
extern rtx mmix_return_addr_rtx PARAMS ((int, rtx));
|
||||||
extern rtx mmix_eh_return_stackadj_rtx PARAMS ((void));
|
extern rtx mmix_eh_return_stackadj_rtx PARAMS ((void));
|
||||||
|
|
|
@ -269,28 +269,15 @@ mmix_preferred_output_reload_class (x, class)
|
||||||
enum reg_class
|
enum reg_class
|
||||||
mmix_secondary_reload_class (class, mode, x, in_p)
|
mmix_secondary_reload_class (class, mode, x, in_p)
|
||||||
enum reg_class class;
|
enum reg_class class;
|
||||||
enum machine_mode mode;
|
enum machine_mode mode ATTRIBUTE_UNUSED;
|
||||||
rtx x;
|
rtx x ATTRIBUTE_UNUSED;
|
||||||
int in_p;
|
int in_p ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
if (class == REMAINDER_REG
|
if (class == REMAINDER_REG
|
||||||
|| class == HIMULT_REG
|
|| class == HIMULT_REG
|
||||||
|| class == SYSTEM_REGS)
|
|| class == SYSTEM_REGS)
|
||||||
return GENERAL_REGS;
|
return GENERAL_REGS;
|
||||||
|
|
||||||
if (mode != DImode || in_p)
|
|
||||||
return NO_REGS;
|
|
||||||
|
|
||||||
/* We have to help reload. */
|
|
||||||
if (mode == DImode && GET_CODE (x) == MEM
|
|
||||||
&& ! address_operand (XEXP (x, 0), GET_MODE (x)))
|
|
||||||
return GENERAL_REGS;
|
|
||||||
|
|
||||||
/* FIXME: Optimize this; there are lots of PLUS:es that don't need a
|
|
||||||
reload register. */
|
|
||||||
if (GET_CODE (x) == PLUS)
|
|
||||||
return GENERAL_REGS;
|
|
||||||
|
|
||||||
return NO_REGS;
|
return NO_REGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,14 +317,22 @@ mmix_const_double_ok_for_letter_p (value, c)
|
||||||
CONST_INT:s, but rather often as CONST_DOUBLE:s. */
|
CONST_INT:s, but rather often as CONST_DOUBLE:s. */
|
||||||
|
|
||||||
int
|
int
|
||||||
mmix_extra_constraint (x, c)
|
mmix_extra_constraint (x, c, strict)
|
||||||
rtx x;
|
rtx x;
|
||||||
int c;
|
int c;
|
||||||
|
int strict;
|
||||||
{
|
{
|
||||||
HOST_WIDEST_INT value;
|
HOST_WIDEST_INT value;
|
||||||
|
|
||||||
|
/* When checking for an address, we need to handle strict vs. non-strict
|
||||||
|
register checks. Don't use address_operand, but instead its
|
||||||
|
equivalent (its callee, which it is just a wrapper for),
|
||||||
|
memory_operand_p and the strict-equivalent strict_memory_address_p. */
|
||||||
if (c == 'U')
|
if (c == 'U')
|
||||||
return address_operand (x, Pmode);
|
return
|
||||||
|
strict
|
||||||
|
? strict_memory_address_p (Pmode, x)
|
||||||
|
: memory_address_p (Pmode, x);
|
||||||
|
|
||||||
if (GET_CODE (x) != CONST_DOUBLE || GET_MODE (x) != VOIDmode)
|
if (GET_CODE (x) != CONST_DOUBLE || GET_MODE (x) != VOIDmode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -589,7 +589,7 @@ enum reg_class
|
||||||
mmix_const_ok_for_letter_p (VALUE, C)
|
mmix_const_ok_for_letter_p (VALUE, C)
|
||||||
|
|
||||||
#define EXTRA_CONSTRAINT(VALUE, C) \
|
#define EXTRA_CONSTRAINT(VALUE, C) \
|
||||||
mmix_extra_constraint (VALUE, C)
|
mmix_extra_constraint (VALUE, C, MMIX_REG_OK_STRICT)
|
||||||
|
|
||||||
/* Do we need anything serious here? Yes, any FLOT constant. */
|
/* Do we need anything serious here? Yes, any FLOT constant. */
|
||||||
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
|
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
|
||||||
|
|
|
@ -1038,7 +1038,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
|
||||||
;; rarely compared to addresses in registers, disparaging the
|
;; rarely compared to addresses in registers, disparaging the
|
||||||
;; first ("p") alternative by adding ? in the first operand
|
;; first ("p") alternative by adding ? in the first operand
|
||||||
;; might do the trick. We define 'U' as a synonym to 'p', but without the
|
;; might do the trick. We define 'U' as a synonym to 'p', but without the
|
||||||
;; caveats (and vary small advantages) of 'p'.
|
;; caveats (and very small advantages) of 'p'.
|
||||||
(define_insn "*call_real"
|
(define_insn "*call_real"
|
||||||
[(call (mem:QI
|
[(call (mem:QI
|
||||||
(match_operand:DI 0 "mmix_symbolic_or_address_operand" "s,rU"))
|
(match_operand:DI 0 "mmix_symbolic_or_address_operand" "s,rU"))
|
||||||
|
|
Loading…
Reference in New Issue