This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: function attributes


 Hi Ian,

  Thanks for the reply.

On Fri, Oct 11, 2013 at 10:31 PM, Ian Lance Taylor <iant@google.com> wrote:
> On Fri, Oct 11, 2013 at 9:20 AM, Nagaraju Mekala <gnuuser.raj@gmail.com> wrote:
>>
>> I observed that in rs6000 port longcall is implemented by using
>> CALL_LONG define.
>> #define CALL_LONG 0x00000008 /* always call indirect */
>> In the md file they are checking the operand with CALL_LONG
>> if (INTVAL (operands[3]) & CALL_LONG)
>> operands[1] = rs6000_longcall_ref (operands[1]);
>> In my port I dont have suchthing to compare. Can we somehow parse the
>> tree chain and check the attributes of the functions..
>
> Look at init_cumulative_args in rs6000.c to see how CALL_LONG is set
> based on the function attribute.

I was able to get the function attribute from the init_cumulative_args
function.  I have used the fndecl tree to get the attribute details
but I have failed to stop generating br instruction. It should print
bk instruction.
I was unable to relate the super attribute from init_cumulative_args
to the branch pattern in md file to generate bk instruction.
I have intialized a global variable to 1 if super is detected and
checking the same in my pattern.
 My branch pattern looks like below
(define_insn "call_int1"
  [(call (mem (match_operand:SI 0 "call_insn_simple_operand" "ri"))
         (match_operand:SI 1 "" "i"))
  (clobber (reg:SI R_RS))]
 ""
  {
    register rtx t = operands[0];
    register rtx t2 = gen_rtx_REG (Pmode,
                              GP_REG_FIRST + RETURN_ADDR_REGNUM);
    if (GET_CODE (t) == SYMBOL_REF) {
        if(super_var())             ---------------> Here I am
checking for global variable
        {
        return "bk\tr1,8\;%#";
        }
        else {
        gen_rtx_CLOBBER (VOIDmode, t2);
        return "br\tr1,%0\;%#";

I observed that init_cumulative_args is called first for all the
functions once they are done then the above pattern for all the
instructions are called so my global variable is not useful.

Can you help me how to exactly emit bk instruction from the pattern
when super function is called.

> Ian

 Thanks,
Nagaraju


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]