Var Args on X86-64

Hello all,

I wish to get the va_arg instruction working on X86-64 Linux. This requires implementing VAARG lowering for X86-64.

I am fine with implementing it, but I am unsure of what approach I should take. The straightforward option is to add the DAG nodes required to perform the operation during lowering. (in X86TargetLowering::LowerVAARG()). However, the resulting code will be relatively long to accommodate the complexity of what va_arg must do. It would be easier to operate on a higher level, for example, by implementing va_arg in LLVM assembly. Is it possible (or preferable) to implement an intrinsic (va_arg) using target-specific llvm assembly?

Thanks,
David M

Hi David,

I wish to get the va_arg instruction working on X86-64 Linux. This
requires implementing VAARG lowering for X86-64.

I am fine with implementing it, but I am unsure of what approach I
should take. The straightforward option is to add the DAG nodes required
to perform the operation during lowering.
(in X86TargetLowering::LowerVAARG()). However, the resulting code will
be relatively long to accommodate the complexity of what va_arg must
do. It would be easier to operate on a higher level, for example, by
implementing va_arg in LLVM assembly. Is it possible (or preferable) to
implement an intrinsic (va_arg) using target-specific llvm assembly?

I think currently llvm-gcc lowers va-arg to LLVM IR in the front-end, so you
may want to take a look at how it does that.

Ciao,

Duncan.