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