• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#if __SH_FPU_ANY__ || __SH4__
2
3.global fegetround
4.type   fegetround, @function
5fegetround:
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	or  r4, r0
16	lds r0, fpscr
17	rts
18	 mov #0, r0
19
20.global fetestexcept
21.type   fetestexcept, @function
22fetestexcept:
23	sts fpscr, r0
24	and r4, r0
25	rts
26	 and #0x7c, r0
27
28.global feclearexcept
29.type   feclearexcept, @function
30feclearexcept:
31	mov r4, r0
32	and #0x7c, r0
33	not r0, r4
34	sts fpscr, r0
35	and r4, r0
36	lds r0, fpscr
37	rts
38	 mov #0, r0
39
40.global feraiseexcept
41.type   feraiseexcept, @function
42feraiseexcept:
43	mov r4, r0
44	and #0x7c, r0
45	sts fpscr, r4
46	or  r4, r0
47	lds r0, fpscr
48	rts
49	 mov #0, r0
50
51.global fegetenv
52.type   fegetenv, @function
53fegetenv:
54	sts fpscr, r0
55	mov.l r0, @r4
56	rts
57	 mov #0, r0
58
59.global fesetenv
60.type   fesetenv, @function
61fesetenv:
62	mov r4, r0
63	cmp/eq #-1, r0
64	bf 1f
65
66	! the default environment is complicated by the fact that we need to
67	! preserve the current precision bit, which we do not know a priori
68	sts fpscr, r0
69	mov #8, r1
70	swap.w r1, r1
71	bra 2f
72	 and r1, r0
73
741:	mov.l @r4, r0      ! non-default environment
752:	lds r0, fpscr
76	rts
77	 mov #0, r0
78
79#endif
80