Any reason why fastcc on x86 shouldn't use ECX as a return register?

Now that we can safely return arbitrarily large structs on x86, it
seems to me that fastcc, which doesn't have to conform to any
preexisting ABI, should use ECX as well as EAX and EDX for returning
{i32,i32,i32} rather than use sret-demotion.

Any objections?

Seems fine to me, just make sure to do EAX then EDX then ECX because {i32,i32} is important for other ABI reasons.

-Chris

Hi Kenneth,

Now that we can safely return arbitrarily large structs on x86, it
seems to me that fastcc, which doesn't have to conform to any
preexisting ABI, should use ECX as well as EAX and EDX for returning
{i32,i32,i32} rather than use sret-demotion.

the x86 trampoline lowering code would need tweaking to check that the ECX
register was available for it.

Ciao,

Duncan.

Doesn't ECX get used to pass parameters into, rather than out of, a trampoline?

Hi Kenneth,

Now that we can safely return arbitrarily large structs on x86, it
seems to me that fastcc, which doesn't have to conform to any
preexisting ABI, should use ECX as well as EAX and EDX for returning
{i32,i32,i32} rather than use sret-demotion.

the x86 trampoline lowering code would need tweaking to check that the ECX
register was available for it.

Doesn't ECX get used to pass parameters into, rather than out of, a trampoline?

yes, I hadn't read your email carefully enough - I thought you were talking
about passing parameters in. Sorry for the noise.

Ciao,

Duncan.