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.
This commit is contained in:
Rich Felker 2013-08-16 12:30:37 -04:00
commit 7318c62e64
4 changed files with 75 additions and 0 deletions

View file

@ -0,0 +1 @@
../armhf/fenv.s

60
src/fenv/armhf/fenv.s Normal file
View file

@ -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

1
src/fenv/armhf/fenv.sub Normal file
View file

@ -0,0 +1 @@
fenv.s