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