fix sh fesetround failure to clear old mode
authorRich Felker <dalias@aerifal.cx>
Sat, 18 Apr 2020 07:23:40 +0000 (03:23 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 18 Apr 2020 07:23:40 +0000 (03:23 -0400)
the sh version of fesetround or'd the new rounding mode onto the
control register without clearing the old rounding mode bits, making
changes sticky. this was the root cause of multiple test failures.

src/fenv/sh/fenv.S

index 907aefc..b3b7d66 100644 (file)
@@ -12,6 +12,8 @@ fegetround:
 .type   __fesetround, @function
 __fesetround:
        sts fpscr, r0
+       mov #-4, r1
+       and r1, r0
        or  r4, r0
        lds r0, fpscr
        rts