Because I don't know how to handle a "t" constraint right, a math.h
can be rewritten
like:
long lrint (double x)
{
    long retval;
    __asm__ __volatile__ (
        "fldl   %1\n"
        "fistpl %0\n"  : "=m" (retval) : "m" (x) );
    return retval;
}
insteed of the
long lrint (double x)
{
     long retval;
     __asm__ __volatile__ ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");
       return retval;
}

2015-01-20 17:43 GMT+03:00, Sergey Korshunoff <[email protected]>:
> Handling of the "t" spec needs to be improved. I take patch for it
> from the this mail list (2014)
> tcc don't load a function parameter into the float stack.
> There is asm of the gcc and tcc:
>
> long lrint (double x)
> {
>     long retval;
>     __asm__ __volatile__ ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");
>       return retval;
> }
>
> gcc:
>   push   %ebp
>   mov    %esp,%ebp
>   sub    $0x4,%esp
>   fldl      0x8(%ebp)    # !!!
>   fistpl  -0x4(%ebp)
>   mov   -0x4(%ebp),%eax
>   leave
>   ret
>
> tcc:
>   push   %ebp
>   mov    %esp,%ebp
>   sub    $0x4,%esp
>   fistpl -0x4(%ebp)    # where is fldl ???
>   mov  -0x4(%ebp),%eax
>   jmp    14 <lrint+0x14>
>   leave
>   ret
>

_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to