s390-protos.h (s390_output_symbolic_const): Remove.

* config/s390/s390-protos.h (s390_output_symbolic_const): Remove.
	(s390_output_addr_const_extra): Declare.
	(s390_output_pool_entry): Remove FILE * argument.
	* config/s390/s390.c (s390_output_symbolic_const): Remove.
	(s390_output_addr_const_extra): New function.
	(print_operand_address): Call output_addr_const instead of
	s390_output_symbolic_const.
	(print_operand): Likewise.
	(s390_output_pool_entry): Use assemble_integer for symbolic constants.
	Remove FILE * argument.
	* config/s390/s390.h (OUTPUT_ADDR_CONST_EXTRA): Define.
	* config/s390/s390.md ("*pool_entry"): Adapt s390_output_pool_entry
	call.

From-SVN: r77757
This commit is contained in:
Ulrich Weigand 2004-02-13 14:57:27 +00:00 committed by Ulrich Weigand
parent cfbe3efe45
commit faeb9bb6ee
5 changed files with 86 additions and 112 deletions

View file

@ -1,3 +1,19 @@
2004-02-13 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390-protos.h (s390_output_symbolic_const): Remove.
(s390_output_addr_const_extra): Declare.
(s390_output_pool_entry): Remove FILE * argument.
* config/s390/s390.c (s390_output_symbolic_const): Remove.
(s390_output_addr_const_extra): New function.
(print_operand_address): Call output_addr_const instead of
s390_output_symbolic_const.
(print_operand): Likewise.
(s390_output_pool_entry): Use assemble_integer for symbolic constants.
Remove FILE * argument.
* config/s390/s390.h (OUTPUT_ADDR_CONST_EXTRA): Define.
* config/s390/s390.md ("*pool_entry"): Adapt s390_output_pool_entry
call.
2004-02-13 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* cfgloopanal.c (mark_irreducible_loops): Rewriten.

View file

@ -78,12 +78,11 @@ extern void s390_expand_clrstr (rtx, rtx);
extern void s390_expand_cmpmem (rtx, rtx, rtx, rtx);
extern rtx s390_return_addr_rtx (int, rtx);
extern void s390_output_symbolic_const (FILE *, rtx);
extern bool s390_output_addr_const_extra (FILE*, rtx);
extern void print_operand_address (FILE *, rtx);
extern void print_operand (FILE *, rtx, int);
extern void s390_output_constant_pool (rtx, rtx);
extern void s390_output_pool_entry (FILE *, rtx, enum machine_mode,
unsigned int);
extern void s390_output_pool_entry (rtx, enum machine_mode, unsigned int);
extern void s390_trampoline_template (FILE *);
extern void s390_initialize_trampoline (rtx, rtx, rtx);
extern rtx s390_gen_rtx_const_DI (int, int);

View file

@ -3301,98 +3301,63 @@ get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
return 0;
}
/* Output symbolic constant X in assembler syntax to
stdio stream FILE. */
/* Output machine-dependent UNSPECs occurring in address constant X
in assembler syntax to stdio stream FILE. Returns true if the
constant X could be recognized, false otherwise. */
void
s390_output_symbolic_const (FILE *file, rtx x)
bool
s390_output_addr_const_extra (FILE *file, rtx x)
{
switch (GET_CODE (x))
{
case CONST:
case ZERO_EXTEND:
case SIGN_EXTEND:
s390_output_symbolic_const (file, XEXP (x, 0));
break;
if (GET_CODE (x) == UNSPEC && XVECLEN (x, 0) == 1)
switch (XINT (x, 1))
{
case UNSPEC_GOTENT:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTENT");
return true;
case UNSPEC_GOT:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOT");
return true;
case UNSPEC_GOTOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTOFF");
return true;
case UNSPEC_PLT:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@PLT");
return true;
case UNSPEC_PLTOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@PLTOFF");
return true;
case UNSPEC_TLSGD:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@TLSGD");
return true;
case UNSPEC_TLSLDM:
assemble_name (file, get_some_local_dynamic_name ());
fprintf (file, "@TLSLDM");
return true;
case UNSPEC_DTPOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@DTPOFF");
return true;
case UNSPEC_NTPOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@NTPOFF");
return true;
case UNSPEC_GOTNTPOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTNTPOFF");
return true;
case UNSPEC_INDNTPOFF:
output_addr_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@INDNTPOFF");
return true;
}
case PLUS:
s390_output_symbolic_const (file, XEXP (x, 0));
fprintf (file, "+");
s390_output_symbolic_const (file, XEXP (x, 1));
break;
case MINUS:
s390_output_symbolic_const (file, XEXP (x, 0));
fprintf (file, "-");
s390_output_symbolic_const (file, XEXP (x, 1));
break;
case CONST_INT:
case LABEL_REF:
case CODE_LABEL:
case SYMBOL_REF:
output_addr_const (file, x);
break;
case UNSPEC:
if (XVECLEN (x, 0) != 1)
output_operand_lossage ("invalid UNSPEC as operand (1)");
switch (XINT (x, 1))
{
case UNSPEC_GOTENT:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTENT");
break;
case UNSPEC_GOT:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOT");
break;
case UNSPEC_GOTOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTOFF");
break;
case UNSPEC_PLT:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@PLT");
break;
case UNSPEC_PLTOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@PLTOFF");
break;
case UNSPEC_TLSGD:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@TLSGD");
break;
case UNSPEC_TLSLDM:
assemble_name (file, get_some_local_dynamic_name ());
fprintf (file, "@TLSLDM");
break;
case UNSPEC_DTPOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@DTPOFF");
break;
case UNSPEC_NTPOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@NTPOFF");
break;
case UNSPEC_GOTNTPOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOTNTPOFF");
break;
case UNSPEC_INDNTPOFF:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@INDNTPOFF");
break;
default:
output_operand_lossage ("invalid UNSPEC as operand (2)");
break;
}
break;
default:
fatal_insn ("UNKNOWN in s390_output_symbolic_const !?", x);
break;
}
return false;
}
/* Output address operand ADDR in assembler syntax to
@ -3409,7 +3374,7 @@ print_operand_address (FILE *file, rtx addr)
output_operand_lossage ("Cannot decompose address.");
if (ad.disp)
s390_output_symbolic_const (file, ad.disp);
output_addr_const (file, ad.disp);
else
fprintf (file, "0");
@ -3483,7 +3448,7 @@ print_operand (FILE *file, rtx x, int code)
abort ();
if (ad.disp)
s390_output_symbolic_const (file, ad.disp);
output_addr_const (file, ad.disp);
else
fprintf (file, "0");
}
@ -3543,7 +3508,7 @@ print_operand (FILE *file, rtx x, int code)
case CODE_LABEL:
case LABEL_REF:
case SYMBOL_REF:
s390_output_symbolic_const (file, x);
output_addr_const (file, x);
break;
case CONST_INT:
@ -4915,12 +4880,10 @@ s390_chunkify_cancel (struct constant_pool *pool_list)
}
/* Output to FILE the constant pool entry EXP in mode MODE
with alignment ALIGN. */
/* Output the constant pool entry EXP in mode MODE with alignment ALIGN. */
void
s390_output_pool_entry (FILE *file, rtx exp, enum machine_mode mode,
unsigned int align)
s390_output_pool_entry (rtx exp, enum machine_mode mode, unsigned int align)
{
REAL_VALUE_TYPE r;
@ -4935,18 +4898,7 @@ s390_output_pool_entry (FILE *file, rtx exp, enum machine_mode mode,
break;
case MODE_INT:
if (GET_CODE (exp) == CONST
|| GET_CODE (exp) == SYMBOL_REF
|| GET_CODE (exp) == LABEL_REF)
{
fputs (integer_asm_op (GET_MODE_SIZE (mode), TRUE), file);
s390_output_symbolic_const (file, exp);
fputc ('\n', file);
}
else
{
assemble_integer (exp, GET_MODE_SIZE (mode), align, 1);
}
assemble_integer (exp, GET_MODE_SIZE (mode), align, 1);
break;
default:

View file

@ -970,6 +970,13 @@ extern int flag_pic;
#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
/* Output machine-dependent UNSPECs in address constants. */
#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \
do { \
if (!s390_output_addr_const_extra (FILE, (X))) \
goto FAIL; \
} while (0);
/* Output an element of a case-vector that is absolute. */
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
do { \

View file

@ -7403,7 +7403,7 @@
{
enum machine_mode mode = GET_MODE (PATTERN (insn));
unsigned int align = GET_MODE_BITSIZE (mode);
s390_output_pool_entry (asm_out_file, operands[0], mode, align);
s390_output_pool_entry (operands[0], mode, align);
return "";
}
[(set_attr "op_type" "NN")