ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode for complex floats passed to unprototyped functions.
* config/ia64/ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode for complex floats passed to unprototyped functions. * gcc.c-torture/execute/20010605-2.c: New test. From-SVN: r43029
This commit is contained in:
parent
b912bca0f0
commit
7137fd76b5
|
@ -1,3 +1,8 @@
|
||||||
|
2001-06-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* config/ia64/ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode
|
||||||
|
for complex floats passed to unprototyped functions.
|
||||||
|
|
||||||
2001-06-08 Mark Mitchell <mark@codesourcery.com>
|
2001-06-08 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
* except.c (expand_eh_region_end_allowed): Call
|
* except.c (expand_eh_region_end_allowed): Call
|
||||||
|
|
|
@ -2865,13 +2865,17 @@ ia64_function_arg (cum, mode, type, named, incoming)
|
||||||
adjusted/little endian. */
|
adjusted/little endian. */
|
||||||
else if (byte_size - offset == 4)
|
else if (byte_size - offset == 4)
|
||||||
gr_mode = SImode;
|
gr_mode = SImode;
|
||||||
|
/* Complex floats need to have float mode. */
|
||||||
|
if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
|
||||||
|
gr_mode = hfa_mode;
|
||||||
|
|
||||||
loc[i] = gen_rtx_EXPR_LIST (VOIDmode,
|
loc[i] = gen_rtx_EXPR_LIST (VOIDmode,
|
||||||
gen_rtx_REG (gr_mode, (basereg
|
gen_rtx_REG (gr_mode, (basereg
|
||||||
+ int_regs)),
|
+ int_regs)),
|
||||||
GEN_INT (offset));
|
GEN_INT (offset));
|
||||||
offset += GET_MODE_SIZE (gr_mode);
|
offset += GET_MODE_SIZE (gr_mode);
|
||||||
int_regs++;
|
int_regs += GET_MODE_SIZE (gr_mode) <= UNITS_PER_WORD
|
||||||
|
? 1 : GET_MODE_SIZE (gr_mode) / UNITS_PER_WORD;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we ended up using just one location, just return that one loc. */
|
/* If we ended up using just one location, just return that one loc. */
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2001-06-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.c-torture/execute/20010605-2.c: New test.
|
||||||
|
|
||||||
2001-06-08 Nathan Sidwell <nathan@codesourcery.com>
|
2001-06-08 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
* g++.old-deja/g++.abi/vbase2.C: New test.
|
* g++.old-deja/g++.abi/vbase2.C: New test.
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
void foo (), bar (), baz ();
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
__complex__ double x;
|
||||||
|
__complex__ float y;
|
||||||
|
__complex__ long double z;
|
||||||
|
__real__ x = 1.0;
|
||||||
|
__imag__ x = 2.0;
|
||||||
|
foo (x);
|
||||||
|
__real__ y = 3.0f;
|
||||||
|
__imag__ y = 4.0f;
|
||||||
|
bar (y);
|
||||||
|
__real__ z = 5.0L;
|
||||||
|
__imag__ z = 6.0L;
|
||||||
|
baz (z);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void foo (__complex__ double x)
|
||||||
|
{
|
||||||
|
if (__real__ x != 1.0 || __imag__ x != 2.0)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void bar (__complex__ float x)
|
||||||
|
{
|
||||||
|
if (__real__ x != 3.0f || __imag__ x != 4.0f)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void baz (__complex__ long double x)
|
||||||
|
{
|
||||||
|
if (__real__ x != 5.0L || __imag__ x != 6.0L)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue