Thanks,
Here is the patch. Is it ok?

    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.

On Thu, Apr 28, 2016 at 10:32 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> 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.

Attachment: patch
Description: Binary data

Reply via email to