Commit f19a9af7 by Andreas Krebbel Committed by Ulrich Weigand

s390.md ("tmdi_reg", [...]): Insns now use multiple letter constraints.

2003-11-30  Andreas Krebbel  <krebbel1@de.ibm.com>

	* config/s390/s390.md ("tmdi_reg", "tmsi_reg", "*movdi_64", "*movdi_31",
	"iordi3"): Insns now use multiple letter constraints.
	("*movdi_lhi", "*movdi_lli", "*movdi_lay"): Insns deleted. They are now
	covered by "*movdi_64".
	("*movsi_lhi", "*movsi_lli", "*movsi_lay"): Insns deleted. They are now
	covered by "*movsi_zarch" and "*movsi_esa".
	("*movsi_zarch", "*movsi_!zarch"): New insns.
	("*llgt_sisi_split", "*llgt_didi_split"): Insns deleted. Now covered
	by "*andsi3_zarch" and "anddi3".
	("*anddi3_ni"): Insn merged with "anddi3".
	("*andsi3_ni"): Insn merged with "*andsi3_zarch".
	("*andsi3_zarch", "*andsi3_esa"): New insns.
	("*iordi3_oi"): Insn merged with "iordi3".
	("*iorsi3_oi"): Insn merged with "*iorsi3_zarch".
	("*iorsi3_zarch", "*iorsi3_esa"): New insns.

	* config/s390/s390.c (s390_single_qi, s390_single_hi): Functions
	merged to s390_single_part.
	(s390_single_part): New function.
	NOTE: Semantics have changed a bit. Now the value of the part must
	be different from the others to get a non-negative return value.
	(s390_extract_qi, s390_extract_hi): Functions merged to
	s390_extract_part.
	(s390_extract_part, s390_extra_constraint_str,
	s390_const_ok_for_constraint_p): New functions. The L constraint got a
	new meaning and the N constraint was added as a multiple letter
	constraint.
	(s390_extra_constraint): Function deleted.
	(print_operand): New output modifier 'i' and 'j' added.
	All uses of CONST_OK_FOR_LETTER_P were replaced by
	CONST_OK_FOR_CONSTRAINT_P.

	* config/s390/s390-protos.h: Function prototypes adapted.
	* doc/md.texi: Documentation for new constraint letters added.

From-SVN: r74061
parent 11816ba2
2003-11-30 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.md ("tmdi_reg", "tmsi_reg", "*movdi_64", "*movdi_31",
"iordi3"): Insns now use multiple letter constraints.
("*movdi_lhi", "*movdi_lli", "*movdi_lay"): Insns deleted. They are now
covered by "*movdi_64".
("*movsi_lhi", "*movsi_lli", "*movsi_lay"): Insns deleted. They are now
covered by "*movsi_zarch" and "*movsi_esa".
("*movsi_zarch", "*movsi_!zarch"): New insns.
("*llgt_sisi_split", "*llgt_didi_split"): Insns deleted. Now covered
by "*andsi3_zarch" and "anddi3".
("*anddi3_ni"): Insn merged with "anddi3".
("*andsi3_ni"): Insn merged with "*andsi3_zarch".
("*andsi3_zarch", "*andsi3_esa"): New insns.
("*iordi3_oi"): Insn merged with "iordi3".
("*iorsi3_oi"): Insn merged with "*iorsi3_zarch".
("*iorsi3_zarch", "*iorsi3_esa"): New insns.
* config/s390/s390.c (s390_single_qi, s390_single_hi): Functions
merged to s390_single_part.
(s390_single_part): New function.
NOTE: Semantics have changed a bit. Now the value of the part must
be different from the others to get a non-negative return value.
(s390_extract_qi, s390_extract_hi): Functions merged to
s390_extract_part.
(s390_extract_part, s390_extra_constraint_str,
s390_const_ok_for_constraint_p): New functions. The L constraint got a
new meaning and the N constraint was added as a multiple letter
constraint.
(s390_extra_constraint): Function deleted.
(print_operand): New output modifier 'i' and 'j' added.
All uses of CONST_OK_FOR_LETTER_P were replaced by
CONST_OK_FOR_CONSTRAINT_P.
* config/s390/s390-protos.h: Function prototypes adapted.
* doc/md.texi: Documentation for new constraint letters added.
2003-11-30 Andreas Schwab <schwab@suse.de>
* Makefile.in ($(DESTDIR)$(infodir)/%.info): Fix missing semicolon.
......
......@@ -30,7 +30,8 @@ extern void s390_emit_epilogue (void);
extern void s390_function_profiler (FILE *, int);
#ifdef RTX_CODE
extern int s390_extra_constraint (rtx, int);
extern int s390_extra_constraint_str (rtx, int, const char *);
extern int s390_const_ok_for_constraint_p (HOST_WIDE_INT, int, const char *);
extern int const0_operand (rtx, enum machine_mode);
extern int consttable_operand (rtx, enum machine_mode);
extern int larl_operand (rtx, enum machine_mode);
......@@ -40,10 +41,8 @@ extern int shift_count_operand (rtx, enum machine_mode);
extern int bras_sym_operand (rtx, enum machine_mode);
extern int load_multiple_operation (rtx, enum machine_mode);
extern int store_multiple_operation (rtx, enum machine_mode);
extern int s390_single_hi (rtx, enum machine_mode, int);
extern int s390_extract_hi (rtx, enum machine_mode, int);
extern int s390_single_qi (rtx, enum machine_mode, int);
extern int s390_extract_qi (rtx, enum machine_mode, int);
extern int s390_single_part (rtx, enum machine_mode, enum machine_mode, int);
extern unsigned HOST_WIDE_INT s390_extract_part (rtx, enum machine_mode, int);
extern bool s390_split_ok_p (rtx, rtx, enum machine_mode, int);
extern int tls_symbolic_operand (rtx);
......
......@@ -536,21 +536,20 @@ extern const enum reg_class regclass_map[FIRST_PSEUDO_REGISTER];
(C) == 'd' ? GENERAL_REGS : \
(C) == 'f' ? FP_REGS : NO_REGS)
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
((C) == 'I' ? (unsigned long) (VALUE) < 256 : \
(C) == 'J' ? (unsigned long) (VALUE) < 4096 : \
(C) == 'K' ? (VALUE) >= -32768 && (VALUE) < 32768 : \
(C) == 'L' ? (unsigned long) (VALUE) < 65536 : 0)
#define CONST_OK_FOR_CONSTRAINT_P(VALUE, C, STR) \
s390_const_ok_for_constraint_p ((VALUE), (C), (STR))
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 1
#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(VALUE, C, STR) 1
#define EXTRA_CONSTRAINT(OP, C) \
s390_extra_constraint ((OP), (C))
#define EXTRA_CONSTRAINT_STR(OP, C, STR) \
s390_extra_constraint_str ((OP), (C), (STR))
#define EXTRA_MEMORY_CONSTRAINT(C, STR) \
((C) == 'Q' || (C) == 'R' || (C) == 'S' || (C) == 'T')
#define EXTRA_ADDRESS_CONSTRAINT(C, STR) \
((C) == 'U' || (C) == 'W' || (C) == 'Y')
#define CONSTRAINT_LEN(C, STR) \
((C) == 'N' ? 5 : DEFAULT_CONSTRAINT_LEN ((C), (STR)))
/* Stack layout and calling conventions. */
......
......@@ -2196,13 +2196,52 @@ Unsigned 12-bit constant (0--4095)
Signed 16-bit constant (@minus{}32768--32767)
@item L
Unsigned 16-bit constant (0--65535)
Value appropriate as displacement.
@table @code
@item (0..4095)
for short displacement
@item (-524288..524287)
for long displacement
@end table
@item M
Constant integer with a value of 0x7fffffff.
@item N
Multiple letter constraint followed by 4 parameter letters.
@table @code
@item 0..9:
number of the part counting from most to least significant
@item H,Q:
mode of the part
@item D,S,H:
mode of the containing operand
@item 0,F:
value of the other parts (F - all bits set)
@end table
The constraint matches if the specified part of a constant
has a value different from it's other parts.
@item Q
Memory reference without index register
Memory reference without index register and with short displacement.
@item R
Memory reference with index register and short displacement.
@item S
Symbolic constant suitable for use with the @code{larl} instruction
Memory reference without index register but with long displacement.
@item T
Memory reference with index register and long displacement.
@item U
Pointer with short displacement.
@item W
Pointer with long displacement.
@item Y
Shift count operand.
@end table
......
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