On Thu, Apr 28, 2016 at 11:22 AM, Yulia Koval <vaalfr...@gmail.com> wrote: > Thank you, > Here is the repost. > > Update TARGET_FUNCTION_INCOMING_ARG documentation > > On x86, interrupt handlers are only called by processors which push > interrupt data onto stack at the address where the normal return address > is. Since interrupt handlers must access interrupt data via pointers so > that they can update interrupt data, the pointer argument is passed as > "argument pointer - word". > > TARGET_FUNCTION_INCOMING_ARG defines how callee sees its argument. > Normally it returns REG, NULL, or CONST_INT. This patch adds arbitrary > address computation based on hard register, which can be forced into a > register, to the list. > > When copying an incoming argument onto stack, assign_parm_setup_stack > has: > > if (argument in memory) > copy argument in memory to stack > else > move argument to stack > > Since an arbitrary address computation may be passed as an argument, we > change it to: > > if (argument in memory) > copy argument in memory to stack > else > { > if (argument isn't in register) > force argument into a register > move argument to stack > } > > * function.c (assign_parm_setup_stack): Force source into a > register if needed. > * target.def (function_incoming_arg): Update documentation to > allow arbitrary address computation based on hard register. > * doc/tm.texi: Regenerated. > > > Br, > Yulia >
You also need to update DEFHOOK (function_incoming_arg, "Define this hook if the target machine has ``register windows'', so\n\ that the register in which a function sees an arguments is not\n\ necessarily the same as the one in which the caller passed the\n\ argument.\n\ \n\ ..... in target.def. -- H.J.