• 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	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
24fetestexcept:
25	sts fpscr, r0
26	and r4, r0
27	rts
28	 and #0x7c, r0
29
30.global feclearexcept
31.type   feclearexcept, @function
32feclearexcept:
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
44feraiseexcept:
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
55fegetenv:
56	sts fpscr, r0
57	mov.l r0, @r4
58	rts
59	 mov #0, r0
60
61.global fesetenv
62.type   fesetenv, @function
63fesetenv:
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
761:	mov.l @r4, r0      ! non-default environment
772:	lds r0, fpscr
78	rts
79	 mov #0, r0
80
81#endif
82