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: