workaround gcc-4 assembly constraint bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've been working on getting the ocaml extras package compiled on devel:
  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=156238
There appears to be a bug in gcc4's inline assembly constraints:
  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21291
that's keeping the compiler from selecting memory when we run out of
registers.  Here's the affected ocaml code from:
ocaml-3.08.3/otherlibs/num/bng_ia32.c:bngdigit bng_ia32_mult_sub_digit:

    asm("1: \n\t"
        "movl (%1), %%eax \n\t"
        "movl (%0), %4 \n\t"
        "mull %5\n\t"           /* edx:eax = d * next digit of b */
        "subl %%eax, %4 \n\t"   /* subtract eax from next digit of a */
        "adcl $0, %%edx \n\t"   /* accumulate carry in edx */
        "subl %3, %4 \n\t"      /* subtract out */
        "adcl $0, %%edx \n\t"   /* accumulate carry in edx */
        "movl %4, (%0) \n\t"    /* store next digit of result */
        "movl %%edx, %3 \n\t"   /* edx is next out */
        "leal 4(%0), %0 \n\t"
        "leal 4(%1), %1 \n\t"
        "decl %2 \n\t"
        "jnz 1b"
        : "+&r" (a), "+&r" (b), "+&rm" (blen), "+&rm" (out), "=&r" (tmp)
        : "rm" (d)
        : "eax", "edx");

I think that the solution should be to change the constraints to specify
memory only rather than a register with memory fallback:

        : "+&r" (a), "+&r" (b), "+m" (blen), "+m" (out), "=&r" (tmp)
        : "rm" (d)
        : "eax", "edx");

I'm not too familiar with gcc's constraints, though.  Would anyone with
a bit more experience be willing to tell me if that looks right or not?

Thanks,
Toshio
-- 

toshio \ 25th March, 1999:  Cold rain in Georgia.  Blustery blowing wind.
 @tiki  \ Freezing fingers and tired body.  Hiking on because the shelters
 -lounge \ are filled with other hikers.
 .com     \__________Life is miserable -- Life is grand!_______ GA->ME 1999

Attachment: signature.asc
Description: This is a digitally signed message part

-- 
fedora-devel-list mailing list
fedora-devel-list@xxxxxxxxxx
http://www.redhat.com/mailman/listinfo/fedora-devel-list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux