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

Bug#148529: gnat-3.1: sin/cos is random exception/result generator



On Mon, 2002-06-03 at 10:37, Brian May wrote:
> It looks OK, but all it does is copy the input to the output (aux was
> created by renaming ada.numerics.aux to aux):

On second thoughts, no it doesn't!

(Dislaimer: I don't really know what these opcodes stand for, so I am
guessing)

The code in question is

> .L66:
>         fldt    -24(%ebp)

load value of reduced_x into FPU stack

> #APP
>         fsin                 
>         xorl    %eax, %eax 
>         fnstsw  %ax         

do operation

> #NO_APP
>         fstp    %st(0)
>         movw    %ax, -42(%ebp)

Save status register. However, where is the save result opcode? The
result is at -40(%ebp) I think.

>         movb    -41(%ebp), %al
>         andl    $4, %eax
>         testb   %al, %al
>         jne     .L69
>         jmp     .L67

test status.C2

> .L69:
>         subl    $4, %esp
>         pushl   -32(%ebp)
>         pushl   -36(%ebp)
>         pushl   -40(%ebp)
>         call    aux__reduce
>         addl    $16, %esp
>         fstpt   -72(%ebp)
>         movl    -72(%ebp), %eax
>         movl    %eax, -24(%ebp)
>         movl    -68(%ebp), %eax
>         movl    %eax, -20(%ebp)
>         movl    -64(%ebp), %eax
>         movl    %eax, -16(%ebp)
>         movl    -60(%ebp), %eax
>         movl    %eax, -12(%ebp)
>         jmp     .L66
> .L67:
>         movl    -40(%ebp), %eax

assumes -40(%ebp) has already been initialized.

>         movl    -36(%ebp), %edx
>         movl    -32(%ebp), %ecx
>         movl    %eax, -88(%ebp)
>         movl    %edx, -84(%ebp)
>         movl    %ecx, -80(%ebp)
>         fldt    -88(%ebp)
>         leave
>         ret
-- 
Brian May <bam@snoopy.apana.org.au>



-- 
To UNSUBSCRIBE, email to debian-gcc-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: