Yes, basically it is the wgen's task to set the register_parm, and it
is set on ty "Set_TY_register_parm".
But there is no ty for intrinsic call in wgen phase. So I think this
is the root reason that need another option to set regparm in be
phase.

Thanks
zhuqing

2011/9/6 David Coakley <dcoak...@gmail.com>:
> Hi Zhuqing,
>
> This change looks fine to me, although I do not quite understand the
> need for a separate option.  It should be the job of wgen to set the
> register_parm attribute according to the options passed to the
> frontend.
>
> -David Coakley / AMD Open Source Compiler Engineering
>
> On Mon, Sep 5, 2011 at 2:57 AM, 朱庆 <zqing1...@gmail.com> wrote:
>> Hi all,
>> Can gatekeeper help review the fix for bug851.
>> https://bugs.open64.net/show_bug.cgi?id=851
>> This is a revision for bug867.
>>
>> case:
>> typedef unsigned char u8;
>>  struct biosregs {
>>                 struct {
>>                         u8 dil, dih, edi2, edi3;
>>                         u8 sil, sih, esi2, esi3;
>>                         u8 bpl, bph, ebp2, ebp3;
>>                         u8 _spl, _sph, _esp2, _esp3;
>>                         u8 bl, bh, ebx2, ebx3;
>>                 };
>>
>>  };
>>  int fn(struct biosregs *reg)
>>  {
>>  __builtin_memset(reg,0,sizeof *reg);
>>  }
>>
>> compile with: opencc -O0 -keep a.c -show -mregparm=3 -m32
>> memset's parms still transfered by stack.
>>        movl %eax,-8(%ebp)              # reg
>>        movl -8(%ebp),%ecx              # reg
>>        movl %ecx,0(%esp)               #
>>        movl $0,%edx                    #
>>        movl %edx,4(%esp)               #
>>        movl $20,%eax                   #
>>        movl %eax,8(%esp)               #
>>        .loc    1       14      0
>>  #  14   __builtin_memset(reg,0,sizeof *reg);
>>        .globl  memset
>>        call memset                     # memset
>>
>> Option "mregparm=%d" is used to set the reg parm for function call,
>> but it is not suitable for build-in fuctions.
>> There is another option "-TENV:mregparm=%d" to set that value special
>> for built-in fuction call.
>>
>> So the fix is to add option "-TENV:mregparm=%d"  when mregparm is used.
>>
>> Patch:
>> Index: osprey/driver/OPTIONS
>> ===================================================================
>> --- osprey/driver/OPTIONS       (revision 3730)
>> +++ osprey/driver/OPTIONS       (working copy)
>> @@ -2079,7 +2079,7 @@
>>        ""
>>  -malign-functions=%d   warn_ignored(option_name);      ALL     NONE    self
>>        ""
>> --mregparm=%d   ;       Cc      cfe     -mregparm=%d
>> +-mregparm=%d   ;       Cc      cfe,be          "-mregparm=%d
>> -TENV:mregparm=%d"
>>        "Control the number registers used to pass integer arguments"
>>  %%% x86 extensions
>>  -mmmx  toggle(&mmx,TRUE);              ALL     ALL     ""
>>
>> Thanks
>> zhuqing
>>
>> ------------------------------------------------------------------------------
>> Special Offer -- Download ArcSight Logger for FREE!
>> Finally, a world-class log management solution at an even better
>> price-free! And you'll get a free "Love Thy Logs" t-shirt when you
>> download Logger. Secure your free ArcSight Logger TODAY!
>> http://p.sf.net/sfu/arcsisghtdev2dev
>> _______________________________________________
>> Open64-devel mailing list
>> Open64-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>
>

------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to