------- 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