fixdfdi.h (__fixunsdfdi, __fixdfdi): Add prototypes.

* config/s390/fixdfdi.h (__fixunsdfdi, __fixdfdi): Add prototypes.
	(__fixunssfdi, __fixsfdi): Likewise.
	* config/s390/s390.c (s390_single_hi): Initialize 'value'.
	(s390_single_qi): Likewise.
	(s390_emit_epilogue): Initialize 'offset'.  Remove signed vs.
	unsigned comparison warning.
	(s390_return_addr_rtx): New function.
	* config/s390/s390-protos.h (s390_return_addr_rtx): Declare it.
	* config/s390/s390.h (RETURN_ADDR_RTX): Use it.
	(HARD_REGNO_MODE_OK): Rewrite condition to silence warnings.

From-SVN: r58379
This commit is contained in:
Ulrich Weigand 2002-10-21 19:41:11 +00:00 committed by Ulrich Weigand
parent 22bd25548a
commit 5d4d885ca6
5 changed files with 56 additions and 14 deletions

View File

@ -1,3 +1,16 @@
2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/fixdfdi.h (__fixunsdfdi, __fixdfdi): Add prototypes.
(__fixunssfdi, __fixsfdi): Likewise.
* config/s390/s390.c (s390_single_hi): Initialize 'value'.
(s390_single_qi): Likewise.
(s390_emit_epilogue): Initialize 'offset'. Remove signed vs.
unsigned comparison warning.
(s390_return_addr_rtx): New function.
* config/s390/s390-protos.h (s390_return_addr_rtx): Declare it.
* config/s390/s390.h (RETURN_ADDR_RTX): Use it.
(HARD_REGNO_MODE_OK): Rewrite condition to silence warnings.
2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.c (s390_output_mi_vcall_thunk): New function.

View File

@ -43,6 +43,7 @@ union double_long {
UDItype_x ll;
};
UDItype_x __fixunsdfdi (double a1);
/* convert double to unsigned int */
UDItype_x
@ -114,6 +115,8 @@ union double_long {
UDItype_x ll;
};
DItype_x __fixdfdi (double a1);
/* convert double to int */
DItype_x
__fixdfdi (double a1)
@ -184,6 +187,8 @@ union float_long
USItype_x l;
};
UDItype_x __fixunssfdi (float a1);
/* convert float to unsigned int */
UDItype_x
__fixunssfdi (float a1)
@ -250,6 +255,8 @@ union float_long
USItype_x l;
};
DItype_x __fixsfdi (float a1);
/* convert double to int */
DItype_x
__fixsfdi (float a1)

View File

@ -66,6 +66,7 @@ extern void s390_load_address PARAMS ((rtx, rtx));
extern void s390_expand_movstr PARAMS ((rtx, rtx, rtx));
extern void s390_expand_clrstr PARAMS ((rtx, rtx));
extern void s390_expand_cmpstr PARAMS ((rtx, rtx, rtx, rtx));
extern rtx s390_return_addr_rtx PARAMS ((int, rtx));
extern void s390_output_symbolic_const PARAMS ((FILE *, rtx));
extern void print_operand_address PARAMS ((FILE *, rtx));

View File

@ -605,7 +605,7 @@ s390_single_hi (op, mode, def)
{
if (GET_CODE (op) == CONST_INT)
{
unsigned HOST_WIDE_INT value;
unsigned HOST_WIDE_INT value = 0;
int n_parts = GET_MODE_SIZE (mode) / 2;
int i, part = -1;
@ -631,7 +631,7 @@ s390_single_hi (op, mode, def)
else if (GET_CODE (op) == CONST_DOUBLE
&& GET_MODE (op) == VOIDmode)
{
unsigned HOST_WIDE_INT value;
unsigned HOST_WIDE_INT value = 0;
int n_parts = GET_MODE_SIZE (mode) / 2;
int i, part = -1;
@ -708,7 +708,7 @@ s390_single_qi (op, mode, def)
{
if (GET_CODE (op) == CONST_INT)
{
unsigned HOST_WIDE_INT value;
unsigned HOST_WIDE_INT value = 0;
int n_parts = GET_MODE_SIZE (mode);
int i, part = -1;
@ -734,7 +734,7 @@ s390_single_qi (op, mode, def)
else if (GET_CODE (op) == CONST_DOUBLE
&& GET_MODE (op) == VOIDmode)
{
unsigned HOST_WIDE_INT value;
unsigned HOST_WIDE_INT value = 0;
int n_parts = GET_MODE_SIZE (mode);
int i, part = -1;
@ -4370,6 +4370,31 @@ s390_machine_dependent_reorg (first)
}
/* Return an RTL expression representing the value of the return address
for the frame COUNT steps up from the current frame. FRAME is the
frame pointer of that frame. */
rtx
s390_return_addr_rtx (count, frame)
int count;
rtx frame;
{
rtx addr;
/* For the current frame, we use the initial value of RETURN_REGNUM.
This works both in leaf and non-leaf functions. */
if (count == 0)
return get_hard_reg_initial_val (Pmode, RETURN_REGNUM);
/* For frames farther back, we read the stack slot where the
corresponding RETURN_REGNUM value was saved. */
addr = plus_constant (frame, RETURN_REGNUM * UNITS_PER_WORD);
addr = memory_address (Pmode, addr);
return gen_rtx_MEM (Pmode, addr);
}
/* Find first call clobbered register unsused in a function.
This could be used as base register in a leaf function
or for holding the return address before epilogue. */
@ -4794,7 +4819,7 @@ s390_emit_epilogue ()
{
struct s390_frame frame;
rtx frame_pointer, return_reg;
int area_bottom, area_top, offset;
int area_bottom, area_top, offset = 0;
rtvec p;
/* Compute frame_info. */
@ -4916,7 +4941,7 @@ s390_emit_epilogue ()
if (i == STACK_POINTER_REGNUM
|| i == RETURN_REGNUM
|| i == BASE_REGISTER
|| (flag_pic && i == PIC_OFFSET_TABLE_REGNUM))
|| (flag_pic && i == (int)PIC_OFFSET_TABLE_REGNUM))
continue;
if (global_regs[i])

View File

@ -370,9 +370,9 @@ do \
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
(FLOAT_REGNO_P(REGNO)? \
(GET_MODE_CLASS(MODE) == MODE_FLOAT || \
GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT || \
(MODE) == SImode || (MODE) == DImode) : \
((MODE) == SImode || (MODE) == DImode || \
GET_MODE_CLASS(MODE) == MODE_FLOAT || \
GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT) : \
INT_REGNO_P(REGNO)? \
(HARD_REGNO_NREGS(REGNO, MODE) == 1 || !((REGNO) & 1)) : \
CC_REGNO_P(REGNO)? \
@ -599,11 +599,7 @@ extern const enum reg_class regclass_map[FIRST_PSEUDO_REGISTER]; /* smalled clas
plus_constant (arg_pointer_rtx, -STACK_POINTER_OFFSET))
#define RETURN_ADDR_RTX(COUNT, FRAME) \
((COUNT) == 0 ? get_hard_reg_initial_val (Pmode, RETURN_REGNUM) : \
gen_rtx_MEM (Pmode, \
memory_address (Pmode, \
plus_constant (DYNAMIC_CHAIN_ADDRESS ((FRAME)), \
RETURN_REGNUM * UNITS_PER_WORD))))
s390_return_addr_rtx ((COUNT), DYNAMIC_CHAIN_ADDRESS ((FRAME)))
/* The following macros will turn on dwarf2 exception hndling
Other code location for this exception handling are