The odd thing is that those are exactly the targets I would expect to
work with the current code. I don't see why those should be the
targets that fail.
Right now the reflect.Call implementation is passing Go complex64 and
complex128 types as though they were implemented as struct { float32;
float32 } and struct { float64; float64 } respectively. The code
assumes that a function that takes a complex64 argument can be called
as though it took a struct argument instead. Apparently that does not
work on Alpha. So the case that fails is when the calling convention
for a complex number differs from the calling convention for passing a
struct.
In the Alpha calling convention, how is a complex number passed? How
is a struct of two floats/doubles passed?
I think your suggestion of implementing complex as a struct would be
somewhat painful to implement, because it would require generating
complicated code for all complex arithmetic.
I'm not strongly opposed to your original patch, I just think it
overreaches in assuming that only x86 works. What if we flip it
around and assume that only Alpha falis?
Ian