Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 20 Jan 2020 12:38:04 -0500
From: Rich Felker <>
Subject: Re: Considering x86-64 fenv.s to C

On Mon, Jan 20, 2020 at 04:32:32PM +1100, Damian McGuckin wrote:
> On Fri, 17 Jan 2020, Rich Felker wrote:
> >Note that this approach is not compatible with trapping
> >exceptions, but we don't support them anyway.
> When an FNSTENV instruction is executed, all pending exceptions are
> essentially lost (either the x87 FPU status register is cleared or
> all exceptions are masked).

I don't follow what you're saying here and suspect you have a
misunderstanding of some of the terms involved. "Pending" does not
mean status flags that are already set. It's a concept from the
original 387 that's irrelevant in later cpu models, whereby an
exception may have already happened on the fpu but still be in transit
to the cpu. Executing fwait first, or fstenv rather than fnstenv, will
ensure that you don't miss anything even on the original 387.

> I think that this means either it wipes the exception bits in the
> status register or it wipes out the bits of the control register
> which handle which exceptions are trapped.
> Am I wrong.


> Because MUSL does not support trapping exceptions, we do not need to
> restore the control word.
> But do we need to copy the lost exceptions flags in the x87 register
> back into the SSE register, well at least where we have an SSE.
> Mind you, on an i386 without an SSE, you cannot restore them!

Again, I don't follow.


Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.