Hi all,
I'm currently implementing a linux/ppc target in llvm. The abis between Darwin/ppc and
linux/ppc are different and I'm running into problems with vararg calls.
Before a variadic method is called, an extra instruction must be executed (which is creqv 6, 6, 6). This
instruction is not necessary in Darwin/ppc.
I looked into the PowerPC target implementation and the code generation uses
Dags (lib/Target/PowerPC/PPCISelLowering.cpp, LowerCALL).
I need some help on how to insert the creqv instruction in the calling sequence.
After this is implemented, I will be able to send a patch for linux/ppc support.
I also need to know what is your preference for a linux/ppc target implementation? I can either
1) Use macros (#ifdef __MACH__ for darwin or #ifdef __PPC__ for linux)
2) Test the target in the code when needed
if (os == linux && ppc32) then...
else if (os == linux && ppc64) then ...
else if (os == darwin && ppc32) then ...
else if (os == darwin && ppc64) then ...
3) Create a new subtarget (but does it worth it? considering that the difference between the 2 abis is minor)
Thx for your help.
Cheers,
Nicolas