summaryrefslogtreecommitdiff
path: root/src/fenv
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2013-08-16 12:30:37 -0400
committerRich Felker <dalias@aerifal.cx>2013-08-16 12:30:37 -0400
commit7318c62e6439fca75ca3d50ddf0bd81a151c2766 (patch)
tree789578e9c4af6aedc50bcbde364dc180580e6de0 /src/fenv
parent0a4a4a7a11db93c39960feea96ec9dbed969a44e (diff)
downloadmusl-7318c62e6439fca75ca3d50ddf0bd81a151c2766.tar.gz
musl-7318c62e6439fca75ca3d50ddf0bd81a151c2766.tar.bz2
musl-7318c62e6439fca75ca3d50ddf0bd81a151c2766.tar.xz
musl-7318c62e6439fca75ca3d50ddf0bd81a151c2766.zip
support floating point environment (fenv) on armhf (hard float) subarchs
patch by nsz. I've tested it on an armhf machine and it seems to be working correctly.
Diffstat (limited to 'src/fenv')
-rw-r--r--src/fenv/armebhf/fenv.sub1
-rw-r--r--src/fenv/armhf/fenv.s60
-rw-r--r--src/fenv/armhf/fenv.sub1
3 files changed, 62 insertions, 0 deletions
diff --git a/src/fenv/armebhf/fenv.sub b/src/fenv/armebhf/fenv.sub
new file mode 100644
index 00000000..5281e40b
--- /dev/null
+++ b/src/fenv/armebhf/fenv.sub
@@ -0,0 +1 @@
+../armhf/fenv.s
diff --git a/src/fenv/armhf/fenv.s b/src/fenv/armhf/fenv.s
new file mode 100644
index 00000000..ee81b3d5
--- /dev/null
+++ b/src/fenv/armhf/fenv.s
@@ -0,0 +1,60 @@
+.global fegetround
+.type fegetround,%function
+fegetround:
+ mrc p10, 7, r0, cr1, cr0, 0
+ and r0, r0, #0xc00000
+ bx lr
+
+.global fesetround
+.type fesetround,%function
+fesetround:
+ mrc p10, 7, r3, cr1, cr0, 0
+ bic r3, r3, #0xc00000
+ orr r3, r3, r0
+ mcr p10, 7, r3, cr1, cr0, 0
+ mov r0, #0
+ bx lr
+
+.global fetestexcept
+.type fetestexcept,%function
+fetestexcept:
+ mrc p10, 7, r3, cr1, cr0, 0
+ and r0, r0, r3
+ bx lr
+
+.global feclearexcept
+.type feclearexcept,%function
+feclearexcept:
+ mrc p10, 7, r3, cr1, cr0, 0
+ bic r3, r3, r0
+ mcr p10, 7, r3, cr1, cr0, 0
+ mov r0, #0
+ bx lr
+
+.global feraiseexcept
+.type feraiseexcept,%function
+feraiseexcept:
+ mrc p10, 7, r3, cr1, cr0, 0
+ orr r3, r3, r0
+ mcr p10, 7, r3, cr1, cr0, 0
+ mov r0, #0
+ bx lr
+
+.global fegetenv
+.type fegetenv,%function
+fegetenv:
+ mrc p10, 7, r3, cr1, cr0, 0
+ str r3, [r0]
+ mov r0, #0
+ bx lr
+
+.global fesetenv
+.type fesetenv,%function
+fesetenv:
+ mrc p10, 7, r3, cr1, cr0, 0
+ cmn r0, #1
+ moveq r3, #0
+ ldrne r3, [r0]
+ mcr p10, 7, r3, cr1, cr0, 0
+ mov r0, #0
+ bx lr
diff --git a/src/fenv/armhf/fenv.sub b/src/fenv/armhf/fenv.sub
new file mode 100644
index 00000000..ec559cd4
--- /dev/null
+++ b/src/fenv/armhf/fenv.sub
@@ -0,0 +1 @@
+fenv.s