------- Comment #8 from hjl dot tools at gmail dot com  2008-07-08 01:19 -------
HFA stands for homogeneous floating point aggregates as specified in
IA-64 Software Conventions and Runtime Architecture Guide. To pass
complex float, if we run out of available FP argument registers,
we will pass it in GP register.  For a simple testcase:

---
extern _Complex float f5;

int
check_float (int a, _Complex float a1, _Complex float a2,
             _Complex float a3, _Complex float a4, _Complex float a5)
{
  return (a5 != f5);
}
---

(gdb) call debug_rtx (entry_parm)
(parallel:SC [
        (expr_list:REG_DEP_TRUE (reg:DI 117 in5 [ a5 ])
            (const_int 0 [0x0]))
    ])

Here DI is 64bit with 8byte alignment.

rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm));

turns it into

(concat:SC (reg:SF 380)
    (reg:SF 381))

It has 4 byte alignment.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36701

Reply via email to