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

Reply via email to