From 7318c62e6439fca75ca3d50ddf0bd81a151c2766 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 16 Aug 2013 12:30:37 -0400 Subject: 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. --- src/fenv/armebhf/fenv.sub | 1 + src/fenv/armhf/fenv.s | 60 +++++++++++++++++++++++++++++++++++++++++++++++ src/fenv/armhf/fenv.sub | 1 + 3 files changed, 62 insertions(+) create mode 100644 src/fenv/armebhf/fenv.sub create mode 100644 src/fenv/armhf/fenv.s create mode 100644 src/fenv/armhf/fenv.sub (limited to 'src') 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 -- cgit v1.2.1