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