github.com/afumu/libc@v0.0.6/musl/src/fenv/sh/fenv.S (about) 1 #if __SH_FPU_ANY__ || __SH4__ 2 3 .global fegetround 4 .type fegetround, @function 5 fegetround: 6 sts fpscr, r0 7 rts 8 and #3, r0 9 10 .global __fesetround 11 .hidden __fesetround 12 .type __fesetround, @function 13 __fesetround: 14 sts fpscr, r0 15 mov #-4, r1 16 and r1, r0 17 or r4, r0 18 lds r0, fpscr 19 rts 20 mov #0, r0 21 22 .global fetestexcept 23 .type fetestexcept, @function 24 fetestexcept: 25 sts fpscr, r0 26 and r4, r0 27 rts 28 and #0x7c, r0 29 30 .global feclearexcept 31 .type feclearexcept, @function 32 feclearexcept: 33 mov r4, r0 34 and #0x7c, r0 35 not r0, r4 36 sts fpscr, r0 37 and r4, r0 38 lds r0, fpscr 39 rts 40 mov #0, r0 41 42 .global feraiseexcept 43 .type feraiseexcept, @function 44 feraiseexcept: 45 mov r4, r0 46 and #0x7c, r0 47 sts fpscr, r4 48 or r4, r0 49 lds r0, fpscr 50 rts 51 mov #0, r0 52 53 .global fegetenv 54 .type fegetenv, @function 55 fegetenv: 56 sts fpscr, r0 57 mov.l r0, @r4 58 rts 59 mov #0, r0 60 61 .global fesetenv 62 .type fesetenv, @function 63 fesetenv: 64 mov r4, r0 65 cmp/eq #-1, r0 66 bf 1f 67 68 ! the default environment is complicated by the fact that we need to 69 ! preserve the current precision bit, which we do not know a priori 70 sts fpscr, r0 71 mov #8, r1 72 swap.w r1, r1 73 bra 2f 74 and r1, r0 75 76 1: mov.l @r4, r0 ! non-default environment 77 2: lds r0, fpscr 78 rts 79 mov #0, r0 80 81 #endif