|
Message-ID: <20120317184800.GR5728@port70.net> Date: Sat, 17 Mar 2012 19:48:01 +0100 From: Szabolcs Nagy <nsz@...t70.net> To: musl@...ts.openwall.com Subject: Re: i386 fegetround bug * Szabolcs Nagy <nsz@...t70.net> [2012-03-17 15:42:44 +0100]: > fegetround had a bug: eax was not cleared properly > > while fixing it i also changed fesetround see my commit message > > http://nsz.repo.hu/git/?p=musl;a=commit;h=88cfaf8a142a8c57beccb89398a6421c4bbf121a > i realized my analysis was not entirely correct after rereading Intel 64 and IA-32 .. Manual, vol.1. 8.6 last paragraph and 8.7.1 it suggests that pending unmasked exceptions can occur with normal operation (assuming there are unmasked exceptions) (i just couldn't produce such case from c as an arithmetic op is usually followed by an fld which traped before i could test my theory with an fnstenv) so if we want to be unmasked-exception-friendly then fnstenv/fldenv pair should be used (maybe with some extra check for unmasked exceptions first: fnstcw x and $0x3f,x sub $0x3f,x jnz unmasked_exceptions ... and the unmasked_exceptions case uses fnstenv/fldenv, otherwise plain fldcw is used) (fnstenv/fldenv can probably hurt those who change rounding mode frequently, i haven't seen such code but in theory it makes sense for interval arithmetics)
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.